From f8fa089d8ed7d7862c2e99dcd3f10b20ada58033 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:51 +0200 Subject: [PATCH 01/23] refactor: autolink transitive dependencies --- packages/cli-config/src/loadConfig.ts | 16 ++-- .../cli-config/src/resolveDependencies.ts | 83 +++++++++++++++++++ 2 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 packages/cli-config/src/resolveDependencies.ts diff --git a/packages/cli-config/src/loadConfig.ts b/packages/cli-config/src/loadConfig.ts index ffd3533de..1a4481f30 100644 --- a/packages/cli-config/src/loadConfig.ts +++ b/packages/cli-config/src/loadConfig.ts @@ -12,7 +12,7 @@ import { resolveNodeModuleDir, UnknownProjectError, } from '@react-native-community/cli-tools'; -import findDependencies from './findDependencies'; +import {collectDependencies, dedupeDependencies} from './resolveDependencies'; import resolveReactNativePath from './resolveReactNativePath'; import { readConfigFromDisk, @@ -112,12 +112,11 @@ function loadConfig(projectRoot: string = findProjectRoot()): Config { return lazyProject; }, }; + const deps = collectDependencies(projectRoot); + const dedupedDeps = dedupeDependencies(deps); const finalConfig = Array.from( - new Set([ - ...Object.keys(userConfig.dependencies), - ...findDependencies(projectRoot), - ]), + new Set([...Object.keys(userConfig.dependencies), ...deps.keys()]), ).reduce((acc: Config, dependencyName) => { const localDependencyRoot = userConfig.dependencies[dependencyName] && @@ -125,7 +124,12 @@ function loadConfig(projectRoot: string = findProjectRoot()): Config { try { let root = localDependencyRoot || - resolveNodeModuleDir(projectRoot, dependencyName); + resolveNodeModuleDir( + dedupedDeps.has(dependencyName) + ? dedupedDeps.get(dependencyName)!.path + : projectRoot, + dependencyName, + ); let config = readDependencyConfigFromDisk(root, dependencyName); const isPlatform = Object.keys(config.platforms).length > 0; diff --git a/packages/cli-config/src/resolveDependencies.ts b/packages/cli-config/src/resolveDependencies.ts new file mode 100644 index 000000000..41e3049ef --- /dev/null +++ b/packages/cli-config/src/resolveDependencies.ts @@ -0,0 +1,83 @@ +import path from 'path'; +import fs from 'fs-extra'; + +interface DependencyData { + path: string; + version: string; + duplicates?: DependencyData[]; +} + +export function collectDependencies(root: string): Map { + const dependencies = new Map(); + + const checkDependency = (dependencyPath: string) => { + const packageJsonPath = path.join(dependencyPath, 'package.json'); + const packageJson = require(packageJsonPath); + + if (dependencies.has(packageJson.name)) { + const dependency = dependencies.get(packageJson.name) as DependencyData; + + if ( + dependencyPath !== dependency.path && + dependency.duplicates?.every( + (duplicate) => duplicate.path !== dependencyPath, + ) + ) { + dependencies.set(packageJson.name, { + ...dependency, + duplicates: [ + ...dependency.duplicates, + {path: dependencyPath, version: packageJson.version}, + ], + }); + } + + return; + } + + dependencies.set(packageJson.name, { + path: dependencyPath, + version: packageJson.version, + duplicates: [], + }); + + for (const dependency in { + ...packageJson.dependencies, + ...(root === dependencyPath ? packageJson.devDependencies : {}), + }) { + const depPath = path.join(dependencyPath, 'node_modules', dependency); + const rootPath = path.join(root, 'node_modules', dependency); + if (fs.existsSync(depPath)) { + checkDependency(depPath); + } else if (fs.existsSync(rootPath)) { + checkDependency(rootPath); + } + } + }; + + checkDependency(root); + + return dependencies; +} + +export function dedupeDependencies( + dependencies: Map, +): Map { + const latestVersions = new Map(); + Array.from(dependencies).forEach(([packageName, packageInfo]) => { + if (packageInfo.duplicates!.length > 0) { + const allVersions = [ + {path: packageInfo.path, version: packageInfo.version}, + ...packageInfo.duplicates!, + ]; + + const findLatest = allVersions.reduce((highest, pkg) => + pkg.version.localeCompare(highest.version) === 1 ? pkg : highest, + ); + + latestVersions.set(packageName, findLatest); + } + }); + + return latestVersions; +} From 0401979b7bac6a5ce0ddd69a7d842541ce6a8bbf Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:51 +0200 Subject: [PATCH 02/23] collect peer deps of projects dependencies --- packages/cli/src/index.ts | 4 + .../cli/src/tools/resolveTransitiveDeps.ts | 92 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 packages/cli/src/tools/resolveTransitiveDeps.ts diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index de74e82df..71a74513f 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -10,6 +10,7 @@ import childProcess from 'child_process'; import {Command as CommanderCommand} from 'commander'; import path from 'path'; import {detachedCommands, projectCommands} from './commands'; +import installTransitiveDeps from './tools/resolveTransitiveDeps'; const pkgJson = require('../package.json'); @@ -172,6 +173,9 @@ async function setupAndRun() { } } + // are peer dependencies installed? + await installTransitiveDeps(); + let config: Config | undefined; try { config = loadConfig(); diff --git a/packages/cli/src/tools/resolveTransitiveDeps.ts b/packages/cli/src/tools/resolveTransitiveDeps.ts new file mode 100644 index 000000000..34258341b --- /dev/null +++ b/packages/cli/src/tools/resolveTransitiveDeps.ts @@ -0,0 +1,92 @@ +import path from 'path'; +import fs from 'fs-extra'; +import {logger} from '@react-native-community/cli-tools'; +import chalk from 'chalk'; +import {prompt} from 'prompts'; + +interface DependencyInfo { + path: string; + peerDependencies: {[key: string]: string}; +} + +function getPeerDependencies(root: string): Map { + const packageJsonPath = path.join(root, 'package.json'); + const packageJson = require(packageJsonPath); + + const dependenciesAndPeerDependencies = new Map(); + + for (const dependency in {...packageJson.dependencies}) { + const dependencyPath = path.join(root, 'node_modules', dependency); + + if (fs.existsSync(dependencyPath)) { + const packageJsonPath = path.join(dependencyPath, 'package.json'); + const packageJson = require(packageJsonPath); + + if ( + packageJson.peerDependencies && + !dependenciesAndPeerDependencies.has(dependency) + ) { + dependenciesAndPeerDependencies.set(dependency, { + path: dependencyPath, + peerDependencies: packageJson.peerDependencies, + }); + } + } + } + + return dependenciesAndPeerDependencies; +} + +function excludeInstalledPeerDependencies( + root: string, + peerDependencies: Map, +) { + const missingPeerDependencies: Record> = {}; + + peerDependencies.forEach((value, key) => { + const missingDeps = Object.entries(value.peerDependencies).reduce( + (missingDepsList, [name, version]) => { + const rootPath = path.join(root, 'node_modules', name); + if (!fs.existsSync(rootPath)) { + missingDepsList[name] = version; + } + return missingDepsList; + }, + {}, + ); + + if (Object.keys(missingDeps).length > 0) { + missingPeerDependencies[key] = missingDeps; + } + }); + + return missingPeerDependencies; +} + +export default async function installTransitiveDeps() { + const root = process.cwd(); + + const peerDependencies = getPeerDependencies(root); + const depsToInstall = excludeInstalledPeerDependencies( + root, + peerDependencies, + ); + const dependenciesWithMissingDeps = Object.keys(depsToInstall); + if (dependenciesWithMissingDeps.length > 0) { + logger.warn( + `Looks like you are missing some of the peer dependencies of your libraries: + ${dependenciesWithMissingDeps.map( + (dep) => + `${chalk.bold(dep)}:\n ${Object.keys(depsToInstall[dep]).map( + (d) => `\t-${d}\n`, + )}`, + )}`, + ); + const {install} = await prompt({ + type: 'confirm', + name: 'install', + message: 'Do you want to install them now?', + }); + console.log({install}); + } +} From f6e09aa9da6deb587fe59f4338e4e4ce2198ce96 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:51 +0200 Subject: [PATCH 03/23] ignore optional peer deps --- .../cli/src/tools/resolveTransitiveDeps.ts | 77 +++++++++++++++++-- 1 file changed, 69 insertions(+), 8 deletions(-) diff --git a/packages/cli/src/tools/resolveTransitiveDeps.ts b/packages/cli/src/tools/resolveTransitiveDeps.ts index 34258341b..f5f70b39a 100644 --- a/packages/cli/src/tools/resolveTransitiveDeps.ts +++ b/packages/cli/src/tools/resolveTransitiveDeps.ts @@ -1,34 +1,56 @@ import path from 'path'; import fs from 'fs-extra'; -import {logger} from '@react-native-community/cli-tools'; +import {getLoader, logger} from '@react-native-community/cli-tools'; import chalk from 'chalk'; import {prompt} from 'prompts'; +import execa from 'execa'; +import semver from 'semver'; interface DependencyInfo { path: string; peerDependencies: {[key: string]: string}; } +function isUsingYarn(root: string) { + return fs.existsSync(path.join(root, 'yarn.lock')); +} + function getPeerDependencies(root: string): Map { const packageJsonPath = path.join(root, 'package.json'); const packageJson = require(packageJsonPath); const dependenciesAndPeerDependencies = new Map(); - for (const dependency in {...packageJson.dependencies}) { + for (const dependency in packageJson.dependencies) { const dependencyPath = path.join(root, 'node_modules', dependency); if (fs.existsSync(dependencyPath)) { - const packageJsonPath = path.join(dependencyPath, 'package.json'); - const packageJson = require(packageJsonPath); + const dependencyPackageJson = require(path.join( + dependencyPath, + 'package.json', + )); + const peerDependenciesMeta = dependencyPackageJson.peerDependenciesMeta; + + let optionalDeps: string[] = []; + if (peerDependenciesMeta) { + const peers = Object.keys(peerDependenciesMeta); + optionalDeps = peers.filter( + (p) => peerDependenciesMeta[p].optional === true, + ); + } if ( - packageJson.peerDependencies && + dependencyPackageJson.peerDependencies && !dependenciesAndPeerDependencies.has(dependency) ) { dependenciesAndPeerDependencies.set(dependency, { path: dependencyPath, - peerDependencies: packageJson.peerDependencies, + peerDependencies: Object.keys(dependencyPackageJson.peerDependencies) + .filter((key) => !optionalDeps.includes(key)) + .reduce>((result, key) => { + result[key] = dependencyPackageJson.peerDependencies[key]; + return result; + }, {}), }); } } @@ -63,6 +85,22 @@ function excludeInstalledPeerDependencies( return missingPeerDependencies; } +function getMatchingPackageVersion(packageName: string, range: string) { + const {stdout} = execa.sync('yarn', [ + 'info', + packageName, + 'versions', + '--json', + ]); + const versions = JSON.parse(stdout).data as string[]; + const satisfying = versions.filter((version) => + semver.satisfies(version, range), + ); + const maxSatisfying = semver.maxSatisfying(satisfying, range); + + return maxSatisfying; +} + export default async function installTransitiveDeps() { const root = process.cwd(); @@ -85,8 +123,31 @@ export default async function installTransitiveDeps() { const {install} = await prompt({ type: 'confirm', name: 'install', - message: 'Do you want to install them now?', + message: + 'Do you want to install them now? The matching versions will be added as project dependencies.', }); - console.log({install}); + const loader = getLoader({text: 'Installing peer dependencies...'}); + + if (install) { + if (isUsingYarn(root)) { + let deps = {} as Record; + dependenciesWithMissingDeps.map((dep) => { + const missingDeps = depsToInstall[dep]; + + Object.entries(missingDeps).map(([name, range]) => { + const version = getMatchingPackageVersion(name, range); + if (version) { + deps[name] = version; + } + }); + }); + loader.start(); + execa.sync('yarn', [ + 'add', + ...Object.entries(deps).map(([k, v]) => `${k}@^${v}`), + ]); + loader.succeed(); + } + } } } From d2e43b3767dd9c22cdde66062835fb0c75e7e4f3 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:52 +0200 Subject: [PATCH 04/23] support npm --- .../cli/src/tools/resolveTransitiveDeps.ts | 144 +++++++++++++----- 1 file changed, 102 insertions(+), 42 deletions(-) diff --git a/packages/cli/src/tools/resolveTransitiveDeps.ts b/packages/cli/src/tools/resolveTransitiveDeps.ts index f5f70b39a..0e417a92d 100644 --- a/packages/cli/src/tools/resolveTransitiveDeps.ts +++ b/packages/cli/src/tools/resolveTransitiveDeps.ts @@ -15,10 +15,10 @@ function isUsingYarn(root: string) { return fs.existsSync(path.join(root, 'yarn.lock')); } -function getPeerDependencies(root: string): Map { - const packageJsonPath = path.join(root, 'package.json'); - const packageJson = require(packageJsonPath); - +function getPeerDependencies( + root: string, + packageJson: any, +): Map { const dependenciesAndPeerDependencies = new Map(); for (const dependency in packageJson.dependencies) { @@ -62,14 +62,21 @@ function getPeerDependencies(root: string): Map { function excludeInstalledPeerDependencies( root: string, peerDependencies: Map, + yarn = true, ) { + const packageJson = require(path.join(root, 'package.json')); const missingPeerDependencies: Record> = {}; - peerDependencies.forEach((value, key) => { const missingDeps = Object.entries(value.peerDependencies).reduce( (missingDepsList, [name, version]) => { const rootPath = path.join(root, 'node_modules', name); - if (!fs.existsSync(rootPath)) { + if ( + (yarn && !fs.existsSync(rootPath)) || + (!yarn && + (fs.existsSync(path.join(rootPath, 'ios')) || + fs.existsSync(path.join(rootPath, 'android'))) && + !Object.keys(packageJson.dependencies).includes(name)) + ) { missingDepsList[name] = version; } return missingDepsList; @@ -85,69 +92,122 @@ function excludeInstalledPeerDependencies( return missingPeerDependencies; } -function getMatchingPackageVersion(packageName: string, range: string) { - const {stdout} = execa.sync('yarn', [ - 'info', - packageName, - 'versions', - '--json', - ]); - const versions = JSON.parse(stdout).data as string[]; - const satisfying = versions.filter((version) => - semver.satisfies(version, range), - ); - const maxSatisfying = semver.maxSatisfying(satisfying, range); +function getMatchingPackageVersion( + packageName: string, + range: string, + yarn = true, +) { + if (yarn) { + const {stdout} = execa.sync('yarn', [ + 'info', + packageName, + 'versions', + '--json', + ]); + const versions = JSON.parse(stdout).data as string[]; + const satisfying = versions.filter((version) => + semver.satisfies(version, range), + ); + const maxSatisfying = semver.maxSatisfying(satisfying, range); + + return maxSatisfying; + } else { + const {stdout} = execa.sync('npm', [ + 'view', + `${packageName}@${range}`, + 'version', + '--json', + ]); + const versions = JSON.parse(stdout); + const maxSatisfying = semver.maxSatisfying(versions, range); + return maxSatisfying; + } +} - return maxSatisfying; +function flattenSemver(input) { + const result = {}; + input.forEach((item) => { + Object.entries(item).forEach(([key, value]) => { + if (result[key]) { + if (value !== '*' && result[key] !== '*') { + result[key] = `${result[key]} && ${value}`; + } + } else { + result[key] = value; + } + }); + }); + + return result; } export default async function installTransitiveDeps() { const root = process.cwd(); - - const peerDependencies = getPeerDependencies(root); + const packageJsonPath = path.join(root, 'package.json'); + const packageJson = require(packageJsonPath); + const isYarn = isUsingYarn(root); + const peerDependencies = getPeerDependencies(root, packageJson); const depsToInstall = excludeInstalledPeerDependencies( root, peerDependencies, + isYarn, ); + const dependenciesWithMissingDeps = Object.keys(depsToInstall); if (dependenciesWithMissingDeps.length > 0) { logger.warn( - `Looks like you are missing some of the peer dependencies of your libraries: - ${dependenciesWithMissingDeps.map( - (dep) => - `${chalk.bold(dep)}:\n ${Object.keys(depsToInstall[dep]).map( - (d) => `\t-${d}\n`, - )}`, - )}`, + 'Looks like you are missing some of the peer dependencies of your libraries:\n', + ); + logger.log( + dependenciesWithMissingDeps + .map( + (dep) => + `\t${chalk.bold(dep)}:\n ${Object.keys(depsToInstall[dep]).map( + (d) => `\t- ${d}\n`, + )}`, + ) + .join('\n') + .replace(/,/g, ''), ); const {install} = await prompt({ type: 'confirm', name: 'install', message: - 'Do you want to install them now? The matching versions will be added as project dependencies.', + 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', }); const loader = getLoader({text: 'Installing peer dependencies...'}); if (install) { - if (isUsingYarn(root)) { - let deps = {} as Record; - dependenciesWithMissingDeps.map((dep) => { - const missingDeps = depsToInstall[dep]; - - Object.entries(missingDeps).map(([name, range]) => { - const version = getMatchingPackageVersion(name, range); - if (version) { - deps[name] = version; - } - }); + let deps = {} as Record; + const semverRanges = flattenSemver(Object.values(depsToInstall)); + + dependenciesWithMissingDeps.map((dep) => { + const missingDeps = depsToInstall[dep]; + Object.entries(missingDeps).map(([name]) => { + const version = getMatchingPackageVersion( + name, + semverRanges[name], + isYarn, + ); + if (version) { + deps[name] = version; + } }); - loader.start(); + }); + loader.start(); + + if (isYarn) { execa.sync('yarn', [ 'add', ...Object.entries(deps).map(([k, v]) => `${k}@^${v}`), ]); - loader.succeed(); + } else { + execa.sync('npm', [ + 'install', + ...Object.entries(deps).map(([k, v]) => `${k}@^${v}`), + ]); } + loader.succeed(); } } } From a52888e1ab31f4eb886f43d42a609c21f42b7979 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:52 +0200 Subject: [PATCH 05/23] remove unused code --- packages/cli-config/src/loadConfig.ts | 16 ++-- .../cli-config/src/resolveDependencies.ts | 83 ------------------- 2 files changed, 6 insertions(+), 93 deletions(-) delete mode 100644 packages/cli-config/src/resolveDependencies.ts diff --git a/packages/cli-config/src/loadConfig.ts b/packages/cli-config/src/loadConfig.ts index 1a4481f30..e2b699124 100644 --- a/packages/cli-config/src/loadConfig.ts +++ b/packages/cli-config/src/loadConfig.ts @@ -12,7 +12,6 @@ import { resolveNodeModuleDir, UnknownProjectError, } from '@react-native-community/cli-tools'; -import {collectDependencies, dedupeDependencies} from './resolveDependencies'; import resolveReactNativePath from './resolveReactNativePath'; import { readConfigFromDisk, @@ -20,6 +19,7 @@ import { } from './readConfigFromDisk'; import assign from './assign'; import merge from './merge'; +import findDependencies from './findDependencies'; function getDependencyConfig( root: string, @@ -112,11 +112,12 @@ function loadConfig(projectRoot: string = findProjectRoot()): Config { return lazyProject; }, }; - const deps = collectDependencies(projectRoot); - const dedupedDeps = dedupeDependencies(deps); const finalConfig = Array.from( - new Set([...Object.keys(userConfig.dependencies), ...deps.keys()]), + new Set([ + ...Object.keys(userConfig.dependencies), + ...findDependencies(projectRoot), + ]), ).reduce((acc: Config, dependencyName) => { const localDependencyRoot = userConfig.dependencies[dependencyName] && @@ -124,12 +125,7 @@ function loadConfig(projectRoot: string = findProjectRoot()): Config { try { let root = localDependencyRoot || - resolveNodeModuleDir( - dedupedDeps.has(dependencyName) - ? dedupedDeps.get(dependencyName)!.path - : projectRoot, - dependencyName, - ); + resolveNodeModuleDir(projectRoot, dependencyName); let config = readDependencyConfigFromDisk(root, dependencyName); const isPlatform = Object.keys(config.platforms).length > 0; diff --git a/packages/cli-config/src/resolveDependencies.ts b/packages/cli-config/src/resolveDependencies.ts deleted file mode 100644 index 41e3049ef..000000000 --- a/packages/cli-config/src/resolveDependencies.ts +++ /dev/null @@ -1,83 +0,0 @@ -import path from 'path'; -import fs from 'fs-extra'; - -interface DependencyData { - path: string; - version: string; - duplicates?: DependencyData[]; -} - -export function collectDependencies(root: string): Map { - const dependencies = new Map(); - - const checkDependency = (dependencyPath: string) => { - const packageJsonPath = path.join(dependencyPath, 'package.json'); - const packageJson = require(packageJsonPath); - - if (dependencies.has(packageJson.name)) { - const dependency = dependencies.get(packageJson.name) as DependencyData; - - if ( - dependencyPath !== dependency.path && - dependency.duplicates?.every( - (duplicate) => duplicate.path !== dependencyPath, - ) - ) { - dependencies.set(packageJson.name, { - ...dependency, - duplicates: [ - ...dependency.duplicates, - {path: dependencyPath, version: packageJson.version}, - ], - }); - } - - return; - } - - dependencies.set(packageJson.name, { - path: dependencyPath, - version: packageJson.version, - duplicates: [], - }); - - for (const dependency in { - ...packageJson.dependencies, - ...(root === dependencyPath ? packageJson.devDependencies : {}), - }) { - const depPath = path.join(dependencyPath, 'node_modules', dependency); - const rootPath = path.join(root, 'node_modules', dependency); - if (fs.existsSync(depPath)) { - checkDependency(depPath); - } else if (fs.existsSync(rootPath)) { - checkDependency(rootPath); - } - } - }; - - checkDependency(root); - - return dependencies; -} - -export function dedupeDependencies( - dependencies: Map, -): Map { - const latestVersions = new Map(); - Array.from(dependencies).forEach(([packageName, packageInfo]) => { - if (packageInfo.duplicates!.length > 0) { - const allVersions = [ - {path: packageInfo.path, version: packageInfo.version}, - ...packageInfo.duplicates!, - ]; - - const findLatest = allVersions.reduce((highest, pkg) => - pkg.version.localeCompare(highest.version) === 1 ? pkg : highest, - ); - - latestVersions.set(packageName, findLatest); - } - }); - - return latestVersions; -} From 54f6223c19a2c3ea7d819afdbd1c3440d0e6c0ca Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:52 +0200 Subject: [PATCH 06/23] simplify deps installation --- .../cli/src/tools/resolveTransitiveDeps.ts | 77 ++----------------- 1 file changed, 6 insertions(+), 71 deletions(-) diff --git a/packages/cli/src/tools/resolveTransitiveDeps.ts b/packages/cli/src/tools/resolveTransitiveDeps.ts index 0e417a92d..f10865636 100644 --- a/packages/cli/src/tools/resolveTransitiveDeps.ts +++ b/packages/cli/src/tools/resolveTransitiveDeps.ts @@ -4,7 +4,6 @@ import {getLoader, logger} from '@react-native-community/cli-tools'; import chalk from 'chalk'; import {prompt} from 'prompts'; import execa from 'execa'; -import semver from 'semver'; interface DependencyInfo { path: string; @@ -92,55 +91,6 @@ function excludeInstalledPeerDependencies( return missingPeerDependencies; } -function getMatchingPackageVersion( - packageName: string, - range: string, - yarn = true, -) { - if (yarn) { - const {stdout} = execa.sync('yarn', [ - 'info', - packageName, - 'versions', - '--json', - ]); - const versions = JSON.parse(stdout).data as string[]; - const satisfying = versions.filter((version) => - semver.satisfies(version, range), - ); - const maxSatisfying = semver.maxSatisfying(satisfying, range); - - return maxSatisfying; - } else { - const {stdout} = execa.sync('npm', [ - 'view', - `${packageName}@${range}`, - 'version', - '--json', - ]); - const versions = JSON.parse(stdout); - const maxSatisfying = semver.maxSatisfying(versions, range); - return maxSatisfying; - } -} - -function flattenSemver(input) { - const result = {}; - input.forEach((item) => { - Object.entries(item).forEach(([key, value]) => { - if (result[key]) { - if (value !== '*' && result[key] !== '*') { - result[key] = `${result[key]} && ${value}`; - } - } else { - result[key] = value; - } - }); - }); - - return result; -} - export default async function installTransitiveDeps() { const root = process.cwd(); const packageJsonPath = path.join(root, 'package.json'); @@ -178,34 +128,19 @@ export default async function installTransitiveDeps() { const loader = getLoader({text: 'Installing peer dependencies...'}); if (install) { - let deps = {} as Record; - const semverRanges = flattenSemver(Object.values(depsToInstall)); - + let deps = new Set(); dependenciesWithMissingDeps.map((dep) => { const missingDeps = depsToInstall[dep]; - Object.entries(missingDeps).map(([name]) => { - const version = getMatchingPackageVersion( - name, - semverRanges[name], - isYarn, - ); - if (version) { - deps[name] = version; - } - }); + deps.add(Object.keys(missingDeps)); }); + const arr = Array.from(deps) as string[]; + const flat = [].concat(...arr); loader.start(); if (isYarn) { - execa.sync('yarn', [ - 'add', - ...Object.entries(deps).map(([k, v]) => `${k}@^${v}`), - ]); + execa.sync('yarn', ['add', ...flat.map((dep) => dep)]); } else { - execa.sync('npm', [ - 'install', - ...Object.entries(deps).map(([k, v]) => `${k}@^${v}`), - ]); + execa.sync('npm', ['install', ...flat.map((dep) => dep)]); } loader.succeed(); } From 4d6f8fc44668d32878be9bbcbd3045dc6da0d4d5 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:52 +0200 Subject: [PATCH 07/23] run transitive deps installation when using npm --- packages/cli/package.json | 2 + packages/cli/src/index.ts | 25 +- packages/cli/src/tools/generateFileHash.ts | 14 + .../cli/src/tools/resolveTransitiveDeps.ts | 177 +++++++--- yarn.lock | 324 +++++++++--------- 5 files changed, 321 insertions(+), 221 deletions(-) create mode 100644 packages/cli/src/tools/generateFileHash.ts diff --git a/packages/cli/package.json b/packages/cli/package.json index b3d934ff5..5e337a201 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -39,6 +39,7 @@ "find-up": "^4.1.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", + "npm-registry-fetch": "16.0.0", "prompts": "^2.4.2", "semver": "^7.5.2" }, @@ -46,6 +47,7 @@ "@types/fs-extra": "^8.1.0", "@types/graceful-fs": "^4.1.3", "@types/hapi__joi": "^17.1.6", + "@types/npm-registry-fetch": "8.0.4", "@types/prompts": "^2.4.4", "@types/semver": "^6.0.2", "deepmerge": "^4.3.0", diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 71a74513f..44e4b9933 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -10,7 +10,11 @@ import childProcess from 'child_process'; import {Command as CommanderCommand} from 'commander'; import path from 'path'; import {detachedCommands, projectCommands} from './commands'; -import installTransitiveDeps from './tools/resolveTransitiveDeps'; +import installTransitiveDeps, { + resolvePodsInstallation, +} from './tools/resolveTransitiveDeps'; +import {isProjectUsingYarn} from './tools/yarn'; +import generateFileHash from './tools/generateFileHash'; const pkgJson = require('../package.json'); @@ -42,7 +46,6 @@ const handleError = (err: Error) => { } process.exit(1); }; - function printExamples(examples: Command['examples']) { let output: string[] = []; @@ -172,11 +175,23 @@ async function setupAndRun() { ); } } - - // are peer dependencies installed? - await installTransitiveDeps(); + // for now, run only if project is using npm + if ( + process.argv.includes('--dependency-check') && + !isProjectUsingYarn(process.cwd()) + ) { + const packageJsonPath = path.join(process.cwd(), 'package.json'); + const preInstallHash = generateFileHash(packageJsonPath); + const areTransitiveDepsInstalled = await installTransitiveDeps(); + const postInstallHash = generateFileHash(packageJsonPath); + + if (areTransitiveDepsInstalled && preInstallHash !== postInstallHash) { + await resolvePodsInstallation(); + } + } let config: Config | undefined; + try { config = loadConfig(); diff --git a/packages/cli/src/tools/generateFileHash.ts b/packages/cli/src/tools/generateFileHash.ts new file mode 100644 index 000000000..41d828a22 --- /dev/null +++ b/packages/cli/src/tools/generateFileHash.ts @@ -0,0 +1,14 @@ +import fs from 'fs-extra'; +import {createHash} from 'crypto'; +import {CLIError} from '@react-native-community/cli-tools'; + +export default function generateFileHash(filePath: string) { + try { + const file = fs.readFileSync(filePath, {encoding: 'utf8'}); + const hash = createHash('md5').update(file).digest('hex'); + + return hash; + } catch { + throw new CLIError('Failed to generate file hash.'); + } +} diff --git a/packages/cli/src/tools/resolveTransitiveDeps.ts b/packages/cli/src/tools/resolveTransitiveDeps.ts index f10865636..8eb2d3935 100644 --- a/packages/cli/src/tools/resolveTransitiveDeps.ts +++ b/packages/cli/src/tools/resolveTransitiveDeps.ts @@ -1,17 +1,36 @@ import path from 'path'; import fs from 'fs-extra'; import {getLoader, logger} from '@react-native-community/cli-tools'; +import * as fetch from 'npm-registry-fetch'; import chalk from 'chalk'; import {prompt} from 'prompts'; import execa from 'execa'; +import semver from 'semver'; +import {isProjectUsingYarn} from './yarn'; +import {installPods} from '@react-native-community/cli-doctor'; interface DependencyInfo { path: string; peerDependencies: {[key: string]: string}; } -function isUsingYarn(root: string) { - return fs.existsSync(path.join(root, 'yarn.lock')); +async function fetchAvailableVersions(packageName: string): Promise { + const response = await fetch.json(`/${packageName}`); + + return Object.keys(response.versions || {}); +} + +async function calculateWorkingVersion( + ranges: string[], + availableVersions: string[], +): Promise { + const sortedVersions = availableVersions + .filter((version) => + ranges.every((range) => semver.satisfies(version, range)), + ) + .sort(semver.rcompare); + + return sortedVersions.length > 0 ? sortedVersions[0] : null; } function getPeerDependencies( @@ -61,21 +80,19 @@ function getPeerDependencies( function excludeInstalledPeerDependencies( root: string, peerDependencies: Map, - yarn = true, + packageJson: any, ) { - const packageJson = require(path.join(root, 'package.json')); const missingPeerDependencies: Record> = {}; peerDependencies.forEach((value, key) => { const missingDeps = Object.entries(value.peerDependencies).reduce( (missingDepsList, [name, version]) => { const rootPath = path.join(root, 'node_modules', name); if ( - (yarn && !fs.existsSync(rootPath)) || - (!yarn && - (fs.existsSync(path.join(rootPath, 'ios')) || - fs.existsSync(path.join(rootPath, 'android'))) && - !Object.keys(packageJson.dependencies).includes(name)) + (fs.existsSync(path.join(rootPath, 'ios')) || + fs.existsSync(path.join(rootPath, 'android'))) && + !Object.keys(packageJson.dependencies).includes(name) ) { + //@ts-ignore missingDepsList[name] = version; } return missingDepsList; @@ -93,56 +110,110 @@ function excludeInstalledPeerDependencies( export default async function installTransitiveDeps() { const root = process.cwd(); - const packageJsonPath = path.join(root, 'package.json'); - const packageJson = require(packageJsonPath); - const isYarn = isUsingYarn(root); - const peerDependencies = getPeerDependencies(root, packageJson); - const depsToInstall = excludeInstalledPeerDependencies( - root, - peerDependencies, - isYarn, - ); - - const dependenciesWithMissingDeps = Object.keys(depsToInstall); - if (dependenciesWithMissingDeps.length > 0) { - logger.warn( - 'Looks like you are missing some of the peer dependencies of your libraries:\n', + const isYarn = !!isProjectUsingYarn(root); + + let newDependenciesFound = true; + + while (newDependenciesFound) { + const packageJsonPath = path.join(root, 'package.json'); + const packageJson = JSON.parse( + fs.readFileSync(packageJsonPath, {encoding: 'utf8'}), ); - logger.log( - dependenciesWithMissingDeps - .map( - (dep) => - `\t${chalk.bold(dep)}:\n ${Object.keys(depsToInstall[dep]).map( - (d) => `\t- ${d}\n`, - )}`, - ) - .join('\n') - .replace(/,/g, ''), + const peerDependencies = getPeerDependencies(root, packageJson); + const depsToInstall = excludeInstalledPeerDependencies( + root, + peerDependencies, + packageJson, ); - const {install} = await prompt({ - type: 'confirm', - name: 'install', - message: - 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', - }); - const loader = getLoader({text: 'Installing peer dependencies...'}); - - if (install) { - let deps = new Set(); - dependenciesWithMissingDeps.map((dep) => { - const missingDeps = depsToInstall[dep]; - deps.add(Object.keys(missingDeps)); + const dependenciesWithMissingDeps = Object.keys(depsToInstall); + + if (dependenciesWithMissingDeps.length > 0) { + logger.warn( + 'Looks like you are missing some of the peer dependencies of your libraries:\n', + ); + logger.log( + dependenciesWithMissingDeps + .map( + (dep) => + `\t${chalk.bold(dep)}:\n ${Object.keys(depsToInstall[dep]).map( + (d) => `\t- ${d}\n`, + )}`, + ) + .join('\n') + .replace(/,/g, ''), + ); + + const packageToRanges: {[pkg: string]: string[]} = {}; + + for (const dependency in depsToInstall) { + const packages = depsToInstall[dependency]; + + for (const packageName in packages) { + if (!packageToRanges[packageName]) { + packageToRanges[packageName] = []; + } + packageToRanges[packageName].push(packages[packageName]); + } + } + + const workingVersions: {[pkg: string]: string | null} = {}; + + for (const packageName in packageToRanges) { + const ranges = packageToRanges[packageName]; + const availableVersions = await fetchAvailableVersions(packageName); + const workingVersion = await calculateWorkingVersion( + ranges, + availableVersions, + ); + workingVersions[packageName] = workingVersion; + } + + const {install} = await prompt({ + type: 'confirm', + name: 'install', + message: + 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', }); - const arr = Array.from(deps) as string[]; - const flat = [].concat(...arr); - loader.start(); + const loader = getLoader({text: 'Installing peer dependencies...'}); + + if (install) { + const arr = Object.entries(workingVersions).map( + ([name, version]) => `${name}@^${version}`, + ); + //@ts-ignore + const flat = [].concat(...arr); + + loader.start(); - if (isYarn) { - execa.sync('yarn', ['add', ...flat.map((dep) => dep)]); + if (isYarn) { + execa.sync('yarn', ['add', ...flat.map((dep) => dep)]); + } else { + execa.sync('npm', ['install', ...flat.map((dep) => dep)]); + } + loader.succeed(); } else { - execa.sync('npm', ['install', ...flat.map((dep) => dep)]); + newDependenciesFound = false; } - loader.succeed(); + } else { + newDependenciesFound = false; } } + + return !newDependenciesFound; +} + +export async function resolvePodsInstallation() { + const {install} = await prompt({ + type: 'confirm', + name: 'install', + message: + 'Do you want to install pods? This will make sure your transitive dependencies are linked properly.', + }); + + if (install && process.platform === 'darwin') { + const loader = getLoader({text: 'Installing pods...'}); + loader.start(); + await installPods(loader); + loader.succeed(); + } } diff --git a/yarn.lock b/yarn.lock index c2e043e05..69528d746 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1239,16 +1239,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^25.2.3": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.2.3.tgz#38ac19b916ff61457173799239472659e1a67c39" - integrity sha512-k+37B1aSvOt9tKHWbZZSOy1jdgzesB0bj96igCVUG1nAH1W5EoUfgc5EXbBVU08KSLvkVdWopLXaO3xfVGlxtQ== - dependencies: - "@jest/source-map" "^25.2.1" - chalk "^3.0.0" - jest-util "^25.2.3" - slash "^3.0.0" - "@jest/console@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" @@ -1365,15 +1355,6 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^25.2.1": - version "25.2.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.2.1.tgz#b62ecf8ae76170b08eff8859b56eb7576df34ab8" - integrity sha512-PgScGJm1U27+9Te/cxP4oUFqJ2PX6NhBL2a6unQ7yafCgs8k02c0LSyjSIx/ao0AwcAdCczfAPDf5lJ7zoB/7A== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.3" - source-map "^0.6.0" - "@jest/source-map@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" @@ -1383,17 +1364,6 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^25.2.4": - version "25.2.4" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.2.4.tgz#8fc9eac58e82eb2a82e4058e68c3814f98f59cf5" - integrity sha512-AI7eUy+q2lVhFnaibDFg68NGkrxVWZdD6KBr9Hm6EvN0oAe7GxpEwEavgPfNHQjU2mi6g+NsFn/6QPgTUwM1qg== - dependencies: - "@jest/console" "^25.2.3" - "@jest/transform" "^25.2.4" - "@jest/types" "^25.2.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-result@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" @@ -1415,28 +1385,6 @@ jest-runner "^26.6.2" jest-runtime "^26.6.2" -"@jest/transform@^25.2.4": - version "25.2.4" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.2.4.tgz#34336f37f13f62f7d1f5b93d5d150ba9eb3e11b9" - integrity sha512-6eRigvb+G6bs4kW5j1/y8wu4nCrmVuIe0epPBbiWaYlwawJ8yi1EIyK3d/btDqmBpN5GpN4YhR6iPPnDmkYdTA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.2.3" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.3" - jest-haste-map "^25.2.3" - jest-regex-util "^25.2.1" - jest-util "^25.2.3" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/transform@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" @@ -1458,10 +1406,10 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.2.3": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.2.3.tgz#035c4fb94e2da472f359ff9a211915d59987f6b6" - integrity sha512-6oLQwO9mKif3Uph3RX5J1i3S7X7xtDHWBaaaoeKw8hOzV6YUd0qDcYcHZ6QXMHDIzSr7zzrEa51o2Ovlj6AtKQ== +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^1.1.1" @@ -2178,9 +2126,9 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" @@ -2230,6 +2178,14 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= +"@types/node-fetch@*": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" + integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node-fetch@^2.3.7", "@types/node-fetch@^2.5.5": version "2.5.5" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.5.tgz#cd264e20a81f4600a6c52864d38e7fef72485e92" @@ -2315,6 +2271,13 @@ resolved "https://registry.yarnpkg.com/@types/shell-quote/-/shell-quote-1.7.1.tgz#2d059091214a02c29f003f591032172b2aff77e8" integrity sha512-SWZ2Nom1pkyXCDohRSrkSKvDh8QOG9RfAsrt5/NsPQC4UQJ55eG0qClA40I+Gkez4KTQ0uDUT8ELRXThf3J5jw== +"@types/ssri@*": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/ssri/-/ssri-7.1.1.tgz#2a2c94abf0d3a8c3b07bb4ff08142dd571407bb5" + integrity sha512-DPP/jkDaqGiyU75MyMURxLWyYLwKSjnAuGe9ZCsLp9QZOpXmDfuevk769F0BS86TmRuD5krnp06qw9nSoNO+0g== + dependencies: + "@types/node" "*" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -3295,6 +3258,24 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" +cacache@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.0.tgz#17a9ecd6e1be2564ebe6cdca5f7cfed2bfeb6ddc" + integrity sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -5117,17 +5098,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^25.2.4: - version "25.2.4" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.2.4.tgz#b66e0777c861034ebc21730bb34e1839d5d46806" - integrity sha512-hfuPhPds4yOsZtIw4kwAg70r0hqGmpqekgA+VX7pf/3wZ6FY+xIOXZhNsPMMMsspYG/YIsbAiwqsdnD4Ht+bCA== +expect@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" + integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== dependencies: - "@jest/types" "^25.2.3" + "@jest/types" "^25.5.0" ansi-styles "^4.0.0" - jest-get-type "^25.2.1" - jest-matcher-utils "^25.2.3" - jest-message-util "^25.2.4" - jest-regex-util "^25.2.1" + jest-get-type "^25.2.6" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-regex-util "^25.2.6" expect@^26.6.2: version "26.6.2" @@ -6935,9 +6916,9 @@ jest-diff@^25.1.0, jest-diff@^25.2.3: integrity sha512-VtZ6LAQtaQpFsmEzps15dQc5ELbJxy4L2DOSo2Ev411TUEtnJPkAMD7JneVypeMJQ1y3hgxN9Ao13n15FAnavg== dependencies: chalk "^3.0.0" - diff-sequences "^25.2.1" - jest-get-type "^25.2.1" - pretty-format "^25.2.3" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" @@ -6992,10 +6973,10 @@ jest-environment-node@^26.6.2: jest-mock "^26.6.2" jest-util "^26.6.2" -jest-get-type@^25.2.1: - version "25.2.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.1.tgz#6c83de603c41b1627e6964da2f5454e6aa3c13a6" - integrity sha512-EYjTiqcDTCRJDcSNKbLTwn/LcDPEE7ITk8yRMNAOjEsN6yp+Uu+V1gx4djwnuj/DvWg0YGmqaBqPVGsPxlvE7w== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== jest-get-type@^26.3.0: version "26.3.0" @@ -7007,25 +6988,6 @@ jest-get-type@^29.4.3: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== -jest-haste-map@^25.2.3: - version "25.2.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.2.3.tgz#2649392b5af191f0167a27bfb62e5d96d7eaaade" - integrity sha512-pAP22OHtPr4qgZlJJFks2LLgoQUr4XtM1a+F5UaPIZNiCRnePA0hM3L7aiJ0gzwiNIYwMTfKRwG/S1L28J3A3A== - dependencies: - "@jest/types" "^25.2.3" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.3" - jest-serializer "^25.2.1" - jest-util "^25.2.3" - jest-worker "^25.2.1" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" @@ -7079,15 +7041,15 @@ jest-leak-detector@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-matcher-utils@^25.2.3: - version "25.2.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.2.3.tgz#59285bd6d6c810debc9caa585ed985e46a3f28fd" - integrity sha512-ZmiXiwQRVM9MoKjGMP5YsGGk2Th5ncyRxfXKz5AKsmU8m43kgNZirckVzaP61MlSa9LKmXbevdYqVp1ZKAw2Rw== +jest-matcher-utils@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" + integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== dependencies: chalk "^3.0.0" - jest-diff "^25.2.3" - jest-get-type "^25.2.1" - pretty-format "^25.2.3" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" jest-matcher-utils@^26.6.2: version "26.6.2" @@ -7099,16 +7061,16 @@ jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-message-util@^25.2.4: - version "25.2.4" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.2.4.tgz#b1441b9c82f5c11fc661303cbf200a2f136a7762" - integrity sha512-9wWMH3Bf+GVTv0GcQLmH/FRr0x0toptKw9TA8U5YFLVXx7Tq9pvcNzTyJrcTJ+wLqNbMPPJlJNft4MnlcrtF5Q== +jest-message-util@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" + integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^25.2.4" - "@jest/types" "^25.2.3" + "@jest/types" "^25.5.0" "@types/stack-utils" "^1.0.1" chalk "^3.0.0" + graceful-fs "^4.2.4" micromatch "^4.0.2" slash "^3.0.0" stack-utils "^1.0.1" @@ -7136,15 +7098,20 @@ jest-mock@^26.6.2: "@jest/types" "^26.6.2" "@types/node" "*" -jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2: +jest-pnp-resolver@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^25.2.1: - version "25.2.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.1.tgz#db64b0d15cd3642c93b7b9627801d7c518600584" - integrity sha512-wroFVJw62LdqTdkL508ZLV82FrJJWVJMIuYG7q4Uunl1WAPTf4ftPKrqqfec4SvOIlvRZUdEX2TFpWR356YG/w== +jest-regex-util@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" + integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== jest-regex-util@^26.0.0: version "26.0.0" @@ -7160,17 +7127,20 @@ jest-resolve-dependencies@^26.6.2: jest-regex-util "^26.0.0" jest-snapshot "^26.6.2" -jest-resolve@^25.2.3: - version "25.2.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.2.3.tgz#ababeaf2bb948cb6d2dea8453759116da0fb7842" - integrity sha512-1vZMsvM/DBH258PnpUNSXIgtzpYz+vCVCj9+fcy4akZl4oKbD+9hZSlfe9RIDpU0Fc28ozHQrmwX3EqFRRIHGg== +jest-resolve@^25.5.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" + integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== dependencies: - "@jest/types" "^25.2.3" + "@jest/types" "^25.5.0" browser-resolve "^1.11.3" chalk "^3.0.0" + graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.1" + read-pkg-up "^7.0.1" realpath-native "^2.0.0" - resolve "^1.15.1" + resolve "^1.17.0" + slash "^3.0.0" jest-resolve@^26.6.2: version "26.6.2" @@ -7245,11 +7215,6 @@ jest-runtime@^26.6.2: strip-bom "^4.0.0" yargs "^15.4.1" -jest-serializer@^25.2.1: - version "25.2.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.2.1.tgz#51727a5fc04256f461abe0fa024a022ba165877a" - integrity sha512-fibDi7M5ffx6c/P66IkvR4FKkjG5ldePAK1WlbNoaU4GZmIAkS9Le/frAwRUFEX0KdnisSPWf+b1RC5jU7EYJQ== - jest-serializer@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" @@ -7264,23 +7229,24 @@ jest-snapshot-serializer-raw@^1.1.0: integrity sha512-OL3bXRCnSn7Kur3YTGYj+A3Hwh2eyb5QL5VLQ9OSsPBOva7r3sCB0Jf1rOT/KN3ypzH42hrkDz96lpbiMo+AlQ== jest-snapshot@^25.1.0: - version "25.2.4" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.2.4.tgz#08d4517579c864df4280bcc948ceea34327a4ded" - integrity sha512-nIwpW7FZCq5p0AE3Oyqyb6jL0ENJixXzJ5/CD/XRuOqp3gS5OM3O/k+NnTrniCXxPFV4ry6s9HNfiPQBi0wcoA== + version "25.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" + integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^25.2.3" + "@jest/types" "^25.5.0" "@types/prettier" "^1.19.0" chalk "^3.0.0" - expect "^25.2.4" - jest-diff "^25.2.3" - jest-get-type "^25.2.1" - jest-matcher-utils "^25.2.3" - jest-message-util "^25.2.4" - jest-resolve "^25.2.3" + expect "^25.5.0" + graceful-fs "^4.2.4" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-resolve "^25.5.1" make-dir "^3.0.0" natural-compare "^1.4.0" - pretty-format "^25.2.3" + pretty-format "^25.5.0" semver "^6.3.0" jest-snapshot@^26.6.2: @@ -7305,16 +7271,6 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^25.2.3: - version "25.2.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.2.3.tgz#0abf95a1d6b96f2de5a3ecd61b36c40a182dc256" - integrity sha512-7tWiMICVSo9lNoObFtqLt9Ezt5exdFlWs5fLe1G4XLY2lEbZc814cw9t4YHScqBkWMfzth8ASHKlYBxiX2rdCw== - dependencies: - "@jest/types" "^25.2.3" - chalk "^3.0.0" - is-ci "^2.0.0" - make-dir "^3.0.0" - jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" @@ -7352,14 +7308,6 @@ jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" -jest-worker@^25.2.1: - version "25.2.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a" - integrity sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -8259,6 +8207,17 @@ minipass-fetch@^3.0.0: optionalDependencies: encoding "^0.1.13" +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -9848,12 +9807,12 @@ prettier@^2.0.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== -pretty-format@^25.1.0, pretty-format@^25.2.3: - version "25.2.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.2.3.tgz#ba6e9603a0d80fa2e470b1fed55de1f9bfd81421" - integrity sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w== +pretty-format@^25.1.0, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== dependencies: - "@jest/types" "^25.2.3" + "@jest/types" "^25.5.0" ansi-regex "^5.0.0" ansi-styles "^4.0.0" react-is "^16.12.0" @@ -10066,7 +10025,12 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-is@^16.12.0, react-is@^16.8.1: +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== @@ -10454,9 +10418,9 @@ resolve-url@^0.2.1: resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== -resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.4.0: +resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.4.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -10819,6 +10783,11 @@ sigstore@^1.3.0, sigstore@^1.4.0: "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -10876,6 +10845,11 @@ smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -10933,6 +10907,14 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" +socks@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -11066,9 +11048,11 @@ stable@^0.1.8: integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== + dependencies: + escape-string-regexp "^2.0.0" stack-utils@^2.0.2: version "2.0.2" @@ -11889,6 +11873,13 @@ unique-slug@^4.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + universal-user-agent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" @@ -12063,6 +12054,13 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" From f46240e91ae7f25d170bcf06a26625d05ea51e13 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:52 +0200 Subject: [PATCH 08/23] make transitive native libs visible for autolinking with npm --- packages/cli-tools/package.json | 1 + .../src}/generateFileHash.ts | 2 +- packages/cli-tools/src/index.ts | 1 + .../cli-tools/src/resolveTransitiveDeps.ts | 314 ++++++++++++++++++ packages/cli/src/index.ts | 27 +- .../cli/src/tools/resolveTransitiveDeps.ts | 219 ------------ 6 files changed, 325 insertions(+), 239 deletions(-) rename packages/{cli/src/tools => cli-tools/src}/generateFileHash.ts (85%) create mode 100644 packages/cli-tools/src/resolveTransitiveDeps.ts delete mode 100644 packages/cli/src/tools/resolveTransitiveDeps.ts diff --git a/packages/cli-tools/package.json b/packages/cli-tools/package.json index 17fc0ca3b..3e8e47937 100644 --- a/packages/cli-tools/package.json +++ b/packages/cli-tools/package.json @@ -7,6 +7,7 @@ "access": "public" }, "dependencies": { + "@react-native-community/cli-doctor": "12.0.0-alpha.7", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", diff --git a/packages/cli/src/tools/generateFileHash.ts b/packages/cli-tools/src/generateFileHash.ts similarity index 85% rename from packages/cli/src/tools/generateFileHash.ts rename to packages/cli-tools/src/generateFileHash.ts index 41d828a22..3cf26760c 100644 --- a/packages/cli/src/tools/generateFileHash.ts +++ b/packages/cli-tools/src/generateFileHash.ts @@ -1,6 +1,6 @@ import fs from 'fs-extra'; import {createHash} from 'crypto'; -import {CLIError} from '@react-native-community/cli-tools'; +import {CLIError} from './errors'; export default function generateFileHash(filePath: string) { try { diff --git a/packages/cli-tools/src/index.ts b/packages/cli-tools/src/index.ts index d0e1b92ba..f77d48f1e 100644 --- a/packages/cli-tools/src/index.ts +++ b/packages/cli-tools/src/index.ts @@ -17,5 +17,6 @@ export {default as handlePortUnavailable} from './handlePortUnavailable'; export * from './port'; export {default as cacheManager} from './cacheManager'; export {default as runSudo} from './runSudo'; +export * as transitiveDeps from './resolveTransitiveDeps'; export * from './errors'; diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts new file mode 100644 index 000000000..b50776ef1 --- /dev/null +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -0,0 +1,314 @@ +import {installPods} from '@react-native-community/cli-doctor'; +import fs from 'fs-extra'; +import path from 'path'; +import * as fetch from 'npm-registry-fetch'; +import chalk from 'chalk'; +import {prompt} from 'prompts'; +import execa from 'execa'; +import semver from 'semver'; +import generateFileHash from './generateFileHash'; +import {getLoader} from './loader'; +import logger from './logger'; + +interface DependencyData { + path: string; + version: string; + peerDependencies: {[key: string]: string}; + duplicates?: DependencyData[]; +} + +export function isUsingYarn(root: string) { + return fs.existsSync(path.join(root, 'yarn.lock')); +} + +async function fetchAvailableVersions(packageName: string): Promise { + const response = await fetch.json(`/${packageName}`); + + return Object.keys(response.versions || {}); +} + +async function calculateWorkingVersion( + ranges: string[], + availableVersions: string[], +): Promise { + const sortedVersions = availableVersions + .filter((version) => + ranges.every((range) => semver.satisfies(version, range)), + ) + .sort(semver.rcompare); + + return sortedVersions.length > 0 ? sortedVersions[0] : null; +} + +function findDependencyPath( + dependencyName: string, + rootPath: string, + parentPath: string, +) { + let dependencyPath; + const topLevelPath = path.join(rootPath, 'node_modules', dependencyName); + const nestedPath = path.join(parentPath, 'node_modules', dependencyName); + + if (fs.existsSync(topLevelPath)) { + dependencyPath = topLevelPath; + } else if (fs.existsSync(nestedPath)) { + dependencyPath = nestedPath; + } + + return dependencyPath; +} + +export function collectDependencies(root: string): Map { + const dependencies = new Map(); + + const checkDependency = (dependencyPath: string) => { + const packageJsonPath = path.join(dependencyPath, 'package.json'); + const packageJson = require(packageJsonPath); + + if (dependencies.has(packageJson.name)) { + const dependency = dependencies.get(packageJson.name) as DependencyData; + + if ( + dependencyPath !== dependency.path && + dependency.duplicates?.every( + (duplicate) => duplicate.path !== dependencyPath, + ) + ) { + dependencies.set(packageJson.name, { + ...dependency, + duplicates: [ + ...dependency.duplicates, + { + path: dependencyPath, + version: packageJson.version, + peerDependencies: packageJson.peerDependencies, + }, + ], + }); + } + return; + } + + dependencies.set(packageJson.name, { + path: dependencyPath, + version: packageJson.version, + peerDependencies: packageJson.peerDependencies, + duplicates: [], + }); + + for (const dependency in { + ...packageJson.dependencies, + ...(root === dependencyPath ? packageJson.devDependencies : {}), + }) { + const depPath = findDependencyPath(dependency, root, dependencyPath); + + if (depPath) { + checkDependency(depPath); + } + } + }; + + checkDependency(root); + + return dependencies; +} + +function filterNativeDependencies( + root: string, + dependencies: Map, +) { + const depsWithNativePeers = new Map>(); + + dependencies.forEach((value, key) => { + if (value.peerDependencies) { + const nativeDependencies = new Map(); + + Object.entries(value.peerDependencies).forEach(([name, versions]) => { + const dependencyPath = findDependencyPath(name, root, value.path); + + if (dependencyPath) { + const iosPath = path.join(dependencyPath, 'ios'); + const androidPath = path.join(dependencyPath, 'android'); + + if (fs.existsSync(iosPath) || fs.existsSync(androidPath)) { + nativeDependencies.set(name, versions); + } + } + }); + + if (nativeDependencies.size > 0) { + depsWithNativePeers.set(key, nativeDependencies); + } + } + }); + + return depsWithNativePeers; +} + +function filterInstalledPeers( + root: string, + peers: Map>, +) { + const data: Record> = {}; + const packageJsonPath = path.join(root, 'package.json'); + const packageJson = require(packageJsonPath); + const dependencyList = { + ...packageJson.dependencies, + ...packageJson.devDependencies, + }; + peers.forEach((peerDependencies, dependency) => { + peerDependencies.forEach((version, name) => { + if (!Object.keys(dependencyList).includes(name)) { + data[dependency] = { + ...data[dependency], + [name]: version, + }; + } + }); + }); + + return data; +} + +export default async function findPeerDepsForAutolinking(root: string) { + const deps = collectDependencies(root); + const nonEmptyPeers = filterNativeDependencies(root, deps); + const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); + + return nonInstalledPeers; +} + +async function promptForMissingPeerDependencies( + dependencies: Record>, +): Promise { + logger.warn( + 'Looks like you are missing some of the peer dependencies of your libraries:\n', + ); + logger.log( + Object.entries(dependencies) + .map( + ([dependencyName, peerDependencies]) => + `\t${chalk.bold(dependencyName)}:\n ${Object.entries( + peerDependencies, + ).map( + ([peerDependency, peerDependencyVersion]) => + `\t- ${peerDependency} ${peerDependencyVersion}\n`, + )}`, + ) + .join('\n') + .replace(/,/g, ''), + ); + + const {install} = await prompt({ + type: 'confirm', + name: 'install', + message: + 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', + }); + + return install; +} + +async function getPackagesVersion( + missingDependencies: Record>, +) { + const packageToRanges: {[pkg: string]: string[]} = {}; + + for (const dependency in missingDependencies) { + const packages = missingDependencies[dependency]; + + for (const packageName in packages) { + if (!packageToRanges[packageName]) { + packageToRanges[packageName] = []; + } + packageToRanges[packageName].push(packages[packageName]); + } + } + + const workingVersions: {[pkg: string]: string | null} = {}; + + for (const packageName in packageToRanges) { + const ranges = packageToRanges[packageName]; + const availableVersions = await fetchAvailableVersions(packageName); + const workingVersion = await calculateWorkingVersion( + ranges, + availableVersions, + ); + workingVersions[packageName] = workingVersion; + } + + return workingVersions; +} + +function installMissingPackages(packages: Record) { + const packageVersions = Object.entries(packages).map( + ([name, version]) => `${name}@^${version}`, + ); + const flattenList = ([] as string[]).concat(...packageVersions); + + const loader = getLoader({text: 'Installing peer dependencies...'}); + loader.start(); + try { + execa.sync('npm', ['install', ...flattenList.map((dep) => dep)]); + loader.succeed(); + + return true; + } catch (error) { + loader.fail(); + + return false; + } +} + +export async function resolveTransitiveDeps() { + const root = process.cwd(); + + const missingPeerDependencies = await findPeerDepsForAutolinking(root); + + if (Object.keys(missingPeerDependencies).length > 0) { + const installDeps = await promptForMissingPeerDependencies( + missingPeerDependencies, + ); + + if (installDeps) { + const packagesVersions = await getPackagesVersion( + missingPeerDependencies, + ); + + return installMissingPackages(packagesVersions); + } + } + + return false; +} + +export async function resolvePodsInstallation() { + const {install} = await prompt({ + type: 'confirm', + name: 'install', + message: + 'Do you want to install pods? This will make sure your transitive dependencies are linked properly.', + }); + + if (install) { + const loader = getLoader({text: 'Installing pods...'}); + loader.start(); + await installPods(loader); + loader.succeed(); + } +} + +export async function checkTransitiveDeps() { + const packageJsonPath = path.join(process.cwd(), 'package.json'); + const preInstallHash = generateFileHash(packageJsonPath); + const areTransitiveDepsInstalled = await resolveTransitiveDeps(); + const postInstallHash = generateFileHash(packageJsonPath); + + if ( + process.platform === 'darwin' && + areTransitiveDepsInstalled && + preInstallHash !== postInstallHash + ) { + await resolvePodsInstallation(); + } +} diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 44e4b9933..9cbdba3f5 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,5 +1,9 @@ import loadConfig from '@react-native-community/cli-config'; -import {CLIError, logger} from '@react-native-community/cli-tools'; +import { + CLIError, + logger, + transitiveDeps, +} from '@react-native-community/cli-tools'; import type { Command, Config, @@ -10,11 +14,6 @@ import childProcess from 'child_process'; import {Command as CommanderCommand} from 'commander'; import path from 'path'; import {detachedCommands, projectCommands} from './commands'; -import installTransitiveDeps, { - resolvePodsInstallation, -} from './tools/resolveTransitiveDeps'; -import {isProjectUsingYarn} from './tools/yarn'; -import generateFileHash from './tools/generateFileHash'; const pkgJson = require('../package.json'); @@ -175,19 +174,9 @@ async function setupAndRun() { ); } } - // for now, run only if project is using npm - if ( - process.argv.includes('--dependency-check') && - !isProjectUsingYarn(process.cwd()) - ) { - const packageJsonPath = path.join(process.cwd(), 'package.json'); - const preInstallHash = generateFileHash(packageJsonPath); - const areTransitiveDepsInstalled = await installTransitiveDeps(); - const postInstallHash = generateFileHash(packageJsonPath); - - if (areTransitiveDepsInstalled && preInstallHash !== postInstallHash) { - await resolvePodsInstallation(); - } + + if (!transitiveDeps.isUsingYarn(process.cwd())) { + await transitiveDeps.checkTransitiveDeps(); } let config: Config | undefined; diff --git a/packages/cli/src/tools/resolveTransitiveDeps.ts b/packages/cli/src/tools/resolveTransitiveDeps.ts deleted file mode 100644 index 8eb2d3935..000000000 --- a/packages/cli/src/tools/resolveTransitiveDeps.ts +++ /dev/null @@ -1,219 +0,0 @@ -import path from 'path'; -import fs from 'fs-extra'; -import {getLoader, logger} from '@react-native-community/cli-tools'; -import * as fetch from 'npm-registry-fetch'; -import chalk from 'chalk'; -import {prompt} from 'prompts'; -import execa from 'execa'; -import semver from 'semver'; -import {isProjectUsingYarn} from './yarn'; -import {installPods} from '@react-native-community/cli-doctor'; - -interface DependencyInfo { - path: string; - peerDependencies: {[key: string]: string}; -} - -async function fetchAvailableVersions(packageName: string): Promise { - const response = await fetch.json(`/${packageName}`); - - return Object.keys(response.versions || {}); -} - -async function calculateWorkingVersion( - ranges: string[], - availableVersions: string[], -): Promise { - const sortedVersions = availableVersions - .filter((version) => - ranges.every((range) => semver.satisfies(version, range)), - ) - .sort(semver.rcompare); - - return sortedVersions.length > 0 ? sortedVersions[0] : null; -} - -function getPeerDependencies( - root: string, - packageJson: any, -): Map { - const dependenciesAndPeerDependencies = new Map(); - - for (const dependency in packageJson.dependencies) { - const dependencyPath = path.join(root, 'node_modules', dependency); - - if (fs.existsSync(dependencyPath)) { - const dependencyPackageJson = require(path.join( - dependencyPath, - 'package.json', - )); - const peerDependenciesMeta = dependencyPackageJson.peerDependenciesMeta; - - let optionalDeps: string[] = []; - if (peerDependenciesMeta) { - const peers = Object.keys(peerDependenciesMeta); - optionalDeps = peers.filter( - (p) => peerDependenciesMeta[p].optional === true, - ); - } - - if ( - dependencyPackageJson.peerDependencies && - !dependenciesAndPeerDependencies.has(dependency) - ) { - dependenciesAndPeerDependencies.set(dependency, { - path: dependencyPath, - peerDependencies: Object.keys(dependencyPackageJson.peerDependencies) - .filter((key) => !optionalDeps.includes(key)) - .reduce>((result, key) => { - result[key] = dependencyPackageJson.peerDependencies[key]; - return result; - }, {}), - }); - } - } - } - - return dependenciesAndPeerDependencies; -} - -function excludeInstalledPeerDependencies( - root: string, - peerDependencies: Map, - packageJson: any, -) { - const missingPeerDependencies: Record> = {}; - peerDependencies.forEach((value, key) => { - const missingDeps = Object.entries(value.peerDependencies).reduce( - (missingDepsList, [name, version]) => { - const rootPath = path.join(root, 'node_modules', name); - if ( - (fs.existsSync(path.join(rootPath, 'ios')) || - fs.existsSync(path.join(rootPath, 'android'))) && - !Object.keys(packageJson.dependencies).includes(name) - ) { - //@ts-ignore - missingDepsList[name] = version; - } - return missingDepsList; - }, - {}, - ); - - if (Object.keys(missingDeps).length > 0) { - missingPeerDependencies[key] = missingDeps; - } - }); - - return missingPeerDependencies; -} - -export default async function installTransitiveDeps() { - const root = process.cwd(); - const isYarn = !!isProjectUsingYarn(root); - - let newDependenciesFound = true; - - while (newDependenciesFound) { - const packageJsonPath = path.join(root, 'package.json'); - const packageJson = JSON.parse( - fs.readFileSync(packageJsonPath, {encoding: 'utf8'}), - ); - const peerDependencies = getPeerDependencies(root, packageJson); - const depsToInstall = excludeInstalledPeerDependencies( - root, - peerDependencies, - packageJson, - ); - const dependenciesWithMissingDeps = Object.keys(depsToInstall); - - if (dependenciesWithMissingDeps.length > 0) { - logger.warn( - 'Looks like you are missing some of the peer dependencies of your libraries:\n', - ); - logger.log( - dependenciesWithMissingDeps - .map( - (dep) => - `\t${chalk.bold(dep)}:\n ${Object.keys(depsToInstall[dep]).map( - (d) => `\t- ${d}\n`, - )}`, - ) - .join('\n') - .replace(/,/g, ''), - ); - - const packageToRanges: {[pkg: string]: string[]} = {}; - - for (const dependency in depsToInstall) { - const packages = depsToInstall[dependency]; - - for (const packageName in packages) { - if (!packageToRanges[packageName]) { - packageToRanges[packageName] = []; - } - packageToRanges[packageName].push(packages[packageName]); - } - } - - const workingVersions: {[pkg: string]: string | null} = {}; - - for (const packageName in packageToRanges) { - const ranges = packageToRanges[packageName]; - const availableVersions = await fetchAvailableVersions(packageName); - const workingVersion = await calculateWorkingVersion( - ranges, - availableVersions, - ); - workingVersions[packageName] = workingVersion; - } - - const {install} = await prompt({ - type: 'confirm', - name: 'install', - message: - 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', - }); - const loader = getLoader({text: 'Installing peer dependencies...'}); - - if (install) { - const arr = Object.entries(workingVersions).map( - ([name, version]) => `${name}@^${version}`, - ); - //@ts-ignore - const flat = [].concat(...arr); - - loader.start(); - - if (isYarn) { - execa.sync('yarn', ['add', ...flat.map((dep) => dep)]); - } else { - execa.sync('npm', ['install', ...flat.map((dep) => dep)]); - } - loader.succeed(); - } else { - newDependenciesFound = false; - } - } else { - newDependenciesFound = false; - } - } - - return !newDependenciesFound; -} - -export async function resolvePodsInstallation() { - const {install} = await prompt({ - type: 'confirm', - name: 'install', - message: - 'Do you want to install pods? This will make sure your transitive dependencies are linked properly.', - }); - - if (install && process.platform === 'darwin') { - const loader = getLoader({text: 'Installing pods...'}); - loader.start(); - await installPods(loader); - loader.succeed(); - } -} From 3007302e9b38dc9ae67a0e5653697dbae26036b4 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:53 +0200 Subject: [PATCH 09/23] checking peer dependencies with yarn --- .../cli-tools/src/resolveTransitiveDeps.ts | 91 +- packages/cli/src/index.ts | 4 +- yarn.lock | 1349 ++++++++++++++++- 3 files changed, 1379 insertions(+), 65 deletions(-) diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index b50776ef1..bd008bb07 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -21,6 +21,10 @@ export function isUsingYarn(root: string) { return fs.existsSync(path.join(root, 'yarn.lock')); } +function writeFile(filePath: string, content: string) { + fs.writeFileSync(filePath, content, {encoding: 'utf8'}); +} + async function fetchAvailableVersions(packageName: string): Promise { const response = await fetch.json(`/${packageName}`); @@ -170,6 +174,74 @@ function filterInstalledPeers( return data; } +function findPeerDepsToInstall( + root: string, + dependencies: Map, +) { + const rootPackageJson = require(path.join(root, 'package.json')); + const dependencyList = { + ...rootPackageJson.dependencies, + ...rootPackageJson.devDependencies, + }; + const peerDependencies = new Set(); + dependencies.forEach((value) => { + if (value.peerDependencies) { + Object.keys(value.peerDependencies).forEach((name) => { + if (!Object.keys(dependencyList).includes(name)) { + peerDependencies.add(name); + } + }); + } + }); + + return peerDependencies; +} +async function getMissingPeerDepsForYarn(root: string) { + const dependencies = collectDependencies(root); + const depsToInstall = findPeerDepsToInstall(root, dependencies); + + return depsToInstall; +} + +// install peer deps with yarn without making any changes to package.json and yarn.lock +async function yarnSilentInstallPeerDeps(root: string) { + const dependenciesToInstall = await getMissingPeerDepsForYarn(root); + const packageJsonPath = path.join(root, 'package.json'); + const lockfilePath = path.join(root, 'yarn.lock'); + + if (dependenciesToInstall.size > 0) { + const binPackageJson = fs.readFileSync(packageJsonPath, { + encoding: 'utf8', + }); + const binLockfile = fs.readFileSync(lockfilePath, { + encoding: 'utf8', + }); + + if (!binPackageJson) { + logger.error('package.json is missing'); + return; + } + + if (!binLockfile) { + logger.error('yarn.lock is missing'); + return; + } + const loader = getLoader({text: 'Verifying dependencies...'}); + + loader.start(); + try { + execa.sync('yarn', ['add', ...dependenciesToInstall]); + loader.succeed(); + } catch { + loader.fail('Failed to verify peer dependencies'); + return; + } + + writeFile(packageJsonPath, binPackageJson); + writeFile(lockfilePath, binLockfile); + } +} + export default async function findPeerDepsForAutolinking(root: string) { const deps = collectDependencies(root); const nonEmptyPeers = filterNativeDependencies(root, deps); @@ -240,7 +312,10 @@ async function getPackagesVersion( return workingVersions; } -function installMissingPackages(packages: Record) { +function installMissingPackages( + packages: Record, + yarn = true, +) { const packageVersions = Object.entries(packages).map( ([name, version]) => `${name}@^${version}`, ); @@ -249,7 +324,12 @@ function installMissingPackages(packages: Record) { const loader = getLoader({text: 'Installing peer dependencies...'}); loader.start(); try { - execa.sync('npm', ['install', ...flattenList.map((dep) => dep)]); + const deps = flattenList.map((dep) => dep); + if (yarn) { + execa.sync('yarn', ['add', ...deps]); + } else { + execa.sync('npm', ['install', ...deps]); + } loader.succeed(); return true; @@ -262,6 +342,11 @@ function installMissingPackages(packages: Record) { export async function resolveTransitiveDeps() { const root = process.cwd(); + const isYarn = isUsingYarn(root); + + if (isYarn) { + await yarnSilentInstallPeerDeps(root); + } const missingPeerDependencies = await findPeerDepsForAutolinking(root); @@ -275,7 +360,7 @@ export async function resolveTransitiveDeps() { missingPeerDependencies, ); - return installMissingPackages(packagesVersions); + return installMissingPackages(packagesVersions, isYarn); } } diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 9cbdba3f5..dd0c4d336 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -175,9 +175,7 @@ async function setupAndRun() { } } - if (!transitiveDeps.isUsingYarn(process.cwd())) { - await transitiveDeps.checkTransitiveDeps(); - } + await transitiveDeps.checkTransitiveDeps(); let config: Config | undefined; diff --git a/yarn.lock b/yarn.lock index 69528d746..6bc916b5a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,6 +33,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544" integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + "@babel/compat-data@^7.9.0": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" @@ -119,6 +124,28 @@ browserslist "^4.21.3" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" + integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-compilation-targets@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52" + integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-validator-option" "^7.22.5" + "@nicolo-ribaudo/semver-v6" "^6.3.3" + browserslist "^4.21.9" + lru-cache "^5.1.1" + "@babel/helper-compilation-targets@^7.8.7": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" @@ -129,6 +156,21 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" + integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.8.3": version "7.20.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" @@ -142,6 +184,15 @@ "@babel/helper-replace-supers" "^7.19.1" "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.8.3": version "7.20.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" @@ -167,6 +218,17 @@ "@babel/helper-function-name" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + "@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" @@ -259,6 +321,31 @@ "@babel/traverse" "^7.20.1" "@babel/types" "^7.20.2" +"@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-optimise-call-expression@^7.18.6", "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -278,7 +365,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== @@ -305,6 +392,15 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" + "@babel/helper-remap-async-to-generator@^7.8.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" @@ -326,6 +422,15 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" @@ -351,6 +456,13 @@ dependencies: "@babel/types" "^7.20.2" +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-split-export-declaration@^7.14.5", "@babel/helper-split-export-declaration@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -410,6 +522,15 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-wrap-function@^7.22.9": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" + integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.10" + "@babel/helpers@^7.14.6": version "7.20.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" @@ -452,6 +573,16 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" @@ -461,6 +592,14 @@ "@babel/helper-remap-async-to-generator" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.18.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-proposal-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" @@ -469,6 +608,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.0" +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz#825924eda1fad382c3de4db6fe1711b6fa03362f" + integrity sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-default-from" "^7.22.5" + "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" @@ -485,6 +632,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" @@ -493,6 +648,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" +"@babel/plugin-proposal-numeric-separator@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" @@ -501,6 +664,17 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.20.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + "@babel/plugin-proposal-object-rest-spread@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" @@ -509,6 +683,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" @@ -517,6 +699,15 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" +"@babel/plugin-proposal-optional-chaining@^7.20.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" @@ -547,6 +738,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-class-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" @@ -561,6 +759,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz#ac3a24b362a04415a017ab96b9b4483d0e2a6e44" + integrity sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" @@ -568,6 +773,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" + integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" @@ -589,7 +801,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.22.5": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== @@ -603,13 +815,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" @@ -617,7 +836,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -631,7 +850,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -645,6 +864,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript@^7.8.3": version "7.20.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" @@ -652,6 +878,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.19.0" +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-arrow-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" @@ -659,6 +892,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-async-to-generator@^7.20.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/plugin-transform-async-to-generator@^7.8.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" @@ -668,6 +910,13 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-remap-async-to-generator" "^7.13.0" +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" @@ -675,6 +924,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" + integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-block-scoping@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" @@ -683,6 +939,21 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" +"@babel/plugin-transform-classes@^7.0.0": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + "@babel/plugin-transform-classes@^7.9.0": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" @@ -697,6 +968,14 @@ "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/plugin-transform-computed-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" @@ -704,6 +983,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" + integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-destructuring@^7.8.3": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" @@ -734,6 +1020,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" + integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.22.5" + "@babel/plugin-transform-flow-strip-types@^7.4.4": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" @@ -742,6 +1036,13 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" +"@babel/plugin-transform-for-of@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-for-of@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" @@ -749,6 +1050,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-function-name@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" @@ -757,6 +1067,13 @@ "@babel/helper-function-name" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-literals@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" @@ -764,6 +1081,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-member-expression-literals@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-member-expression-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" @@ -780,6 +1104,15 @@ "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" + integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== + dependencies: + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.4.4", "@babel/plugin-transform-modules-commonjs@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" @@ -808,6 +1141,14 @@ "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" @@ -822,6 +1163,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-object-super@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/plugin-transform-object-super@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" @@ -830,6 +1179,13 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-parameters@^7.8.7": version "7.9.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a" @@ -838,6 +1194,13 @@ "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-property-literals@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-property-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" @@ -845,6 +1208,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" + integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" + integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-react-jsx@^7.0.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" @@ -870,6 +1254,18 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-runtime@^7.0.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" + integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + semver "^6.3.1" + "@babel/plugin-transform-runtime@^7.6.2": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" @@ -880,6 +1276,13 @@ resolve "^1.8.1" semver "^5.5.1" +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-shorthand-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" @@ -887,6 +1290,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-spread@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" @@ -894,6 +1305,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-sticky-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" @@ -902,6 +1320,13 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-regex" "^7.8.3" +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-template-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" @@ -917,6 +1342,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-typescript@^7.5.0": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz#9f27fb5e51585729374bb767ab6a6d9005a23329" + integrity sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/plugin-transform-typescript@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359" @@ -926,6 +1361,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-unicode-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" @@ -1131,6 +1574,15 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" +"@babel/types@^7.22.10": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" + integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1577,6 +2029,14 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/agent@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.0.0.tgz#d8c4246c30c1ab55bb02970433acfeba85906ee7" + integrity sha512-RpRbD6PnaQIUl+p8MoH7sl2CHyMofCO0abOV+0VulqKW84+0nRWnj0bYFQELTN5HpNvzWAV8pRN6Fjx9ZLOS0g== + dependencies: + lru-cache "^10.0.1" + socks "^2.7.1" + "@npmcli/fs@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" @@ -1876,6 +2336,120 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@react-native-community/cli-config@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-12.0.0-alpha.7.tgz#1f8aa0d108876ca7a95101a13738c0a872e1185f" + integrity sha512-eZxFvt0b/3RbZ4WJ4f5wTJfh2CsnBDUzjbTkHwOM6ooemRdUd6D1Q0ZpyY0/4LoI95TZZxgE3JXftx935honGQ== + dependencies: + "@react-native-community/cli-tools" "12.0.0-alpha.7" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^4.3.0" + glob "^7.1.3" + joi "^17.2.1" + +"@react-native-community/cli-debugger-ui@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.0.0-alpha.7.tgz#4bcbde34a7b3677b9c75a174421e0fe0a3301ae3" + integrity sha512-pNDeN+D+sOpURRMFLUiiEPAk/F2U4Mj6zeRuwmDTXTJeBkY3Je0T1jukqmHyNoOXr4d/AduyQJdiy0u7HBZ+mQ== + dependencies: + serve-static "^1.13.1" + +"@react-native-community/cli-doctor@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-12.0.0-alpha.7.tgz#327733a379480bc9073b434a829d262346dd1a8f" + integrity sha512-XyP3+PTzjWMqNln4MsYW/uCycdm70iq+gi+Ab3QslGvfunLw3oLtlm4zP2QYhshonoRdFJIzdIwVgc8e+YcoPQ== + dependencies: + "@react-native-community/cli-config" "12.0.0-alpha.7" + "@react-native-community/cli-platform-android" "12.0.0-alpha.7" + "@react-native-community/cli-platform-ios" "12.0.0-alpha.7" + "@react-native-community/cli-plugin-metro" "12.0.0-alpha.7" + "@react-native-community/cli-tools" "12.0.0-alpha.7" + chalk "^4.1.2" + command-exists "^1.2.8" + envinfo "^7.7.2" + execa "^5.0.0" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" + node-stream-zip "^1.9.1" + ora "^5.4.1" + prompts "^2.4.0" + semver "^7.5.2" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" + yaml "^2.2.1" + +"@react-native-community/cli-platform-android@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-12.0.0-alpha.7.tgz#4fb1dc41d71153be7b01a4dd64a4c8344f5019d1" + integrity sha512-tdSLwtfSrik5r1PDtK438i4No66506gdiT2+J6SqGbfCYV2InOx0PJhdvACFkRoa9hHmfqNx7JYN2qLMBL1/Fw== + dependencies: + "@react-native-community/cli-tools" "12.0.0-alpha.7" + chalk "^4.1.2" + execa "^5.0.0" + glob "^7.1.3" + logkitty "^0.7.1" + +"@react-native-community/cli-platform-ios@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.0.0-alpha.7.tgz#a9ccc46937f57ebfdb0a3bb7a689e470e056213b" + integrity sha512-jBur2CZSxTlzEs0auyUyHXdmLf8+AKlFQzvdIjqWRQ/zSWRbZQ/aeNzOMXNIE+axcO0PU9t49z12vbV3yeOOyQ== + dependencies: + "@react-native-community/cli-tools" "12.0.0-alpha.7" + chalk "^4.1.2" + execa "^5.0.0" + fast-xml-parser "^4.0.12" + glob "^7.1.3" + ora "^5.4.1" + +"@react-native-community/cli-plugin-metro@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.0.0-alpha.7.tgz#f9378384a66cb10d26cea0948c375173b2994a00" + integrity sha512-uTxtdZfgRF7hLuHdZbFX33LB4UulgYWhLiO745Vu2Ne7JRe9OVhqnY98gIWGhVUzriUZhbefc5HIwf1aTE/6sQ== + dependencies: + "@react-native-community/cli-server-api" "12.0.0-alpha.7" + "@react-native-community/cli-tools" "12.0.0-alpha.7" + chalk "^4.1.2" + execa "^5.0.0" + metro "0.77.0" + metro-config "0.77.0" + metro-core "0.77.0" + metro-react-native-babel-transformer "0.77.0" + metro-resolver "0.77.0" + metro-runtime "0.77.0" + readline "^1.3.0" + +"@react-native-community/cli-server-api@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-12.0.0-alpha.7.tgz#cbff9a5f66a51c9414d636a77a413d299dafb83c" + integrity sha512-oK30eJZEdzqRUMitiMaMFzWYVJOF+Tslsl+i35EToSxqoxmSXr4nGKM7isDQvu6dbLsICTnrv5YGK3AszPFP5A== + dependencies: + "@react-native-community/cli-debugger-ui" "12.0.0-alpha.7" + "@react-native-community/cli-tools" "12.0.0-alpha.7" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.1" + nocache "^3.0.1" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^7.5.1" + +"@react-native-community/cli-tools@12.0.0-alpha.7": + version "12.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-12.0.0-alpha.7.tgz#1008f90a20a418b012b80d0a883ae5b2f1d0aa8c" + integrity sha512-Uqt8+cb0EXtZB2LamGI2JOQU4YxN1LD8/2ToU+d4BhdmvlNByRXa/6s0/oe5sBJdCZnrg4FeLkEQObikR+dYew== + dependencies: + appdirsjs "^1.2.4" + chalk "^4.1.2" + find-up "^5.0.0" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^7.5.2" + shell-quote "^1.7.3" + "@react-native-community/eslint-config@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz#35dcc529a274803fc4e0a6b3d6c274551fb91774" @@ -2204,6 +2778,27 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/npm-package-arg@*": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@types/npm-package-arg/-/npm-package-arg-6.1.1.tgz#9e2d8adc04d39824a3d9f36f738010a3f7da3c1a" + integrity sha512-452/1Kp9IdM/oR10AyqAgZOxUt7eLbm+EMJ194L6oarMYdZNiFIFAOJ7IIr0OrZXTySgfHjJezh2oiyk2kc3ag== + +"@types/npm-registry-fetch@8.0.4": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@types/npm-registry-fetch/-/npm-registry-fetch-8.0.4.tgz#77b2737cde22314ccda1dfdb9568fd7769e95b90" + integrity sha512-R9yEj6+NDmXLpKNS19cIaMyaHfV0aHjy/1qbo8K9jiHyjyaYg0CEmuOV/L0Q91DZDi3SuxlYY+2XYwh9TbB+eQ== + dependencies: + "@types/node" "*" + "@types/node-fetch" "*" + "@types/npm-package-arg" "*" + "@types/npmlog" "*" + "@types/ssri" "*" + +"@types/npmlog@*": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.4.tgz#30eb872153c7ead3e8688c476054ddca004115f6" + integrity sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ== + "@types/prettier@^1.19.0": version "1.19.1" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" @@ -2896,6 +3491,42 @@ babel-plugin-module-resolver@^3.2.0: reselect "^3.0.1" resolve "^1.4.0" +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" + +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== + +babel-plugin-transform-flow-enums@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz#d1d0cc9bdc799c850ca110d0ddc9f21b9ec3ef25" + integrity sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ== + dependencies: + "@babel/plugin-syntax-flow" "^7.12.1" + babel-preset-current-node-syntax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" @@ -2914,6 +3545,39 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" +babel-preset-fbjs@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" + integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" + babel-preset-jest@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" @@ -3164,7 +3828,17 @@ browserslist@^4.16.6: node-releases "^2.0.6" update-browserslist-db "^1.0.9" -browserslist@^4.21.3: +browserslist@^4.21.10: + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + +browserslist@^4.21.3, browserslist@^4.21.9: version "4.21.9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== @@ -3372,6 +4046,11 @@ caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001503: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001513.tgz#382fe5fbfb0f7abbaf8c55ca3ac71a0307a752e9" integrity sha512-pnjGJo7SOOjAGytZZ203Em95MRM8Cr6jhCXNF/FAXTpCTRTECnqQWLpiTRqrFtdYcth8hf4WECUpkezuYsMVww== +caniuse-lite@^1.0.30001517: + version "1.0.30001524" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80" + integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -3905,6 +4584,13 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.31.0: + version "3.32.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" + integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== + dependencies: + browserslist "^4.21.10" + core-js-compat@^3.6.2: version "3.6.4" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" @@ -4391,10 +5077,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^25.2.1: - version "25.2.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.1.tgz#fcfe8aa07dd9b0c648396a478dabca8e76c6ab27" - integrity sha512-foe7dXnGlSh3jR1ovJmdv+77VQj98eKCHHwJPbZ2eEf0fHwKbkZicpPxEch9smZ+n2dnF6QFwkOQdLq9hpeJUg== +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== diff-sequences@^26.6.2: version "26.6.2" @@ -4557,6 +5243,11 @@ electron-to-chromium@^1.4.251, electron-to-chromium@^1.4.431: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.453.tgz#0a81fdc1943db202e8724d9f61369a71f0dd51e8" integrity sha512-BU8UtQz6CB3T7RIGhId4BjmjJVXQDujb0+amGL8jpcluFJr6lwspBOvkUbnttfpZCm4zFMHmjrX1QrdPWBBMjQ== +electron-to-chromium@^1.4.477: + version "1.4.503" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz#7bd43927ea9b4198697672d28d8fbd0da016a7a1" + integrity sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA== + elliptic@^6.0.0: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5787,7 +6478,7 @@ graceful-fs@4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -5952,6 +6643,30 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hermes-estree@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.14.0.tgz#c663eea1400980802283338a09d0087c448729e7" + integrity sha512-L6M67+0/eSEbt6Ha2XOBFXL++7MR34EOJMgm+j7YCaI4L/jZqrVAg6zYQKzbs1ZCFDLvEQpOgLlapTX4gpFriA== + +hermes-estree@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.15.0.tgz#e32f6210ab18c7b705bdcb375f7700f2db15d6ba" + integrity sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ== + +hermes-parser@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.14.0.tgz#edb2e7172fce996d2c8bbba250d140b70cc1aaaf" + integrity sha512-pt+8uRiJhVlErY3fiXB3gKhZ72RxM6E1xRMpvfZ5n6Z5TQKQQXKorgRCRzoe02mmvLKBJFP5nPDGv75MWAgCTw== + dependencies: + hermes-estree "0.14.0" + +hermes-parser@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.15.0.tgz#f611a297c2a2dbbfbce8af8543242254f604c382" + integrity sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q== + dependencies: + hermes-estree "0.15.0" + hermes-profile-transformer@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" @@ -5999,6 +6714,13 @@ hosted-git-info@^6.0.0: dependencies: lru-cache "^7.5.1" +hosted-git-info@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.0.tgz#276330b8ad9f4566e82c8ccb16050decc096076b" + integrity sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA== + dependencies: + lru-cache "^10.0.1" + hsl-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" @@ -6430,6 +7152,13 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + is-core-module@^2.5.0, is-core-module@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" @@ -6910,10 +7639,20 @@ jest-config@^26.6.2: jest-get-type "^29.4.3" pretty-format "^29.6.2" -jest-diff@^25.1.0, jest-diff@^25.2.3: +jest-diff@^25.1.0: version "25.2.3" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.2.3.tgz#54d601a0a754ef26e808a8c8dbadd278c215aa3f" integrity sha512-VtZ6LAQtaQpFsmEzps15dQc5ELbJxy4L2DOSo2Ev411TUEtnJPkAMD7JneVypeMJQ1y3hgxN9Ao13n15FAnavg== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.1" + jest-get-type "^25.2.1" + pretty-format "^25.2.3" + +jest-diff@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== dependencies: chalk "^3.0.0" diff-sequences "^25.2.6" @@ -7118,6 +7857,11 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^27.0.6: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + jest-resolve-dependencies@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.2.tgz#82b5456bfa9544bb6e376397c8de334d5deba0ce" @@ -7808,6 +8552,11 @@ lodash.clone@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -7884,6 +8633,18 @@ loose-envify@^1.0.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -7951,6 +8712,23 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, socks-proxy-agent "^7.0.0" ssri "^10.0.0" +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + ssri "^10.0.0" + makeerror@1.0.12, makeerror@1.0.x: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -8028,11 +8806,455 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +metro-babel-transformer@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.77.0.tgz#5deefff8ae8f1e37cf3a38ba1198a9811c7713bb" + integrity sha512-DO41MiCIDXY7yGeUlQ/4DE/LAvjgmBQYRYzqgqs863CGOkMLA2NxsX4imW2sjrsG7+QJYXn1q5svC+qbnX0IYg== + dependencies: + "@babel/core" "^7.20.0" + hermes-parser "0.14.0" + nullthrows "^1.1.1" + +metro-babel-transformer@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.78.0.tgz#7f22dca1186c27908b281264dd31e5cb140de8d0" + integrity sha512-SwzvGuMXVqtwQjbuR0RKBKRCNwnQsiA7TG1X+VXkeF/UhbWT4V4fqE76SKWWFsNAv1WEJvsMQcUeLggiecehqg== + dependencies: + "@babel/core" "^7.20.0" + hermes-parser "0.15.0" + nullthrows "^1.1.1" + +metro-cache-key@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.77.0.tgz#ce82ab46a4df012505e9fbf84075bb817ff9070e" + integrity sha512-bnTn5oLlBtiMjWRANuljwU+N4+HSxvYZ+3o1ZG2eWmTrqgdF+jEpgp4Rswq3XdajMjp5mR1wyoFNVhNuGtco5A== + +metro-cache-key@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.78.0.tgz#493c8c71a188698fcb909dcbc55be4c4603cc3a8" + integrity sha512-2Mp5LQjpZ3yNdUSpIu6kB9cLUHDve4riHZ7i5n/MikHkpqVCOdo0qGsHujU9v8Fc1dWUOdSC0ufS9j03KpLh4Q== + +metro-cache@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.77.0.tgz#e126e1708098c704f07e932cc47ae30028a75ec3" + integrity sha512-IZfi9g1/lkyFx5Y7DdDjb5kU+4w2u5rO5qUpcCioVdtZBMfON5D4O1fecHNsGKIHcAr7sWo6hWfahbvZhRM+Wg== + dependencies: + metro-core "0.77.0" + rimraf "^3.0.2" + +metro-cache@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.78.0.tgz#5abb129e62011ba91e4e3aa8a2ebab2d7c569b4a" + integrity sha512-kVub3O55oG3k875uDxwr53GuHvqrXc+vyHWaX42wa2AJrCETBVb1ybVTu4mfL/WXLMdn13ZusulOpY7lxVcZjQ== + dependencies: + metro-core "0.78.0" + rimraf "^3.0.2" + +metro-config@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.77.0.tgz#dadcafd6a95b1dc0de2e6029e100e59c53af777d" + integrity sha512-Ac5TjRC2ULLGObuWJYAzpgJFjAx1ytCcV0GyA56BWo0MEaugW/90Rj6DX/eWywIO8NySnEhB0XalPCTcqOEPvw== + dependencies: + connect "^3.6.5" + cosmiconfig "^5.0.5" + jest-validate "^29.2.1" + metro "0.77.0" + metro-cache "0.77.0" + metro-core "0.77.0" + metro-runtime "0.77.0" + +metro-config@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.78.0.tgz#0a83cb9cd2e4913394272ee8a83d04ee14d833d8" + integrity sha512-v8P0WrtR/pe8xTyMEPhe+LBWoPivrJJzPlc+2iU9ZZhadhZH5JsBmmHXOobyZnKu2OWRFku6VpCiU2+Tg55F5g== + dependencies: + connect "^3.6.5" + cosmiconfig "^5.0.5" + jest-validate "^29.2.1" + metro "0.78.0" + metro-cache "0.78.0" + metro-core "0.78.0" + metro-runtime "0.78.0" + +metro-core@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.77.0.tgz#ad496d3ac50332f1c8be16b8c78847bbc61c896c" + integrity sha512-352kpZvPAQUEiUn6nh/bq/eO1jRkZyVoRAy3UtIN+K5B3UQoAFHjZgxvJxXtYRDIgOpC1Nx/oTPI0I/LREq3mQ== + dependencies: + lodash.throttle "^4.1.1" + metro-resolver "0.77.0" + +metro-core@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.78.0.tgz#d14afc68ba270678a304d9f98130466307e5703c" + integrity sha512-pD9yfRdCESHmWs1FPuoEyBmIXNYMaAMV5L51zeR6ugHRRBUYyLjdrJtTEnxL2j7rTidkQ6jzYp3B091kGEptZw== + dependencies: + lodash.throttle "^4.1.1" + metro-resolver "0.78.0" + +metro-file-map@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.77.0.tgz#f866292a70e9c463d2274cbfc415ef46aad65ef2" + integrity sha512-piBtfx1WBtCjNKAnXsHNlwvn8tKC+lcM+zC0A/x/YHuarA/MTS5fCtmgwLjmZZiCe60KOVYN4+5lkpRToH4drQ== + dependencies: + anymatch "^3.0.3" + debug "^2.2.0" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + invariant "^2.2.4" + jest-regex-util "^27.0.6" + jest-util "^27.2.0" + jest-worker "^27.2.0" + micromatch "^4.0.4" + node-abort-controller "^3.1.1" + nullthrows "^1.1.1" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +metro-file-map@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.78.0.tgz#d2e84f5bfa7595695c83429088621d5a2fe61919" + integrity sha512-/RBoGID+sBFMEgDqcZg/ppehD+k8T7z83kHQZeIyoYHomiSe+gpWljNl6vLiRNJpeRNKiSk9EPZnhZ+knQsaMQ== + dependencies: + anymatch "^3.0.3" + debug "^2.2.0" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + invariant "^2.2.4" + jest-util "^27.2.0" + jest-worker "^27.2.0" + micromatch "^4.0.4" + node-abort-controller "^3.1.1" + nullthrows "^1.1.1" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +metro-inspector-proxy@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.77.0.tgz#ff8f8acf690ff6f55acaa0422bae0abfd886f3e0" + integrity sha512-SQ9YzdFewAQODTwdPWgDtXKufCSyHBeHipFHy/ashuXuIvT8wdVF8UiDd4VcFzf7vTk+Xv99G39DydZvTtNv2w== + dependencies: + connect "^3.6.5" + debug "^2.2.0" + node-fetch "^2.2.0" + ws "^7.5.1" + yargs "^17.6.2" + metro-memory-fs@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.78.0.tgz#e39f9e7bcf4b23c8287347e3c5c1b581e069c6a8" integrity sha512-TXaP2wFW6zOZAnc1kTkvlgujdMe9cW0g0S4aC+XyfhkhAeA9+6qGD2KpXf5ngz2m8b0KgCpHpDgMJuYFl24mAQ== +metro-minify-terser@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.77.0.tgz#2e6e7f5540f1d83978da36ba124c803c3cd9547b" + integrity sha512-StiZjb57WYjhLyaW7PJ0xnNAWj9RZFYZWyL3MPUChpXKZXVkjurDDgiAXN9zanM/n5eachKlmAdsSpm5dVqC8w== + dependencies: + terser "^5.15.0" + +metro-minify-terser@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.78.0.tgz#3df1afe87d8033c43f161d46da2a2e03bbe1490a" + integrity sha512-IELdVJFIX0XkoFKXtWq5N02z32mclsbDb1SxJVYQYl1Qybm3fOih83teNvgPl0ezEtTVEAVdHeAwKiOGanjPZQ== + dependencies: + terser "^5.15.0" + +metro-react-native-babel-preset@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz#47457eca8e36b77156afbe790247a70dbb40faaa" + integrity sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.4.0" + +metro-react-native-babel-transformer@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.77.0.tgz#34c6f6670a396074e24f9ad152d185551a88a3e6" + integrity sha512-uCV1Kt4ebY9/hT7ayDGMDgIsrbyxiBHNP+q0LGxscOx3D/QODv1z+WhfC4Hy0/1wDCGV3l0EQrfLqM+7qpjsWA== + dependencies: + "@babel/core" "^7.20.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.14.0" + metro-react-native-babel-preset "0.77.0" + nullthrows "^1.1.1" + +metro-resolver@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.77.0.tgz#765cd6cbffa6fb9589807b30c7922720d0cf7291" + integrity sha512-h3rvDWD25cZ/5Iin6mPjSQQe8KtWPAHZnA6AnAj2yadzltkyytPjmHal6JhTPsVHWMKorkC03MUpEgGusuvTww== + +metro-resolver@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.78.0.tgz#36edd0ababe1e34dbcecc32ff7da7356676816e9" + integrity sha512-V8ajy9UfP4d2OIsD6vMr4ZWvA1xAORPgDBq1ir06hALUyZGLj/hOsxAUCSSjAN1XL32Nw9OZrLYDMZdw1exaow== + +metro-runtime@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.77.0.tgz#ccb3bfbce06acd5b8d0b611d0f55972a0ca28039" + integrity sha512-A4MCtMbrB7RoWDaIJSm32d7TcKLBHrjG/3mXx4pDnFgfmIQcKb/GNXcFJtE2tEjQxWJvZHhQYZh1l/49wQMDcA== + dependencies: + "@babel/runtime" "^7.0.0" + react-refresh "^0.4.0" + +metro-runtime@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.78.0.tgz#7c8f28724f91498fb9c73447212a8b478b486b7a" + integrity sha512-4AwNpoyiWtQQWL2hyEXpHrcSSK65mcBRk2v25NN30R/8P7P5yHXM2JVrcd6/LefVJOzgDQcQkzNPU7GyBqcm8A== + dependencies: + "@babel/runtime" "^7.0.0" + react-refresh "^0.4.0" + +metro-source-map@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.77.0.tgz#907df460e914cf3577151797eed998d275f462ec" + integrity sha512-gNrWkgV1zma2/NZVCxCvN/y9+fGwwwdiOzwn3aRrjxR88njJ2KQM0wnY86Q7i+1XEpf0BRzutMGYLLZCX9vTPQ== + dependencies: + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + invariant "^2.2.4" + metro-symbolicate "0.77.0" + nullthrows "^1.1.1" + ob1 "0.77.0" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-source-map@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.78.0.tgz#1e96996e15d555180434a96dc28158e1943cd5bd" + integrity sha512-tRF6ASVt2PQy4r5TdGis6/dtyDA0OTavsJ9xgLO0RyqBhLZAdtGj8LMPychEOHX1eXR/x+iKFsF9vXXWBRqfUg== + dependencies: + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + invariant "^2.2.4" + metro-symbolicate "0.78.0" + nullthrows "^1.1.1" + ob1 "0.78.0" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-symbolicate@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.77.0.tgz#aee584fcd584fbaf301541d257734c08455f3d40" + integrity sha512-L7KmrqADzhSS9PcUwF7KmbXemBb1rBW0ulw8eG2D+dLP5HtHRVf8WMHZswB2V0Xi0GnWCg4HMp8gSyIMs2wMGg== + dependencies: + invariant "^2.2.4" + metro-source-map "0.77.0" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-symbolicate@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.78.0.tgz#0f12a22511ad6de97b7abdfcfda67eadd8504b83" + integrity sha512-OcQpvcpNyDtqKjfANqaJi2hsd3ajfwn+3+wuqY1kYG9/apLFY11lBw+o/rIKOYc3q4zWvclkwDGMkPbAxbXLOA== + dependencies: + invariant "^2.2.4" + metro-source-map "0.78.0" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-transform-plugins@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.77.0.tgz#3608de5cb18ae72f66926e4ee092ded0f3e5f5fb" + integrity sha512-QcVpA+YUAqT1vNyMAMDehhTBcPTSvETRfrlhvfefVXpA2Pp90huzKmLxq2uNncm7o0Oy+CeKUq3awtv8ds1KTQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + nullthrows "^1.1.1" + +metro-transform-plugins@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.78.0.tgz#306beaef06689a28123a6f1adc5662860a8ae6a8" + integrity sha512-rZFtHj6zTzHIVURoYDFw20Idf5UDcyv7aFOMBVkLDrBo8EpMb5yFRsFw2I/FEreX78YFkJpUkNdxAV9JrE7PHQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + nullthrows "^1.1.1" + +metro-transform-worker@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.77.0.tgz#0c71429661f389985bff29a821be76ce3a15aa5f" + integrity sha512-Ub2FawmG1eyq+MPLYp8sD7/PuWPs7MJxa3/qbI1VWTFR6M3NomGL4Ogin7ffJPb0DAi+GTfevp8azuyZcsYr9A== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" + babel-preset-fbjs "^3.4.0" + metro "0.77.0" + metro-babel-transformer "0.77.0" + metro-cache "0.77.0" + metro-cache-key "0.77.0" + metro-source-map "0.77.0" + metro-transform-plugins "0.77.0" + nullthrows "^1.1.1" + +metro-transform-worker@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.78.0.tgz#f505b36b94fa67facbbbec0d396a82a7ec1d6a73" + integrity sha512-tooyGrf3g+0c838BeYAkFUgVwSJeumsIcaT65oZ7Om11f8QdPiIyVbgD1iEl369R6rJuw0mEPibpEjMMIZJuNg== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" + metro "0.78.0" + metro-babel-transformer "0.78.0" + metro-cache "0.78.0" + metro-cache-key "0.78.0" + metro-source-map "0.78.0" + metro-transform-plugins "0.78.0" + nullthrows "^1.1.1" + +metro@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.77.0.tgz#35be9364d5da7a244d430eb12304bdbb6dae7656" + integrity sha512-a/OMhKvVN4cH32mt9pCJw7LRP54bzT/QgqVGJxHX04m8JUnNR+DWLw4scN8p2Q5v0Z7DZIpkExGPlha7TBNcHw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + accepts "^1.3.7" + async "^3.2.2" + chalk "^4.0.0" + ci-info "^2.0.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + error-stack-parser "^2.0.6" + graceful-fs "^4.2.4" + hermes-parser "0.14.0" + image-size "^1.0.2" + invariant "^2.2.4" + jest-worker "^27.2.0" + jsc-safe-url "^0.2.2" + lodash.throttle "^4.1.1" + metro-babel-transformer "0.77.0" + metro-cache "0.77.0" + metro-cache-key "0.77.0" + metro-config "0.77.0" + metro-core "0.77.0" + metro-file-map "0.77.0" + metro-inspector-proxy "0.77.0" + metro-minify-terser "0.77.0" + metro-resolver "0.77.0" + metro-runtime "0.77.0" + metro-source-map "0.77.0" + metro-symbolicate "0.77.0" + metro-transform-plugins "0.77.0" + metro-transform-worker "0.77.0" + mime-types "^2.1.27" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + rimraf "^3.0.2" + serialize-error "^2.1.0" + source-map "^0.5.6" + strip-ansi "^6.0.0" + throat "^5.0.0" + ws "^7.5.1" + yargs "^17.6.2" + +metro@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.78.0.tgz#e927b9fab79b172f4439239691a6d21f5b1338fe" + integrity sha512-ZNOPyJh4hlYshztAxKFNgeERrlOzXASlyC6unf/Yqt+jRk/GgVcecQQamiEWcejC+aLhP4FVxWP5Z6BiFqkdDA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + accepts "^1.3.7" + async "^3.2.2" + chalk "^4.0.0" + ci-info "^2.0.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + error-stack-parser "^2.0.6" + graceful-fs "^4.2.4" + hermes-parser "0.15.0" + image-size "^1.0.2" + invariant "^2.2.4" + jest-worker "^27.2.0" + jsc-safe-url "^0.2.2" + lodash.throttle "^4.1.1" + metro-babel-transformer "0.78.0" + metro-cache "0.78.0" + metro-cache-key "0.78.0" + metro-config "0.78.0" + metro-core "0.78.0" + metro-file-map "0.78.0" + metro-minify-terser "0.78.0" + metro-resolver "0.78.0" + metro-runtime "0.78.0" + metro-source-map "0.78.0" + metro-symbolicate "0.78.0" + metro-transform-plugins "0.78.0" + metro-transform-worker "0.78.0" + mime-types "^2.1.27" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + rimraf "^3.0.2" + serialize-error "^2.1.0" + source-map "^0.5.6" + strip-ansi "^6.0.0" + throat "^5.0.0" + ws "^7.5.1" + yargs "^17.6.2" + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -8196,17 +9418,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" - integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== - dependencies: - minipass "^5.0.0" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - minipass-fetch@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" @@ -8269,6 +9480,11 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e" integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA== +minipass@^7.0.2, minipass@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== + minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -8497,7 +9713,7 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^2.0.12, node-releases@^2.0.6: +node-releases@^2.0.12, node-releases@^2.0.13, node-releases@^2.0.6: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== @@ -8616,6 +9832,16 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" +npm-package-arg@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.0.tgz#0f09cba4a2c7e1bcba9c6520cd1775fa18eda82d" + integrity sha512-D8sItaQ8n6VlBUFed3DLz2sCpkabRAjaiLkTamDppvh8lmmAPirzNfBuhJd/2rlmoxZ2S9mOHmIEvzV2z2jOeA== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + npm-packlist@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" @@ -8643,6 +9869,19 @@ npm-pick-manifest@^8.0.0: npm-package-arg "^10.0.0" semver "^7.3.5" +npm-registry-fetch@16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.0.0.tgz#7529dd7c64c16a1bc8af72f99df73dfe98bb9549" + integrity sha512-JFCpAPUpvpwfSydv99u85yhP68rNIxSFmDpNbNnRWKSe3gpjHnWL8v320gATwRzjtgmZ9Jfe37+ZPOLZPwz6BQ== + dependencies: + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^3.0.0" + npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: version "14.0.5" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" @@ -8756,6 +9995,16 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +ob1@0.77.0: + version "0.77.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.77.0.tgz#42883c87af8c3aad499238c6c0c8fb979178107d" + integrity sha512-yWpX6DzWmcZ7DO7SP+uoDkdKXVhSY5wPCkZXln751gOZQCit+BJpMa4Rj1AL5jjByXLqNzieK3jX+mWOzbS23g== + +ob1@0.78.0: + version "0.78.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.78.0.tgz#de39d59417c355e18e7c31fe83a35cb002e02b2e" + integrity sha512-jq+K4K7UVsZJZAC7KgT+CskxuZdXit3+sCbBtRVrTXU/j+6/+TdLiEp9v0V/KujzivxsWm99HlKoylocGlLo/g== + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -9882,7 +11131,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prompts@^2.4.2: +prompts@^2.4.0, prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -10268,7 +11517,7 @@ regexpu-core@^4.7.0: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -regexpu-core@^5.2.1: +regexpu-core@^5.2.1, regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== @@ -10429,6 +11678,15 @@ resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.14.2: + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.8.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -10622,6 +11880,11 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.0.0, semver@^7.3.7, semver@^7.3.8: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -10783,11 +12046,6 @@ sigstore@^1.3.0, sigstore@^1.4.0: "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -10845,11 +12103,6 @@ smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -10899,15 +12152,7 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -socks@^2.7.1: +socks@^2.6.2, socks@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -11873,13 +13118,6 @@ unique-slug@^4.0.0: dependencies: imurmurhash "^0.1.4" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - universal-user-agent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" @@ -12054,13 +13292,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" From 2d4fb4c9f7f6272689a97a124666d290dab36dfb Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:53 +0200 Subject: [PATCH 10/23] add `--dependency-check` flag --- packages/cli-config/src/loadConfig.ts | 2 +- .../src/commands/buildAndroid/index.ts | 6 ++++++ .../src/commands/runAndroid/index.ts | 5 +++++ .../cli-platform-ios/src/commands/buildIOS/index.ts | 4 ++++ .../cli-platform-ios/src/commands/runIOS/index.ts | 1 + packages/cli-tools/src/index.ts | 2 +- packages/cli-tools/src/resolveTransitiveDeps.ts | 12 ++++++------ packages/cli/src/index.ts | 8 +------- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/cli-config/src/loadConfig.ts b/packages/cli-config/src/loadConfig.ts index e2b699124..ffd3533de 100644 --- a/packages/cli-config/src/loadConfig.ts +++ b/packages/cli-config/src/loadConfig.ts @@ -12,6 +12,7 @@ import { resolveNodeModuleDir, UnknownProjectError, } from '@react-native-community/cli-tools'; +import findDependencies from './findDependencies'; import resolveReactNativePath from './resolveReactNativePath'; import { readConfigFromDisk, @@ -19,7 +20,6 @@ import { } from './readConfigFromDisk'; import assign from './assign'; import merge from './merge'; -import findDependencies from './findDependencies'; function getDependencyConfig( root: string, diff --git a/packages/cli-platform-android/src/commands/buildAndroid/index.ts b/packages/cli-platform-android/src/commands/buildAndroid/index.ts index 0f6674e67..5cfd8924e 100644 --- a/packages/cli-platform-android/src/commands/buildAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/buildAndroid/index.ts @@ -17,6 +17,7 @@ export interface BuildFlags { tasks?: Array; extraParams?: Array; interactive?: boolean; + dependencyCheck?: boolean; } async function buildAndroid( @@ -123,6 +124,11 @@ export const options = [ description: 'Explicitly select build type and flavour to use before running a build', }, + { + name: '--dependency-check', + description: + 'Check if there are any transitive dependencies containing native code that are not declared as a direct dependency in your package.json.', + }, ]; export default { diff --git a/packages/cli-platform-android/src/commands/runAndroid/index.ts b/packages/cli-platform-android/src/commands/runAndroid/index.ts index 0442881c8..e95161f42 100644 --- a/packages/cli-platform-android/src/commands/runAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/runAndroid/index.ts @@ -22,6 +22,7 @@ import { logAlreadyRunningBundler, startServerInNewWindow, handlePortUnavailable, + checkTransitiveDependencies, } from '@react-native-community/cli-tools'; import {getAndroidProject} from '../../config/getAndroidProject'; import listAndroidDevices from './listAndroidDevices'; @@ -56,6 +57,10 @@ async function runAndroid(_argv: Array, config: Config, args: Flags) { let {packager, port} = args; + if (args.dependencyCheck) { + await checkTransitiveDependencies(); + } + const packagerStatus = await isPackagerRunning(port); if ( diff --git a/packages/cli-platform-ios/src/commands/buildIOS/index.ts b/packages/cli-platform-ios/src/commands/buildIOS/index.ts index 1da8bb8f4..d0e4f8371 100644 --- a/packages/cli-platform-ios/src/commands/buildIOS/index.ts +++ b/packages/cli-platform-ios/src/commands/buildIOS/index.ts @@ -19,6 +19,10 @@ async function buildIOS(_: Array, ctx: Config, args: BuildFlags) { // check if pods need to be installed await resolvePods(ctx.root, ctx.dependencies, {forceInstall: args.forcePods}); + if (args.dependencyCheck) { + await checkTransitiveDependencies(); + } + process.chdir(sourceDir); const {scheme, mode} = await getConfiguration(xcodeProject, sourceDir, args); diff --git a/packages/cli-platform-ios/src/commands/runIOS/index.ts b/packages/cli-platform-ios/src/commands/runIOS/index.ts index 30f584301..667918381 100644 --- a/packages/cli-platform-ios/src/commands/runIOS/index.ts +++ b/packages/cli-platform-ios/src/commands/runIOS/index.ts @@ -21,6 +21,7 @@ import { isPackagerRunning, logAlreadyRunningBundler, handlePortUnavailable, + checkTransitiveDependencies, } from '@react-native-community/cli-tools'; import {buildProject} from '../buildIOS/buildProject'; import {BuildFlags, buildOptions} from '../buildIOS/buildOptions'; diff --git a/packages/cli-tools/src/index.ts b/packages/cli-tools/src/index.ts index f77d48f1e..7730e4e1a 100644 --- a/packages/cli-tools/src/index.ts +++ b/packages/cli-tools/src/index.ts @@ -17,6 +17,6 @@ export {default as handlePortUnavailable} from './handlePortUnavailable'; export * from './port'; export {default as cacheManager} from './cacheManager'; export {default as runSudo} from './runSudo'; -export * as transitiveDeps from './resolveTransitiveDeps'; +export {default as checkTransitiveDependencies} from './resolveTransitiveDeps'; export * from './errors'; diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index bd008bb07..b26c0b1cc 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -17,7 +17,7 @@ interface DependencyData { duplicates?: DependencyData[]; } -export function isUsingYarn(root: string) { +function isUsingYarn(root: string) { return fs.existsSync(path.join(root, 'yarn.lock')); } @@ -62,7 +62,7 @@ function findDependencyPath( return dependencyPath; } -export function collectDependencies(root: string): Map { +function collectDependencies(root: string): Map { const dependencies = new Map(); const checkDependency = (dependencyPath: string) => { @@ -242,7 +242,7 @@ async function yarnSilentInstallPeerDeps(root: string) { } } -export default async function findPeerDepsForAutolinking(root: string) { +async function findPeerDepsForAutolinking(root: string) { const deps = collectDependencies(root); const nonEmptyPeers = filterNativeDependencies(root, deps); const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); @@ -340,7 +340,7 @@ function installMissingPackages( } } -export async function resolveTransitiveDeps() { +async function resolveTransitiveDeps() { const root = process.cwd(); const isYarn = isUsingYarn(root); @@ -367,7 +367,7 @@ export async function resolveTransitiveDeps() { return false; } -export async function resolvePodsInstallation() { +async function resolvePodsInstallation() { const {install} = await prompt({ type: 'confirm', name: 'install', @@ -383,7 +383,7 @@ export async function resolvePodsInstallation() { } } -export async function checkTransitiveDeps() { +export default async function checkTransitiveDependencies() { const packageJsonPath = path.join(process.cwd(), 'package.json'); const preInstallHash = generateFileHash(packageJsonPath); const areTransitiveDepsInstalled = await resolveTransitiveDeps(); diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index dd0c4d336..f3aad5735 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,9 +1,5 @@ import loadConfig from '@react-native-community/cli-config'; -import { - CLIError, - logger, - transitiveDeps, -} from '@react-native-community/cli-tools'; +import {CLIError, logger} from '@react-native-community/cli-tools'; import type { Command, Config, @@ -175,8 +171,6 @@ async function setupAndRun() { } } - await transitiveDeps.checkTransitiveDeps(); - let config: Config | undefined; try { From 4634491f2ceeb110fbd261b941e6900756e6085b Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:53 +0200 Subject: [PATCH 11/23] warn if cannot find matching version for a library --- packages/cli-tools/package.json | 2 +- .../cli-tools/src/resolveTransitiveDeps.ts | 11 +- packages/cli/src/index.ts | 2 +- yarn.lock | 1230 +++-------------- 4 files changed, 190 insertions(+), 1055 deletions(-) diff --git a/packages/cli-tools/package.json b/packages/cli-tools/package.json index 3e8e47937..38b7936fc 100644 --- a/packages/cli-tools/package.json +++ b/packages/cli-tools/package.json @@ -7,7 +7,7 @@ "access": "public" }, "dependencies": { - "@react-native-community/cli-doctor": "12.0.0-alpha.7", + "@react-native-community/cli-doctor": "12.0.0-alpha.11", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index b26c0b1cc..5d2b1c045 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -306,7 +306,16 @@ async function getPackagesVersion( ranges, availableVersions, ); - workingVersions[packageName] = workingVersion; + + if (workingVersion !== null) { + workingVersions[packageName] = workingVersion; + } else { + logger.warn( + `Could not find a version that matches all ranges for ${chalk.bold( + packageName, + )}. Please resolve this issue manually.`, + ); + } } return workingVersions; diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index f3aad5735..de74e82df 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -41,6 +41,7 @@ const handleError = (err: Error) => { } process.exit(1); }; + function printExamples(examples: Command['examples']) { let output: string[] = []; @@ -172,7 +173,6 @@ async function setupAndRun() { } let config: Config | undefined; - try { config = loadConfig(); diff --git a/yarn.lock b/yarn.lock index 6bc916b5a..63f90ed66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,11 +33,6 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544" integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - "@babel/compat-data@^7.9.0": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" @@ -124,17 +119,6 @@ browserslist "^4.21.3" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - "@babel/helper-compilation-targets@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52" @@ -156,21 +140,6 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" - integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - "@babel/helper-create-class-features-plugin@^7.8.3": version "7.20.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" @@ -184,15 +153,6 @@ "@babel/helper-replace-supers" "^7.19.1" "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - "@babel/helper-create-regexp-features-plugin@^7.8.3": version "7.20.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" @@ -218,17 +178,6 @@ "@babel/helper-function-name" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - "@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" @@ -335,17 +284,6 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/helper-optimise-call-expression@^7.18.6", "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -365,7 +303,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== @@ -392,15 +330,6 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" - "@babel/helper-remap-async-to-generator@^7.8.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" @@ -422,15 +351,6 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" @@ -456,13 +376,6 @@ dependencies: "@babel/types" "^7.20.2" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-split-export-declaration@^7.14.5", "@babel/helper-split-export-declaration@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -522,15 +435,6 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helper-wrap-function@^7.22.9": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" - integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.10" - "@babel/helpers@^7.14.6": version "7.20.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" @@ -573,16 +477,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== -"@babel/plugin-proposal-async-generator-functions@^7.0.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" @@ -592,14 +486,6 @@ "@babel/helper-remap-async-to-generator" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.18.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-proposal-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" @@ -608,14 +494,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz#825924eda1fad382c3de4db6fe1711b6fa03362f" - integrity sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-default-from" "^7.22.5" - "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" @@ -632,14 +510,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" @@ -648,14 +518,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" @@ -664,17 +526,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.20.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - "@babel/plugin-proposal-object-rest-spread@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" @@ -683,14 +534,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" -"@babel/plugin-proposal-optional-catch-binding@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" @@ -699,15 +542,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.20.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" @@ -738,13 +572,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-class-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" @@ -759,13 +586,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz#ac3a24b362a04415a017ab96b9b4483d0e2a6e44" - integrity sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" @@ -773,13 +593,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" @@ -801,7 +614,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5": +"@babel/plugin-syntax-jsx@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== @@ -815,20 +628,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" @@ -836,7 +642,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -850,7 +656,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -864,13 +670,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript@^7.8.3": version "7.20.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" @@ -878,13 +677,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-arrow-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" @@ -892,15 +684,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-async-to-generator@^7.20.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - "@babel/plugin-transform-async-to-generator@^7.8.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" @@ -910,13 +693,6 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-remap-async-to-generator" "^7.13.0" -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" @@ -924,13 +700,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoping@^7.0.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" - integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-block-scoping@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" @@ -939,21 +708,6 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.0.0": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" - integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - "@babel/plugin-transform-classes@^7.9.0": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" @@ -968,14 +722,6 @@ "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/plugin-transform-computed-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" @@ -983,13 +729,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" - integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-destructuring@^7.8.3": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" @@ -1020,14 +759,6 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" - "@babel/plugin-transform-flow-strip-types@^7.4.4": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" @@ -1036,13 +767,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-for-of@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-for-of@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" @@ -1050,15 +774,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-function-name@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" @@ -1067,13 +782,6 @@ "@babel/helper-function-name" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-literals@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" @@ -1081,13 +789,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-member-expression-literals@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-member-expression-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" @@ -1104,15 +805,6 @@ "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" - integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== - dependencies: - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.4.4", "@babel/plugin-transform-modules-commonjs@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" @@ -1141,14 +833,6 @@ "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" @@ -1163,14 +847,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-object-super@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/plugin-transform-object-super@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" @@ -1179,13 +855,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-parameters@^7.8.7": version "7.9.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a" @@ -1194,13 +863,6 @@ "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-property-literals@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-property-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" @@ -1208,27 +870,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" - integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" - integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-react-jsx@^7.0.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" @@ -1254,18 +895,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-runtime@^7.0.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" - integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - semver "^6.3.1" - "@babel/plugin-transform-runtime@^7.6.2": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" @@ -1276,13 +905,6 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-shorthand-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" @@ -1290,14 +912,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-spread@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" @@ -1305,13 +919,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-sticky-regex@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-sticky-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" @@ -1320,13 +927,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-regex" "^7.8.3" -"@babel/plugin-transform-template-literals@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-template-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" @@ -1342,16 +942,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typescript@^7.5.0": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz#9f27fb5e51585729374bb767ab6a6d9005a23329" - integrity sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" - "@babel/plugin-transform-typescript@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359" @@ -1361,14 +951,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" -"@babel/plugin-transform-unicode-regex@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-unicode-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" @@ -1574,15 +1156,6 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@babel/types@^7.22.10": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" - integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1691,6 +1264,16 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== +"@jest/console@^25.2.3": + version "25.2.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.2.3.tgz#38ac19b916ff61457173799239472659e1a67c39" + integrity sha512-k+37B1aSvOt9tKHWbZZSOy1jdgzesB0bj96igCVUG1nAH1W5EoUfgc5EXbBVU08KSLvkVdWopLXaO3xfVGlxtQ== + dependencies: + "@jest/source-map" "^25.2.1" + chalk "^3.0.0" + jest-util "^25.2.3" + slash "^3.0.0" + "@jest/console@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" @@ -1807,6 +1390,15 @@ dependencies: "@sinclair/typebox" "^0.27.8" +"@jest/source-map@^25.2.1": + version "25.2.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.2.1.tgz#b62ecf8ae76170b08eff8859b56eb7576df34ab8" + integrity sha512-PgScGJm1U27+9Te/cxP4oUFqJ2PX6NhBL2a6unQ7yafCgs8k02c0LSyjSIx/ao0AwcAdCczfAPDf5lJ7zoB/7A== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.3" + source-map "^0.6.0" + "@jest/source-map@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" @@ -1816,6 +1408,17 @@ graceful-fs "^4.2.4" source-map "^0.6.0" +"@jest/test-result@^25.2.4": + version "25.2.4" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.2.4.tgz#8fc9eac58e82eb2a82e4058e68c3814f98f59cf5" + integrity sha512-AI7eUy+q2lVhFnaibDFg68NGkrxVWZdD6KBr9Hm6EvN0oAe7GxpEwEavgPfNHQjU2mi6g+NsFn/6QPgTUwM1qg== + dependencies: + "@jest/console" "^25.2.3" + "@jest/transform" "^25.2.4" + "@jest/types" "^25.2.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + "@jest/test-result@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" @@ -1837,6 +1440,28 @@ jest-runner "^26.6.2" jest-runtime "^26.6.2" +"@jest/transform@^25.2.4": + version "25.2.4" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.2.4.tgz#34336f37f13f62f7d1f5b93d5d150ba9eb3e11b9" + integrity sha512-6eRigvb+G6bs4kW5j1/y8wu4nCrmVuIe0epPBbiWaYlwawJ8yi1EIyK3d/btDqmBpN5GpN4YhR6iPPnDmkYdTA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^25.2.3" + babel-plugin-istanbul "^6.0.0" + chalk "^3.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.3" + jest-haste-map "^25.2.3" + jest-regex-util "^25.2.1" + jest-util "^25.2.3" + micromatch "^4.0.2" + pirates "^4.0.1" + realpath-native "^2.0.0" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + "@jest/transform@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" @@ -1858,10 +1483,10 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== +"@jest/types@^25.2.3": + version "25.2.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.2.3.tgz#035c4fb94e2da472f359ff9a211915d59987f6b6" + integrity sha512-6oLQwO9mKif3Uph3RX5J1i3S7X7xtDHWBaaaoeKw8hOzV6YUd0qDcYcHZ6QXMHDIzSr7zzrEa51o2Ovlj6AtKQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^1.1.1" @@ -2336,120 +1961,6 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@react-native-community/cli-config@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-12.0.0-alpha.7.tgz#1f8aa0d108876ca7a95101a13738c0a872e1185f" - integrity sha512-eZxFvt0b/3RbZ4WJ4f5wTJfh2CsnBDUzjbTkHwOM6ooemRdUd6D1Q0ZpyY0/4LoI95TZZxgE3JXftx935honGQ== - dependencies: - "@react-native-community/cli-tools" "12.0.0-alpha.7" - chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" - glob "^7.1.3" - joi "^17.2.1" - -"@react-native-community/cli-debugger-ui@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.0.0-alpha.7.tgz#4bcbde34a7b3677b9c75a174421e0fe0a3301ae3" - integrity sha512-pNDeN+D+sOpURRMFLUiiEPAk/F2U4Mj6zeRuwmDTXTJeBkY3Je0T1jukqmHyNoOXr4d/AduyQJdiy0u7HBZ+mQ== - dependencies: - serve-static "^1.13.1" - -"@react-native-community/cli-doctor@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-12.0.0-alpha.7.tgz#327733a379480bc9073b434a829d262346dd1a8f" - integrity sha512-XyP3+PTzjWMqNln4MsYW/uCycdm70iq+gi+Ab3QslGvfunLw3oLtlm4zP2QYhshonoRdFJIzdIwVgc8e+YcoPQ== - dependencies: - "@react-native-community/cli-config" "12.0.0-alpha.7" - "@react-native-community/cli-platform-android" "12.0.0-alpha.7" - "@react-native-community/cli-platform-ios" "12.0.0-alpha.7" - "@react-native-community/cli-plugin-metro" "12.0.0-alpha.7" - "@react-native-community/cli-tools" "12.0.0-alpha.7" - chalk "^4.1.2" - command-exists "^1.2.8" - envinfo "^7.7.2" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" - node-stream-zip "^1.9.1" - ora "^5.4.1" - prompts "^2.4.0" - semver "^7.5.2" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" - yaml "^2.2.1" - -"@react-native-community/cli-platform-android@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-12.0.0-alpha.7.tgz#4fb1dc41d71153be7b01a4dd64a4c8344f5019d1" - integrity sha512-tdSLwtfSrik5r1PDtK438i4No66506gdiT2+J6SqGbfCYV2InOx0PJhdvACFkRoa9hHmfqNx7JYN2qLMBL1/Fw== - dependencies: - "@react-native-community/cli-tools" "12.0.0-alpha.7" - chalk "^4.1.2" - execa "^5.0.0" - glob "^7.1.3" - logkitty "^0.7.1" - -"@react-native-community/cli-platform-ios@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.0.0-alpha.7.tgz#a9ccc46937f57ebfdb0a3bb7a689e470e056213b" - integrity sha512-jBur2CZSxTlzEs0auyUyHXdmLf8+AKlFQzvdIjqWRQ/zSWRbZQ/aeNzOMXNIE+axcO0PU9t49z12vbV3yeOOyQ== - dependencies: - "@react-native-community/cli-tools" "12.0.0-alpha.7" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.0.12" - glob "^7.1.3" - ora "^5.4.1" - -"@react-native-community/cli-plugin-metro@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.0.0-alpha.7.tgz#f9378384a66cb10d26cea0948c375173b2994a00" - integrity sha512-uTxtdZfgRF7hLuHdZbFX33LB4UulgYWhLiO745Vu2Ne7JRe9OVhqnY98gIWGhVUzriUZhbefc5HIwf1aTE/6sQ== - dependencies: - "@react-native-community/cli-server-api" "12.0.0-alpha.7" - "@react-native-community/cli-tools" "12.0.0-alpha.7" - chalk "^4.1.2" - execa "^5.0.0" - metro "0.77.0" - metro-config "0.77.0" - metro-core "0.77.0" - metro-react-native-babel-transformer "0.77.0" - metro-resolver "0.77.0" - metro-runtime "0.77.0" - readline "^1.3.0" - -"@react-native-community/cli-server-api@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-12.0.0-alpha.7.tgz#cbff9a5f66a51c9414d636a77a413d299dafb83c" - integrity sha512-oK30eJZEdzqRUMitiMaMFzWYVJOF+Tslsl+i35EToSxqoxmSXr4nGKM7isDQvu6dbLsICTnrv5YGK3AszPFP5A== - dependencies: - "@react-native-community/cli-debugger-ui" "12.0.0-alpha.7" - "@react-native-community/cli-tools" "12.0.0-alpha.7" - compression "^1.7.1" - connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" - serve-static "^1.13.1" - ws "^7.5.1" - -"@react-native-community/cli-tools@12.0.0-alpha.7": - version "12.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-12.0.0-alpha.7.tgz#1008f90a20a418b012b80d0a883ae5b2f1d0aa8c" - integrity sha512-Uqt8+cb0EXtZB2LamGI2JOQU4YxN1LD8/2ToU+d4BhdmvlNByRXa/6s0/oe5sBJdCZnrg4FeLkEQObikR+dYew== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - "@react-native-community/eslint-config@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz#35dcc529a274803fc4e0a6b3d6c274551fb91774" @@ -2700,9 +2211,9 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" @@ -3491,42 +3002,6 @@ babel-plugin-module-resolver@^3.2.0: reselect "^3.0.1" resolve "^1.4.0" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" - -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== - -babel-plugin-transform-flow-enums@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz#d1d0cc9bdc799c850ca110d0ddc9f21b9ec3ef25" - integrity sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ== - dependencies: - "@babel/plugin-syntax-flow" "^7.12.1" - babel-preset-current-node-syntax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" @@ -3545,39 +3020,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-fbjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" - integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" - babel-preset-jest@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" @@ -3828,16 +3270,6 @@ browserslist@^4.16.6: node-releases "^2.0.6" update-browserslist-db "^1.0.9" -browserslist@^4.21.10: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - browserslist@^4.21.3, browserslist@^4.21.9: version "4.21.9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" @@ -4046,11 +3478,6 @@ caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001503: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001513.tgz#382fe5fbfb0f7abbaf8c55ca3ac71a0307a752e9" integrity sha512-pnjGJo7SOOjAGytZZ203Em95MRM8Cr6jhCXNF/FAXTpCTRTECnqQWLpiTRqrFtdYcth8hf4WECUpkezuYsMVww== -caniuse-lite@^1.0.30001517: - version "1.0.30001524" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80" - integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA== - capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -4584,13 +4011,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.31.0: - version "3.32.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" - integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== - dependencies: - browserslist "^4.21.10" - core-js-compat@^3.6.2: version "3.6.4" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" @@ -5077,10 +4497,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== +diff-sequences@^25.2.1: + version "25.2.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.1.tgz#fcfe8aa07dd9b0c648396a478dabca8e76c6ab27" + integrity sha512-foe7dXnGlSh3jR1ovJmdv+77VQj98eKCHHwJPbZ2eEf0fHwKbkZicpPxEch9smZ+n2dnF6QFwkOQdLq9hpeJUg== diff-sequences@^26.6.2: version "26.6.2" @@ -5243,11 +4663,6 @@ electron-to-chromium@^1.4.251, electron-to-chromium@^1.4.431: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.453.tgz#0a81fdc1943db202e8724d9f61369a71f0dd51e8" integrity sha512-BU8UtQz6CB3T7RIGhId4BjmjJVXQDujb0+amGL8jpcluFJr6lwspBOvkUbnttfpZCm4zFMHmjrX1QrdPWBBMjQ== -electron-to-chromium@^1.4.477: - version "1.4.503" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz#7bd43927ea9b4198697672d28d8fbd0da016a7a1" - integrity sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA== - elliptic@^6.0.0: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5789,17 +5204,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== +expect@^25.2.4: + version "25.2.4" + resolved "https://registry.yarnpkg.com/expect/-/expect-25.2.4.tgz#b66e0777c861034ebc21730bb34e1839d5d46806" + integrity sha512-hfuPhPds4yOsZtIw4kwAg70r0hqGmpqekgA+VX7pf/3wZ6FY+xIOXZhNsPMMMsspYG/YIsbAiwqsdnD4Ht+bCA== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^25.2.3" ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" + jest-get-type "^25.2.1" + jest-matcher-utils "^25.2.3" + jest-message-util "^25.2.4" + jest-regex-util "^25.2.1" expect@^26.6.2: version "26.6.2" @@ -6478,7 +5893,7 @@ graceful-fs@4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -6643,23 +6058,11 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hermes-estree@0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.14.0.tgz#c663eea1400980802283338a09d0087c448729e7" - integrity sha512-L6M67+0/eSEbt6Ha2XOBFXL++7MR34EOJMgm+j7YCaI4L/jZqrVAg6zYQKzbs1ZCFDLvEQpOgLlapTX4gpFriA== - hermes-estree@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.15.0.tgz#e32f6210ab18c7b705bdcb375f7700f2db15d6ba" integrity sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ== -hermes-parser@0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.14.0.tgz#edb2e7172fce996d2c8bbba250d140b70cc1aaaf" - integrity sha512-pt+8uRiJhVlErY3fiXB3gKhZ72RxM6E1xRMpvfZ5n6Z5TQKQQXKorgRCRzoe02mmvLKBJFP5nPDGv75MWAgCTw== - dependencies: - hermes-estree "0.14.0" - hermes-parser@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.15.0.tgz#f611a297c2a2dbbfbce8af8543242254f604c382" @@ -7152,13 +6555,6 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - is-core-module@^2.5.0, is-core-module@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" @@ -7639,7 +7035,7 @@ jest-config@^26.6.2: jest-get-type "^29.4.3" pretty-format "^29.6.2" -jest-diff@^25.1.0: +jest-diff@^25.1.0, jest-diff@^25.2.3: version "25.2.3" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.2.3.tgz#54d601a0a754ef26e808a8c8dbadd278c215aa3f" integrity sha512-VtZ6LAQtaQpFsmEzps15dQc5ELbJxy4L2DOSo2Ev411TUEtnJPkAMD7JneVypeMJQ1y3hgxN9Ao13n15FAnavg== @@ -7649,16 +7045,6 @@ jest-diff@^25.1.0: jest-get-type "^25.2.1" pretty-format "^25.2.3" -jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" @@ -7712,10 +7098,10 @@ jest-environment-node@^26.6.2: jest-mock "^26.6.2" jest-util "^26.6.2" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== +jest-get-type@^25.2.1: + version "25.2.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.1.tgz#6c83de603c41b1627e6964da2f5454e6aa3c13a6" + integrity sha512-EYjTiqcDTCRJDcSNKbLTwn/LcDPEE7ITk8yRMNAOjEsN6yp+Uu+V1gx4djwnuj/DvWg0YGmqaBqPVGsPxlvE7w== jest-get-type@^26.3.0: version "26.3.0" @@ -7727,6 +7113,25 @@ jest-get-type@^29.4.3: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-haste-map@^25.2.3: + version "25.2.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.2.3.tgz#2649392b5af191f0167a27bfb62e5d96d7eaaade" + integrity sha512-pAP22OHtPr4qgZlJJFks2LLgoQUr4XtM1a+F5UaPIZNiCRnePA0hM3L7aiJ0gzwiNIYwMTfKRwG/S1L28J3A3A== + dependencies: + "@jest/types" "^25.2.3" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.3" + jest-serializer "^25.2.1" + jest-util "^25.2.3" + jest-worker "^25.2.1" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + which "^2.0.2" + optionalDependencies: + fsevents "^2.1.2" + jest-haste-map@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" @@ -7780,15 +7185,15 @@ jest-leak-detector@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== +jest-matcher-utils@^25.2.3: + version "25.2.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.2.3.tgz#59285bd6d6c810debc9caa585ed985e46a3f28fd" + integrity sha512-ZmiXiwQRVM9MoKjGMP5YsGGk2Th5ncyRxfXKz5AKsmU8m43kgNZirckVzaP61MlSa9LKmXbevdYqVp1ZKAw2Rw== dependencies: chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + jest-diff "^25.2.3" + jest-get-type "^25.2.1" + pretty-format "^25.2.3" jest-matcher-utils@^26.6.2: version "26.6.2" @@ -7800,16 +7205,16 @@ jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== +jest-message-util@^25.2.4: + version "25.2.4" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.2.4.tgz#b1441b9c82f5c11fc661303cbf200a2f136a7762" + integrity sha512-9wWMH3Bf+GVTv0GcQLmH/FRr0x0toptKw9TA8U5YFLVXx7Tq9pvcNzTyJrcTJ+wLqNbMPPJlJNft4MnlcrtF5Q== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" + "@jest/test-result" "^25.2.4" + "@jest/types" "^25.2.3" "@types/stack-utils" "^1.0.1" chalk "^3.0.0" - graceful-fs "^4.2.4" micromatch "^4.0.2" slash "^3.0.0" stack-utils "^1.0.1" @@ -7837,31 +7242,21 @@ jest-mock@^26.6.2: "@jest/types" "^26.6.2" "@types/node" "*" -jest-pnp-resolver@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-pnp-resolver@^1.2.2: +jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== +jest-regex-util@^25.2.1: + version "25.2.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.1.tgz#db64b0d15cd3642c93b7b9627801d7c518600584" + integrity sha512-wroFVJw62LdqTdkL508ZLV82FrJJWVJMIuYG7q4Uunl1WAPTf4ftPKrqqfec4SvOIlvRZUdEX2TFpWR356YG/w== jest-regex-util@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-regex-util@^27.0.6: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - jest-resolve-dependencies@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.2.tgz#82b5456bfa9544bb6e376397c8de334d5deba0ce" @@ -7871,20 +7266,17 @@ jest-resolve-dependencies@^26.6.2: jest-regex-util "^26.0.0" jest-snapshot "^26.6.2" -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== +jest-resolve@^25.2.3: + version "25.2.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.2.3.tgz#ababeaf2bb948cb6d2dea8453759116da0fb7842" + integrity sha512-1vZMsvM/DBH258PnpUNSXIgtzpYz+vCVCj9+fcy4akZl4oKbD+9hZSlfe9RIDpU0Fc28ozHQrmwX3EqFRRIHGg== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^25.2.3" browser-resolve "^1.11.3" chalk "^3.0.0" - graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" + resolve "^1.15.1" jest-resolve@^26.6.2: version "26.6.2" @@ -7959,6 +7351,11 @@ jest-runtime@^26.6.2: strip-bom "^4.0.0" yargs "^15.4.1" +jest-serializer@^25.2.1: + version "25.2.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.2.1.tgz#51727a5fc04256f461abe0fa024a022ba165877a" + integrity sha512-fibDi7M5ffx6c/P66IkvR4FKkjG5ldePAK1WlbNoaU4GZmIAkS9Le/frAwRUFEX0KdnisSPWf+b1RC5jU7EYJQ== + jest-serializer@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" @@ -7973,24 +7370,23 @@ jest-snapshot-serializer-raw@^1.1.0: integrity sha512-OL3bXRCnSn7Kur3YTGYj+A3Hwh2eyb5QL5VLQ9OSsPBOva7r3sCB0Jf1rOT/KN3ypzH42hrkDz96lpbiMo+AlQ== jest-snapshot@^25.1.0: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== + version "25.2.4" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.2.4.tgz#08d4517579c864df4280bcc948ceea34327a4ded" + integrity sha512-nIwpW7FZCq5p0AE3Oyqyb6jL0ENJixXzJ5/CD/XRuOqp3gS5OM3O/k+NnTrniCXxPFV4ry6s9HNfiPQBi0wcoA== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" + "@jest/types" "^25.2.3" "@types/prettier" "^1.19.0" chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" + expect "^25.2.4" + jest-diff "^25.2.3" + jest-get-type "^25.2.1" + jest-matcher-utils "^25.2.3" + jest-message-util "^25.2.4" + jest-resolve "^25.2.3" make-dir "^3.0.0" natural-compare "^1.4.0" - pretty-format "^25.5.0" + pretty-format "^25.2.3" semver "^6.3.0" jest-snapshot@^26.6.2: @@ -8015,6 +7411,16 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" +jest-util@^25.2.3: + version "25.2.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.2.3.tgz#0abf95a1d6b96f2de5a3ecd61b36c40a182dc256" + integrity sha512-7tWiMICVSo9lNoObFtqLt9Ezt5exdFlWs5fLe1G4XLY2lEbZc814cw9t4YHScqBkWMfzth8ASHKlYBxiX2rdCw== + dependencies: + "@jest/types" "^25.2.3" + chalk "^3.0.0" + is-ci "^2.0.0" + make-dir "^3.0.0" + jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" @@ -8052,6 +7458,14 @@ jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" +jest-worker@^25.2.1: + version "25.2.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a" + integrity sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -8552,11 +7966,6 @@ lodash.clone@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -8806,15 +8215,6 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-transformer@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.77.0.tgz#5deefff8ae8f1e37cf3a38ba1198a9811c7713bb" - integrity sha512-DO41MiCIDXY7yGeUlQ/4DE/LAvjgmBQYRYzqgqs863CGOkMLA2NxsX4imW2sjrsG7+QJYXn1q5svC+qbnX0IYg== - dependencies: - "@babel/core" "^7.20.0" - hermes-parser "0.14.0" - nullthrows "^1.1.1" - metro-babel-transformer@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.78.0.tgz#7f22dca1186c27908b281264dd31e5cb140de8d0" @@ -8824,24 +8224,11 @@ metro-babel-transformer@0.78.0: hermes-parser "0.15.0" nullthrows "^1.1.1" -metro-cache-key@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.77.0.tgz#ce82ab46a4df012505e9fbf84075bb817ff9070e" - integrity sha512-bnTn5oLlBtiMjWRANuljwU+N4+HSxvYZ+3o1ZG2eWmTrqgdF+jEpgp4Rswq3XdajMjp5mR1wyoFNVhNuGtco5A== - metro-cache-key@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.78.0.tgz#493c8c71a188698fcb909dcbc55be4c4603cc3a8" integrity sha512-2Mp5LQjpZ3yNdUSpIu6kB9cLUHDve4riHZ7i5n/MikHkpqVCOdo0qGsHujU9v8Fc1dWUOdSC0ufS9j03KpLh4Q== -metro-cache@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.77.0.tgz#e126e1708098c704f07e932cc47ae30028a75ec3" - integrity sha512-IZfi9g1/lkyFx5Y7DdDjb5kU+4w2u5rO5qUpcCioVdtZBMfON5D4O1fecHNsGKIHcAr7sWo6hWfahbvZhRM+Wg== - dependencies: - metro-core "0.77.0" - rimraf "^3.0.2" - metro-cache@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.78.0.tgz#5abb129e62011ba91e4e3aa8a2ebab2d7c569b4a" @@ -8850,19 +8237,6 @@ metro-cache@0.78.0: metro-core "0.78.0" rimraf "^3.0.2" -metro-config@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.77.0.tgz#dadcafd6a95b1dc0de2e6029e100e59c53af777d" - integrity sha512-Ac5TjRC2ULLGObuWJYAzpgJFjAx1ytCcV0GyA56BWo0MEaugW/90Rj6DX/eWywIO8NySnEhB0XalPCTcqOEPvw== - dependencies: - connect "^3.6.5" - cosmiconfig "^5.0.5" - jest-validate "^29.2.1" - metro "0.77.0" - metro-cache "0.77.0" - metro-core "0.77.0" - metro-runtime "0.77.0" - metro-config@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.78.0.tgz#0a83cb9cd2e4913394272ee8a83d04ee14d833d8" @@ -8876,14 +8250,6 @@ metro-config@0.78.0: metro-core "0.78.0" metro-runtime "0.78.0" -metro-core@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.77.0.tgz#ad496d3ac50332f1c8be16b8c78847bbc61c896c" - integrity sha512-352kpZvPAQUEiUn6nh/bq/eO1jRkZyVoRAy3UtIN+K5B3UQoAFHjZgxvJxXtYRDIgOpC1Nx/oTPI0I/LREq3mQ== - dependencies: - lodash.throttle "^4.1.1" - metro-resolver "0.77.0" - metro-core@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.78.0.tgz#d14afc68ba270678a304d9f98130466307e5703c" @@ -8892,26 +8258,6 @@ metro-core@0.78.0: lodash.throttle "^4.1.1" metro-resolver "0.78.0" -metro-file-map@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.77.0.tgz#f866292a70e9c463d2274cbfc415ef46aad65ef2" - integrity sha512-piBtfx1WBtCjNKAnXsHNlwvn8tKC+lcM+zC0A/x/YHuarA/MTS5fCtmgwLjmZZiCe60KOVYN4+5lkpRToH4drQ== - dependencies: - anymatch "^3.0.3" - debug "^2.2.0" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - invariant "^2.2.4" - jest-regex-util "^27.0.6" - jest-util "^27.2.0" - jest-worker "^27.2.0" - micromatch "^4.0.4" - node-abort-controller "^3.1.1" - nullthrows "^1.1.1" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - metro-file-map@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.78.0.tgz#d2e84f5bfa7595695c83429088621d5a2fe61919" @@ -8931,29 +8277,11 @@ metro-file-map@0.78.0: optionalDependencies: fsevents "^2.3.2" -metro-inspector-proxy@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.77.0.tgz#ff8f8acf690ff6f55acaa0422bae0abfd886f3e0" - integrity sha512-SQ9YzdFewAQODTwdPWgDtXKufCSyHBeHipFHy/ashuXuIvT8wdVF8UiDd4VcFzf7vTk+Xv99G39DydZvTtNv2w== - dependencies: - connect "^3.6.5" - debug "^2.2.0" - node-fetch "^2.2.0" - ws "^7.5.1" - yargs "^17.6.2" - metro-memory-fs@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.78.0.tgz#e39f9e7bcf4b23c8287347e3c5c1b581e069c6a8" integrity sha512-TXaP2wFW6zOZAnc1kTkvlgujdMe9cW0g0S4aC+XyfhkhAeA9+6qGD2KpXf5ngz2m8b0KgCpHpDgMJuYFl24mAQ== -metro-minify-terser@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.77.0.tgz#2e6e7f5540f1d83978da36ba124c803c3cd9547b" - integrity sha512-StiZjb57WYjhLyaW7PJ0xnNAWj9RZFYZWyL3MPUChpXKZXVkjurDDgiAXN9zanM/n5eachKlmAdsSpm5dVqC8w== - dependencies: - terser "^5.15.0" - metro-minify-terser@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.78.0.tgz#3df1afe87d8033c43f161d46da2a2e03bbe1490a" @@ -8961,80 +8289,11 @@ metro-minify-terser@0.78.0: dependencies: terser "^5.15.0" -metro-react-native-babel-preset@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz#47457eca8e36b77156afbe790247a70dbb40faaa" - integrity sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.4.0" - -metro-react-native-babel-transformer@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.77.0.tgz#34c6f6670a396074e24f9ad152d185551a88a3e6" - integrity sha512-uCV1Kt4ebY9/hT7ayDGMDgIsrbyxiBHNP+q0LGxscOx3D/QODv1z+WhfC4Hy0/1wDCGV3l0EQrfLqM+7qpjsWA== - dependencies: - "@babel/core" "^7.20.0" - babel-preset-fbjs "^3.4.0" - hermes-parser "0.14.0" - metro-react-native-babel-preset "0.77.0" - nullthrows "^1.1.1" - -metro-resolver@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.77.0.tgz#765cd6cbffa6fb9589807b30c7922720d0cf7291" - integrity sha512-h3rvDWD25cZ/5Iin6mPjSQQe8KtWPAHZnA6AnAj2yadzltkyytPjmHal6JhTPsVHWMKorkC03MUpEgGusuvTww== - metro-resolver@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.78.0.tgz#36edd0ababe1e34dbcecc32ff7da7356676816e9" integrity sha512-V8ajy9UfP4d2OIsD6vMr4ZWvA1xAORPgDBq1ir06hALUyZGLj/hOsxAUCSSjAN1XL32Nw9OZrLYDMZdw1exaow== -metro-runtime@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.77.0.tgz#ccb3bfbce06acd5b8d0b611d0f55972a0ca28039" - integrity sha512-A4MCtMbrB7RoWDaIJSm32d7TcKLBHrjG/3mXx4pDnFgfmIQcKb/GNXcFJtE2tEjQxWJvZHhQYZh1l/49wQMDcA== - dependencies: - "@babel/runtime" "^7.0.0" - react-refresh "^0.4.0" - metro-runtime@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.78.0.tgz#7c8f28724f91498fb9c73447212a8b478b486b7a" @@ -9043,20 +8302,6 @@ metro-runtime@0.78.0: "@babel/runtime" "^7.0.0" react-refresh "^0.4.0" -metro-source-map@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.77.0.tgz#907df460e914cf3577151797eed998d275f462ec" - integrity sha512-gNrWkgV1zma2/NZVCxCvN/y9+fGwwwdiOzwn3aRrjxR88njJ2KQM0wnY86Q7i+1XEpf0BRzutMGYLLZCX9vTPQ== - dependencies: - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" - invariant "^2.2.4" - metro-symbolicate "0.77.0" - nullthrows "^1.1.1" - ob1 "0.77.0" - source-map "^0.5.6" - vlq "^1.0.0" - metro-source-map@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.78.0.tgz#1e96996e15d555180434a96dc28158e1943cd5bd" @@ -9071,18 +8316,6 @@ metro-source-map@0.78.0: source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.77.0.tgz#aee584fcd584fbaf301541d257734c08455f3d40" - integrity sha512-L7KmrqADzhSS9PcUwF7KmbXemBb1rBW0ulw8eG2D+dLP5HtHRVf8WMHZswB2V0Xi0GnWCg4HMp8gSyIMs2wMGg== - dependencies: - invariant "^2.2.4" - metro-source-map "0.77.0" - nullthrows "^1.1.1" - source-map "^0.5.6" - through2 "^2.0.1" - vlq "^1.0.0" - metro-symbolicate@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.78.0.tgz#0f12a22511ad6de97b7abdfcfda67eadd8504b83" @@ -9095,17 +8328,6 @@ metro-symbolicate@0.78.0: through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.77.0.tgz#3608de5cb18ae72f66926e4ee092ded0f3e5f5fb" - integrity sha512-QcVpA+YUAqT1vNyMAMDehhTBcPTSvETRfrlhvfefVXpA2Pp90huzKmLxq2uNncm7o0Oy+CeKUq3awtv8ds1KTQ== - dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" - nullthrows "^1.1.1" - metro-transform-plugins@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.78.0.tgz#306beaef06689a28123a6f1adc5662860a8ae6a8" @@ -9117,24 +8339,6 @@ metro-transform-plugins@0.78.0: "@babel/traverse" "^7.20.0" nullthrows "^1.1.1" -metro-transform-worker@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.77.0.tgz#0c71429661f389985bff29a821be76ce3a15aa5f" - integrity sha512-Ub2FawmG1eyq+MPLYp8sD7/PuWPs7MJxa3/qbI1VWTFR6M3NomGL4Ogin7ffJPb0DAi+GTfevp8azuyZcsYr9A== - dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/types" "^7.20.0" - babel-preset-fbjs "^3.4.0" - metro "0.77.0" - metro-babel-transformer "0.77.0" - metro-cache "0.77.0" - metro-cache-key "0.77.0" - metro-source-map "0.77.0" - metro-transform-plugins "0.77.0" - nullthrows "^1.1.1" - metro-transform-worker@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.78.0.tgz#f505b36b94fa67facbbbec0d396a82a7ec1d6a73" @@ -9152,58 +8356,6 @@ metro-transform-worker@0.78.0: metro-transform-plugins "0.78.0" nullthrows "^1.1.1" -metro@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.77.0.tgz#35be9364d5da7a244d430eb12304bdbb6dae7656" - integrity sha512-a/OMhKvVN4cH32mt9pCJw7LRP54bzT/QgqVGJxHX04m8JUnNR+DWLw4scN8p2Q5v0Z7DZIpkExGPlha7TBNcHw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" - accepts "^1.3.7" - async "^3.2.2" - chalk "^4.0.0" - ci-info "^2.0.0" - connect "^3.6.5" - debug "^2.2.0" - denodeify "^1.2.1" - error-stack-parser "^2.0.6" - graceful-fs "^4.2.4" - hermes-parser "0.14.0" - image-size "^1.0.2" - invariant "^2.2.4" - jest-worker "^27.2.0" - jsc-safe-url "^0.2.2" - lodash.throttle "^4.1.1" - metro-babel-transformer "0.77.0" - metro-cache "0.77.0" - metro-cache-key "0.77.0" - metro-config "0.77.0" - metro-core "0.77.0" - metro-file-map "0.77.0" - metro-inspector-proxy "0.77.0" - metro-minify-terser "0.77.0" - metro-resolver "0.77.0" - metro-runtime "0.77.0" - metro-source-map "0.77.0" - metro-symbolicate "0.77.0" - metro-transform-plugins "0.77.0" - metro-transform-worker "0.77.0" - mime-types "^2.1.27" - node-fetch "^2.2.0" - nullthrows "^1.1.1" - rimraf "^3.0.2" - serialize-error "^2.1.0" - source-map "^0.5.6" - strip-ansi "^6.0.0" - throat "^5.0.0" - ws "^7.5.1" - yargs "^17.6.2" - metro@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro/-/metro-0.78.0.tgz#e927b9fab79b172f4439239691a6d21f5b1338fe" @@ -9419,11 +8571,11 @@ minipass-collect@^1.0.2: minipass "^3.0.0" minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== dependencies: - minipass "^7.0.3" + minipass "^5.0.0" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -9713,7 +8865,7 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^2.0.12, node-releases@^2.0.13, node-releases@^2.0.6: +node-releases@^2.0.12, node-releases@^2.0.6: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== @@ -9995,11 +9147,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.77.0.tgz#42883c87af8c3aad499238c6c0c8fb979178107d" - integrity sha512-yWpX6DzWmcZ7DO7SP+uoDkdKXVhSY5wPCkZXln751gOZQCit+BJpMa4Rj1AL5jjByXLqNzieK3jX+mWOzbS23g== - ob1@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.78.0.tgz#de39d59417c355e18e7c31fe83a35cb002e02b2e" @@ -11056,12 +10203,12 @@ prettier@^2.0.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== -pretty-format@^25.1.0, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== +pretty-format@^25.1.0, pretty-format@^25.2.3: + version "25.2.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.2.3.tgz#ba6e9603a0d80fa2e470b1fed55de1f9bfd81421" + integrity sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^25.2.3" ansi-regex "^5.0.0" ansi-styles "^4.0.0" react-is "^16.12.0" @@ -11131,7 +10278,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prompts@^2.4.0, prompts@^2.4.2: +prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -11274,12 +10421,7 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-is@^16.12.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^16.8.1: +react-is@^16.12.0, react-is@^16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== @@ -11517,7 +10659,7 @@ regexpu-core@^4.7.0: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -regexpu-core@^5.2.1, regexpu-core@^5.3.1: +regexpu-core@^5.2.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== @@ -11667,9 +10809,9 @@ resolve-url@^0.2.1: resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.4.0: +resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.4.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -11678,15 +10820,6 @@ resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.14.2: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^1.8.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -11880,11 +11013,6 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - semver@^7.0.0, semver@^7.3.7, semver@^7.3.8: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -12293,11 +11421,9 @@ stable@^0.1.8: integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== stack-utils@^2.0.2: version "2.0.2" From 2cee7d9fb4e75f454b881ec1cea3755f33313f79 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:53 +0200 Subject: [PATCH 12/23] add tests for resolving transitive deps --- packages/cli-tools/package.json | 1 - .../__tests__/resolveTransitiveDeps.test.ts | 267 ++++++++++++++++++ .../cli-tools/src/resolveTransitiveDeps.ts | 50 ++-- 3 files changed, 290 insertions(+), 28 deletions(-) create mode 100644 packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts diff --git a/packages/cli-tools/package.json b/packages/cli-tools/package.json index 38b7936fc..17fc0ca3b 100644 --- a/packages/cli-tools/package.json +++ b/packages/cli-tools/package.json @@ -7,7 +7,6 @@ "access": "public" }, "dependencies": { - "@react-native-community/cli-doctor": "12.0.0-alpha.11", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", diff --git a/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts b/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts new file mode 100644 index 000000000..95cb9748e --- /dev/null +++ b/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts @@ -0,0 +1,267 @@ +import path from 'path'; +import prompts from 'prompts'; +import {cleanup, getTempDirectory, writeFiles} from '../../../../jest/helpers'; +import { + DependencyData, + calculateWorkingVersion, + collectDependencies, + filterInstalledPeers, + filterNativeDependencies, + findDependencyPath, + getMissingPeerDepsForYarn, + resolveTransitiveDeps, +} from '../resolveTransitiveDeps'; +import logger from '../logger'; + +jest.mock('execa', () => { + return {sync: jest.fn()}; +}); + +jest.mock('prompts', () => ({prompt: jest.fn()})); + +jest.mock('../logger', () => ({ + isVerbose: jest.fn(), + warn: jest.fn(), + log: jest.fn(), +})); + +const mockFetchJson = jest.fn(); + +jest.mock('npm-registry-fetch', () => ({ + json: mockFetchJson, +})); + +const rootPackageJson = { + name: 'App', + version: '1.0.0', + dependencies: { + 'react-native': '0.72.4', + '@react-navigation/stack': '^6.3.17', + }, +}; + +const stackPackageJson = { + name: '@react-navigation/stack', + version: '6.3.17', + dependencies: { + '@react-navigation/elements': '^1.3.18', + 'react-native-gesture-handler': '^1.10.3', + }, + peerDependencies: { + react: '*', + 'react-native': '*', + 'react-native-gesture-handler': '>= 1.0.0', + }, +}; + +const elementsPackageJson = { + name: '@react-navigation/elements', + version: '1.3.18', + peerDependencies: { + react: '*', + 'react-native': '*', + 'react-native-safe-area-view': '*', + }, +}; + +const gestureHandlerPackageJson = { + name: 'react-native-gesture-handler', + version: '1.10.3', +}; + +const DIR = getTempDirectory('root_test'); + +const createTempFiles = (rest?: Record) => { + writeFiles(DIR, { + 'package.json': JSON.stringify(rootPackageJson), + 'node_modules/@react-navigation/stack/package.json': JSON.stringify( + stackPackageJson, + ), + 'node_modules/@react-navigation/elements/package.json': JSON.stringify( + elementsPackageJson, + ), + 'node_modules/react-native-gesture-handler/package.json': JSON.stringify( + gestureHandlerPackageJson, + ), + 'node_modules/react-native-gesture-handler/ios/Podfile': '', + ...rest, + }); +}; + +beforeEach(async () => { + await cleanup(DIR); + jest.resetAllMocks(); +}); + +describe('calculateWorkingVersion', () => { + it('should return the highest matching version for all ranges', () => { + const workingVersion = calculateWorkingVersion( + ['*', '>=2.2.0', '>=2.0.0'], + ['1.9.0', '2.0.0', '2.2.0', '3.0.0'], + ); + + expect(workingVersion).toBe('3.0.0'); + }); + + it('should return null if no version matches all ranges', () => { + const workingVersion = calculateWorkingVersion( + ['*', '>=2.2.0', '^1.0.0-alpha'], + ['1.9.0', '2.0.0', '2.1.0'], + ); + + expect(workingVersion).toBe(null); + }); +}); + +describe('findDependencyPath', () => { + it('should return the path to the dependency if it is in top-level node_modules', () => { + writeFiles(DIR, { + 'package.json': JSON.stringify(rootPackageJson), + 'node_modules/@react-navigation/stack/package.json': JSON.stringify( + stackPackageJson, + ), + }); + + const dependencyPath = findDependencyPath( + '@react-navigation/stack', + DIR, + path.join(DIR, 'node_modules', '@react-navigation/stack'), + ); + + expect(dependencyPath).toBe( + path.join(DIR, 'node_modules', '@react-navigation/stack'), + ); + }); + + it('should return the path to the nested node_modules if package is installed here', () => { + writeFiles(DIR, { + 'package.json': JSON.stringify(rootPackageJson), + 'node_modules/@react-navigation/stack/node_modules/react-native-gesture-handler/package.json': + '{}', + }); + + const dependencyPath = findDependencyPath( + 'react-native-gesture-handler', + DIR, + path.join(DIR, 'node_modules', '@react-navigation/stack'), + ); + + expect(dependencyPath).toBe( + path.join( + DIR, + 'node_modules', + '@react-navigation/stack', + 'node_modules', + 'react-native-gesture-handler', + ), + ); + }); +}); + +describe('collectDependencies', () => { + beforeEach(() => { + createTempFiles(); + }); + + it('should recursively get all dependencies', () => { + const dependencies = collectDependencies(DIR); + + expect(dependencies.size).toBe(4); + }); + + it('should collect peer dependencies of a dependency', () => { + const dependencies = collectDependencies(DIR); + const stackDependency = dependencies.get( + '@react-navigation/stack', + ) as DependencyData; + const peerNames = Object.keys(stackDependency.peerDependencies); + + expect(peerNames).toContain('react'); + expect(peerNames).toContain('react-native'); + expect(peerNames).toContain('react-native-gesture-handler'); + }); +}); + +describe('filterNativeDependencies', () => { + it('should return only dependencies with peer dependencies containing native code', () => { + createTempFiles({ + 'node_modules/react-native-safe-area-view/ios/Podfile': '{}', + }); + const dependencies = collectDependencies(DIR); + const filtered = filterNativeDependencies(DIR, dependencies); + expect(filtered.keys()).toContain('@react-navigation/stack'); + expect(filtered.keys()).toContain('@react-navigation/elements'); + }); +}); + +describe('filterInstalledPeers', () => { + it('should return only dependencies with peer dependencies that are installed', () => { + createTempFiles(); + const dependencies = collectDependencies(DIR); + const libsWithNativeDeps = filterNativeDependencies(DIR, dependencies); + const nonInstalledPeers = filterInstalledPeers(DIR, libsWithNativeDeps); + + expect(Object.keys(nonInstalledPeers)).toContain('@react-navigation/stack'); + expect(Object.keys(nonInstalledPeers['@react-navigation/stack'])).toContain( + 'react-native-gesture-handler', + ); + }); +}); + +describe('getMissingPeerDepsForYarn', () => { + it('should return an array of peer dependencies to install', () => { + createTempFiles(); + + const dependencies = getMissingPeerDepsForYarn(DIR); + expect(dependencies.values()).toContain('react'); + expect(dependencies.values()).toContain('react-native-gesture-handler'); + expect(dependencies.values()).toContain('react-native-safe-area-view'); + }); +}); + +describe('resolveTransitiveDeps', () => { + it('should display list of missing peer dependencies if there are any', async () => { + createTempFiles(); + prompts.prompt.mockReturnValue({}); + await resolveTransitiveDeps(DIR); + expect(logger.warn).toHaveBeenCalledWith( + 'Looks like you are missing some of the peer dependencies of your libraries:\n', + ); + }); + + it('should not display list if there are no missing peer dependencies', async () => { + writeFiles(DIR, { + 'package.json': JSON.stringify(rootPackageJson), + }); + + await resolveTransitiveDeps(DIR); + expect(logger.warn).not.toHaveBeenCalled(); + }); + + it('should prompt user to install missing peer dependencies', async () => { + createTempFiles(); + prompts.prompt.mockReturnValue({}); + await resolveTransitiveDeps(DIR); + expect(prompts.prompt).toHaveBeenCalledWith({ + type: 'confirm', + name: 'install', + message: + 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', + }); + }); + + it('should install missing peer dependencies if user confirms', async () => { + createTempFiles(); + prompts.prompt.mockReturnValue({install: true}); + mockFetchJson.mockReturnValueOnce({ + versions: { + '2.0.0': {}, + '2.1.0': {}, + }, + }); + + const resolveDeps = await resolveTransitiveDeps(DIR); + + expect(resolveDeps).toBe(true); + }); +}); diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index 5d2b1c045..be877d939 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -10,7 +10,7 @@ import generateFileHash from './generateFileHash'; import {getLoader} from './loader'; import logger from './logger'; -interface DependencyData { +export interface DependencyData { path: string; version: string; peerDependencies: {[key: string]: string}; @@ -25,16 +25,18 @@ function writeFile(filePath: string, content: string) { fs.writeFileSync(filePath, content, {encoding: 'utf8'}); } -async function fetchAvailableVersions(packageName: string): Promise { +export async function fetchAvailableVersions( + packageName: string, +): Promise { const response = await fetch.json(`/${packageName}`); return Object.keys(response.versions || {}); } -async function calculateWorkingVersion( +export function calculateWorkingVersion( ranges: string[], availableVersions: string[], -): Promise { +): string | null { const sortedVersions = availableVersions .filter((version) => ranges.every((range) => semver.satisfies(version, range)), @@ -44,7 +46,7 @@ async function calculateWorkingVersion( return sortedVersions.length > 0 ? sortedVersions[0] : null; } -function findDependencyPath( +export function findDependencyPath( dependencyName: string, rootPath: string, parentPath: string, @@ -62,7 +64,7 @@ function findDependencyPath( return dependencyPath; } -function collectDependencies(root: string): Map { +export function collectDependencies(root: string): Map { const dependencies = new Map(); const checkDependency = (dependencyPath: string) => { @@ -117,7 +119,7 @@ function collectDependencies(root: string): Map { return dependencies; } -function filterNativeDependencies( +export function filterNativeDependencies( root: string, dependencies: Map, ) { @@ -149,7 +151,7 @@ function filterNativeDependencies( return depsWithNativePeers; } -function filterInstalledPeers( +export function filterInstalledPeers( root: string, peers: Map>, ) { @@ -174,7 +176,7 @@ function filterInstalledPeers( return data; } -function findPeerDepsToInstall( +export function findPeerDepsToInstall( root: string, dependencies: Map, ) { @@ -196,7 +198,7 @@ function findPeerDepsToInstall( return peerDependencies; } -async function getMissingPeerDepsForYarn(root: string) { +export function getMissingPeerDepsForYarn(root: string) { const dependencies = collectDependencies(root); const depsToInstall = findPeerDepsToInstall(root, dependencies); @@ -204,8 +206,8 @@ async function getMissingPeerDepsForYarn(root: string) { } // install peer deps with yarn without making any changes to package.json and yarn.lock -async function yarnSilentInstallPeerDeps(root: string) { - const dependenciesToInstall = await getMissingPeerDepsForYarn(root); +export function yarnSilentInstallPeerDeps(root: string) { + const dependenciesToInstall = getMissingPeerDepsForYarn(root); const packageJsonPath = path.join(root, 'package.json'); const lockfilePath = path.join(root, 'yarn.lock'); @@ -226,7 +228,7 @@ async function yarnSilentInstallPeerDeps(root: string) { logger.error('yarn.lock is missing'); return; } - const loader = getLoader({text: 'Verifying dependencies...'}); + const loader = getLoader({text: 'Looking for peer dependencies...'}); loader.start(); try { @@ -242,7 +244,7 @@ async function yarnSilentInstallPeerDeps(root: string) { } } -async function findPeerDepsForAutolinking(root: string) { +function findPeerDepsForAutolinking(root: string) { const deps = collectDependencies(root); const nonEmptyPeers = filterNativeDependencies(root, deps); const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); @@ -250,7 +252,7 @@ async function findPeerDepsForAutolinking(root: string) { return nonInstalledPeers; } -async function promptForMissingPeerDependencies( +export async function promptForMissingPeerDependencies( dependencies: Record>, ): Promise { logger.warn( @@ -277,7 +279,6 @@ async function promptForMissingPeerDependencies( message: 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', }); - return install; } @@ -302,10 +303,7 @@ async function getPackagesVersion( for (const packageName in packageToRanges) { const ranges = packageToRanges[packageName]; const availableVersions = await fetchAvailableVersions(packageName); - const workingVersion = await calculateWorkingVersion( - ranges, - availableVersions, - ); + const workingVersion = calculateWorkingVersion(ranges, availableVersions); if (workingVersion !== null) { workingVersions[packageName] = workingVersion; @@ -349,16 +347,13 @@ function installMissingPackages( } } -async function resolveTransitiveDeps() { - const root = process.cwd(); +export async function resolveTransitiveDeps(root: string) { const isYarn = isUsingYarn(root); - if (isYarn) { - await yarnSilentInstallPeerDeps(root); + yarnSilentInstallPeerDeps(root); } - const missingPeerDependencies = await findPeerDepsForAutolinking(root); - + const missingPeerDependencies = findPeerDepsForAutolinking(root); if (Object.keys(missingPeerDependencies).length > 0) { const installDeps = await promptForMissingPeerDependencies( missingPeerDependencies, @@ -393,9 +388,10 @@ async function resolvePodsInstallation() { } export default async function checkTransitiveDependencies() { + const root = process.cwd(); const packageJsonPath = path.join(process.cwd(), 'package.json'); const preInstallHash = generateFileHash(packageJsonPath); - const areTransitiveDepsInstalled = await resolveTransitiveDeps(); + const areTransitiveDepsInstalled = await resolveTransitiveDeps(root); const postInstallHash = generateFileHash(packageJsonPath); if ( From a56b80a1e9c7e45a69bb863ca46004b6a45a7623 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:53 +0200 Subject: [PATCH 13/23] force add cli-doctor --- packages/cli-tools/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli-tools/package.json b/packages/cli-tools/package.json index 17fc0ca3b..38b7936fc 100644 --- a/packages/cli-tools/package.json +++ b/packages/cli-tools/package.json @@ -7,6 +7,7 @@ "access": "public" }, "dependencies": { + "@react-native-community/cli-doctor": "12.0.0-alpha.11", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", From f81b0bccf46bf5d6e8f1f0f6efb00f075b65c5d6 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:54 +0200 Subject: [PATCH 14/23] fix circular reference --- packages/cli-tools/package.json | 1 - .../cli-tools/src/resolveTransitiveDeps.ts | 27 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/cli-tools/package.json b/packages/cli-tools/package.json index 38b7936fc..17fc0ca3b 100644 --- a/packages/cli-tools/package.json +++ b/packages/cli-tools/package.json @@ -7,7 +7,6 @@ "access": "public" }, "dependencies": { - "@react-native-community/cli-doctor": "12.0.0-alpha.11", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "find-up": "^5.0.0", diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index be877d939..daa2a0516 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -1,4 +1,3 @@ -import {installPods} from '@react-native-community/cli-doctor'; import fs from 'fs-extra'; import path from 'path'; import * as fetch from 'npm-registry-fetch'; @@ -9,6 +8,7 @@ import semver from 'semver'; import generateFileHash from './generateFileHash'; import {getLoader} from './loader'; import logger from './logger'; +import {CLIError} from './errors'; export interface DependencyData { path: string; @@ -21,6 +21,26 @@ function isUsingYarn(root: string) { return fs.existsSync(path.join(root, 'yarn.lock')); } +async function podInstall() { + process.chdir('ios'); + const loader = getLoader(); + try { + loader.start('Installing pods...'); + await execa('bundle', ['exec', 'pod', 'install']); + loader.succeed(); + } catch (error) { + const stderr = (error as any).stderr || (error as any).stdout; + loader.fail(); + logger.error(stderr); + + throw new CLIError( + 'Could not install pods. Try running pod installation manually.', + ); + } finally { + process.chdir('..'); + } +} + function writeFile(filePath: string, content: string) { fs.writeFileSync(filePath, content, {encoding: 'utf8'}); } @@ -380,10 +400,7 @@ async function resolvePodsInstallation() { }); if (install) { - const loader = getLoader({text: 'Installing pods...'}); - loader.start(); - await installPods(loader); - loader.succeed(); + await podInstall(); } } From e5e05b11a3fe8eb18956a50e9a5be06f2235d353 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:54 +0200 Subject: [PATCH 15/23] add new flag to README --- packages/cli-platform-android/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/cli-platform-android/README.md b/packages/cli-platform-android/README.md index a6148000e..737de5986 100644 --- a/packages/cli-platform-android/README.md +++ b/packages/cli-platform-android/README.md @@ -73,6 +73,9 @@ Build native libraries only for the current device architecture for debug builds List all available Android devices and simulators and let you choose one to run the app. +#### `--dependency-check` +Check if there are any transitive dependencies containing native code that are not declared as a direct dependency in your package.json. If any found, prompts if you want to install and autolink them before running an app. + ### `build-android` Usage: @@ -108,6 +111,9 @@ Installs passed binary instead of building a fresh one. This command is not comp Id of the User Profile you want to install the app on. +#### `--dependency-check` +Check if there are any transitive dependencies containing native code that are not declared as a direct dependency in your package.json. If any found, prompts if you want to install and autolink them before building an app. + ### `log-android` Usage: From 0a46e47122a6c5108afc763453af8b36e2601312 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:54 +0200 Subject: [PATCH 16/23] add transitive deps check to buildAndroid --- .../src/commands/buildAndroid/index.ts | 5 + yarn.lock | 238 +----------------- 2 files changed, 6 insertions(+), 237 deletions(-) diff --git a/packages/cli-platform-android/src/commands/buildAndroid/index.ts b/packages/cli-platform-android/src/commands/buildAndroid/index.ts index 5cfd8924e..072e48a29 100644 --- a/packages/cli-platform-android/src/commands/buildAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/buildAndroid/index.ts @@ -1,5 +1,6 @@ import { CLIError, + checkTransitiveDependencies, logger, printRunDoctorTip, } from '@react-native-community/cli-tools'; @@ -35,6 +36,10 @@ async function buildAndroid( let {tasks} = args; + if (args.dependencyCheck) { + await checkTransitiveDependencies(); + } + if (args.interactive) { const selectedTask = await promptForTaskSelection( 'build', diff --git a/yarn.lock b/yarn.lock index 63f90ed66..42cdd7ad0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -119,17 +119,6 @@ browserslist "^4.21.3" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52" - integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-validator-option" "^7.22.5" - "@nicolo-ribaudo/semver-v6" "^6.3.3" - browserslist "^4.21.9" - lru-cache "^5.1.1" - "@babel/helper-compilation-targets@^7.8.7": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" @@ -270,20 +259,6 @@ "@babel/traverse" "^7.20.1" "@babel/types" "^7.20.2" -"@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@babel/helper-optimise-call-expression@^7.18.6", "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -3270,7 +3245,7 @@ browserslist@^4.16.6: node-releases "^2.0.6" update-browserslist-db "^1.0.9" -browserslist@^4.21.3, browserslist@^4.21.9: +browserslist@^4.21.3: version "4.21.9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== @@ -6058,18 +6033,6 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hermes-estree@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.15.0.tgz#e32f6210ab18c7b705bdcb375f7700f2db15d6ba" - integrity sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ== - -hermes-parser@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.15.0.tgz#f611a297c2a2dbbfbce8af8543242254f604c382" - integrity sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q== - dependencies: - hermes-estree "0.15.0" - hermes-profile-transformer@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" @@ -8047,13 +8010,6 @@ lru-cache@^10.0.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -8215,198 +8171,11 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-transformer@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.78.0.tgz#7f22dca1186c27908b281264dd31e5cb140de8d0" - integrity sha512-SwzvGuMXVqtwQjbuR0RKBKRCNwnQsiA7TG1X+VXkeF/UhbWT4V4fqE76SKWWFsNAv1WEJvsMQcUeLggiecehqg== - dependencies: - "@babel/core" "^7.20.0" - hermes-parser "0.15.0" - nullthrows "^1.1.1" - -metro-cache-key@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.78.0.tgz#493c8c71a188698fcb909dcbc55be4c4603cc3a8" - integrity sha512-2Mp5LQjpZ3yNdUSpIu6kB9cLUHDve4riHZ7i5n/MikHkpqVCOdo0qGsHujU9v8Fc1dWUOdSC0ufS9j03KpLh4Q== - -metro-cache@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.78.0.tgz#5abb129e62011ba91e4e3aa8a2ebab2d7c569b4a" - integrity sha512-kVub3O55oG3k875uDxwr53GuHvqrXc+vyHWaX42wa2AJrCETBVb1ybVTu4mfL/WXLMdn13ZusulOpY7lxVcZjQ== - dependencies: - metro-core "0.78.0" - rimraf "^3.0.2" - -metro-config@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.78.0.tgz#0a83cb9cd2e4913394272ee8a83d04ee14d833d8" - integrity sha512-v8P0WrtR/pe8xTyMEPhe+LBWoPivrJJzPlc+2iU9ZZhadhZH5JsBmmHXOobyZnKu2OWRFku6VpCiU2+Tg55F5g== - dependencies: - connect "^3.6.5" - cosmiconfig "^5.0.5" - jest-validate "^29.2.1" - metro "0.78.0" - metro-cache "0.78.0" - metro-core "0.78.0" - metro-runtime "0.78.0" - -metro-core@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.78.0.tgz#d14afc68ba270678a304d9f98130466307e5703c" - integrity sha512-pD9yfRdCESHmWs1FPuoEyBmIXNYMaAMV5L51zeR6ugHRRBUYyLjdrJtTEnxL2j7rTidkQ6jzYp3B091kGEptZw== - dependencies: - lodash.throttle "^4.1.1" - metro-resolver "0.78.0" - -metro-file-map@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.78.0.tgz#d2e84f5bfa7595695c83429088621d5a2fe61919" - integrity sha512-/RBoGID+sBFMEgDqcZg/ppehD+k8T7z83kHQZeIyoYHomiSe+gpWljNl6vLiRNJpeRNKiSk9EPZnhZ+knQsaMQ== - dependencies: - anymatch "^3.0.3" - debug "^2.2.0" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - invariant "^2.2.4" - jest-util "^27.2.0" - jest-worker "^27.2.0" - micromatch "^4.0.4" - node-abort-controller "^3.1.1" - nullthrows "^1.1.1" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - metro-memory-fs@0.78.0: version "0.78.0" resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.78.0.tgz#e39f9e7bcf4b23c8287347e3c5c1b581e069c6a8" integrity sha512-TXaP2wFW6zOZAnc1kTkvlgujdMe9cW0g0S4aC+XyfhkhAeA9+6qGD2KpXf5ngz2m8b0KgCpHpDgMJuYFl24mAQ== -metro-minify-terser@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.78.0.tgz#3df1afe87d8033c43f161d46da2a2e03bbe1490a" - integrity sha512-IELdVJFIX0XkoFKXtWq5N02z32mclsbDb1SxJVYQYl1Qybm3fOih83teNvgPl0ezEtTVEAVdHeAwKiOGanjPZQ== - dependencies: - terser "^5.15.0" - -metro-resolver@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.78.0.tgz#36edd0ababe1e34dbcecc32ff7da7356676816e9" - integrity sha512-V8ajy9UfP4d2OIsD6vMr4ZWvA1xAORPgDBq1ir06hALUyZGLj/hOsxAUCSSjAN1XL32Nw9OZrLYDMZdw1exaow== - -metro-runtime@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.78.0.tgz#7c8f28724f91498fb9c73447212a8b478b486b7a" - integrity sha512-4AwNpoyiWtQQWL2hyEXpHrcSSK65mcBRk2v25NN30R/8P7P5yHXM2JVrcd6/LefVJOzgDQcQkzNPU7GyBqcm8A== - dependencies: - "@babel/runtime" "^7.0.0" - react-refresh "^0.4.0" - -metro-source-map@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.78.0.tgz#1e96996e15d555180434a96dc28158e1943cd5bd" - integrity sha512-tRF6ASVt2PQy4r5TdGis6/dtyDA0OTavsJ9xgLO0RyqBhLZAdtGj8LMPychEOHX1eXR/x+iKFsF9vXXWBRqfUg== - dependencies: - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" - invariant "^2.2.4" - metro-symbolicate "0.78.0" - nullthrows "^1.1.1" - ob1 "0.78.0" - source-map "^0.5.6" - vlq "^1.0.0" - -metro-symbolicate@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.78.0.tgz#0f12a22511ad6de97b7abdfcfda67eadd8504b83" - integrity sha512-OcQpvcpNyDtqKjfANqaJi2hsd3ajfwn+3+wuqY1kYG9/apLFY11lBw+o/rIKOYc3q4zWvclkwDGMkPbAxbXLOA== - dependencies: - invariant "^2.2.4" - metro-source-map "0.78.0" - nullthrows "^1.1.1" - source-map "^0.5.6" - through2 "^2.0.1" - vlq "^1.0.0" - -metro-transform-plugins@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.78.0.tgz#306beaef06689a28123a6f1adc5662860a8ae6a8" - integrity sha512-rZFtHj6zTzHIVURoYDFw20Idf5UDcyv7aFOMBVkLDrBo8EpMb5yFRsFw2I/FEreX78YFkJpUkNdxAV9JrE7PHQ== - dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" - nullthrows "^1.1.1" - -metro-transform-worker@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.78.0.tgz#f505b36b94fa67facbbbec0d396a82a7ec1d6a73" - integrity sha512-tooyGrf3g+0c838BeYAkFUgVwSJeumsIcaT65oZ7Om11f8QdPiIyVbgD1iEl369R6rJuw0mEPibpEjMMIZJuNg== - dependencies: - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/types" "^7.20.0" - metro "0.78.0" - metro-babel-transformer "0.78.0" - metro-cache "0.78.0" - metro-cache-key "0.78.0" - metro-source-map "0.78.0" - metro-transform-plugins "0.78.0" - nullthrows "^1.1.1" - -metro@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.78.0.tgz#e927b9fab79b172f4439239691a6d21f5b1338fe" - integrity sha512-ZNOPyJh4hlYshztAxKFNgeERrlOzXASlyC6unf/Yqt+jRk/GgVcecQQamiEWcejC+aLhP4FVxWP5Z6BiFqkdDA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/core" "^7.20.0" - "@babel/generator" "^7.20.0" - "@babel/parser" "^7.20.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.20.0" - "@babel/types" "^7.20.0" - accepts "^1.3.7" - async "^3.2.2" - chalk "^4.0.0" - ci-info "^2.0.0" - connect "^3.6.5" - debug "^2.2.0" - denodeify "^1.2.1" - error-stack-parser "^2.0.6" - graceful-fs "^4.2.4" - hermes-parser "0.15.0" - image-size "^1.0.2" - invariant "^2.2.4" - jest-worker "^27.2.0" - jsc-safe-url "^0.2.2" - lodash.throttle "^4.1.1" - metro-babel-transformer "0.78.0" - metro-cache "0.78.0" - metro-cache-key "0.78.0" - metro-config "0.78.0" - metro-core "0.78.0" - metro-file-map "0.78.0" - metro-minify-terser "0.78.0" - metro-resolver "0.78.0" - metro-runtime "0.78.0" - metro-source-map "0.78.0" - metro-symbolicate "0.78.0" - metro-transform-plugins "0.78.0" - metro-transform-worker "0.78.0" - mime-types "^2.1.27" - node-fetch "^2.2.0" - nullthrows "^1.1.1" - rimraf "^3.0.2" - serialize-error "^2.1.0" - source-map "^0.5.6" - strip-ansi "^6.0.0" - throat "^5.0.0" - ws "^7.5.1" - yargs "^17.6.2" - micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -9147,11 +8916,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.78.0: - version "0.78.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.78.0.tgz#de39d59417c355e18e7c31fe83a35cb002e02b2e" - integrity sha512-jq+K4K7UVsZJZAC7KgT+CskxuZdXit3+sCbBtRVrTXU/j+6/+TdLiEp9v0V/KujzivxsWm99HlKoylocGlLo/g== - object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" From 9c38ba31363416d994574e0efcfc48b12de8b459 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:54 +0200 Subject: [PATCH 17/23] remove --dependency-check flag --- .../src/commands/buildAndroid/index.ts | 11 ----------- .../src/commands/runAndroid/index.ts | 5 ----- .../cli-platform-ios/src/commands/buildIOS/index.ts | 4 ---- .../cli-platform-ios/src/commands/runIOS/index.ts | 1 - 4 files changed, 21 deletions(-) diff --git a/packages/cli-platform-android/src/commands/buildAndroid/index.ts b/packages/cli-platform-android/src/commands/buildAndroid/index.ts index 072e48a29..0f6674e67 100644 --- a/packages/cli-platform-android/src/commands/buildAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/buildAndroid/index.ts @@ -1,6 +1,5 @@ import { CLIError, - checkTransitiveDependencies, logger, printRunDoctorTip, } from '@react-native-community/cli-tools'; @@ -18,7 +17,6 @@ export interface BuildFlags { tasks?: Array; extraParams?: Array; interactive?: boolean; - dependencyCheck?: boolean; } async function buildAndroid( @@ -36,10 +34,6 @@ async function buildAndroid( let {tasks} = args; - if (args.dependencyCheck) { - await checkTransitiveDependencies(); - } - if (args.interactive) { const selectedTask = await promptForTaskSelection( 'build', @@ -129,11 +123,6 @@ export const options = [ description: 'Explicitly select build type and flavour to use before running a build', }, - { - name: '--dependency-check', - description: - 'Check if there are any transitive dependencies containing native code that are not declared as a direct dependency in your package.json.', - }, ]; export default { diff --git a/packages/cli-platform-android/src/commands/runAndroid/index.ts b/packages/cli-platform-android/src/commands/runAndroid/index.ts index e95161f42..0442881c8 100644 --- a/packages/cli-platform-android/src/commands/runAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/runAndroid/index.ts @@ -22,7 +22,6 @@ import { logAlreadyRunningBundler, startServerInNewWindow, handlePortUnavailable, - checkTransitiveDependencies, } from '@react-native-community/cli-tools'; import {getAndroidProject} from '../../config/getAndroidProject'; import listAndroidDevices from './listAndroidDevices'; @@ -57,10 +56,6 @@ async function runAndroid(_argv: Array, config: Config, args: Flags) { let {packager, port} = args; - if (args.dependencyCheck) { - await checkTransitiveDependencies(); - } - const packagerStatus = await isPackagerRunning(port); if ( diff --git a/packages/cli-platform-ios/src/commands/buildIOS/index.ts b/packages/cli-platform-ios/src/commands/buildIOS/index.ts index d0e4f8371..1da8bb8f4 100644 --- a/packages/cli-platform-ios/src/commands/buildIOS/index.ts +++ b/packages/cli-platform-ios/src/commands/buildIOS/index.ts @@ -19,10 +19,6 @@ async function buildIOS(_: Array, ctx: Config, args: BuildFlags) { // check if pods need to be installed await resolvePods(ctx.root, ctx.dependencies, {forceInstall: args.forcePods}); - if (args.dependencyCheck) { - await checkTransitiveDependencies(); - } - process.chdir(sourceDir); const {scheme, mode} = await getConfiguration(xcodeProject, sourceDir, args); diff --git a/packages/cli-platform-ios/src/commands/runIOS/index.ts b/packages/cli-platform-ios/src/commands/runIOS/index.ts index 667918381..30f584301 100644 --- a/packages/cli-platform-ios/src/commands/runIOS/index.ts +++ b/packages/cli-platform-ios/src/commands/runIOS/index.ts @@ -21,7 +21,6 @@ import { isPackagerRunning, logAlreadyRunningBundler, handlePortUnavailable, - checkTransitiveDependencies, } from '@react-native-community/cli-tools'; import {buildProject} from '../buildIOS/buildProject'; import {BuildFlags, buildOptions} from '../buildIOS/buildOptions'; From 4a5b4b227e9a31c1b8733a5aba3e16a68f948954 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:54 +0200 Subject: [PATCH 18/23] refactor transitive deps mechanism --- packages/cli-config/src/findDependencies.ts | 43 ++-- .../{cli/src/tools => cli-tools/src}/bun.ts | 0 packages/cli-tools/src/index.ts | 5 +- .../{cli/src/tools => cli-tools/src}/npm.ts | 0 .../cli-tools/src/resolveTransitiveDeps.ts | 197 ++++-------------- .../{cli/src/tools => cli-tools/src}/yarn.ts | 0 packages/cli-types/src/index.ts | 9 + packages/cli/src/commands/init/init.ts | 6 +- packages/cli/src/tools/packageManager.ts | 13 +- 9 files changed, 96 insertions(+), 177 deletions(-) rename packages/{cli/src/tools => cli-tools/src}/bun.ts (100%) rename packages/{cli/src/tools => cli-tools/src}/npm.ts (100%) rename packages/{cli/src/tools => cli-tools/src}/yarn.ts (100%) diff --git a/packages/cli-config/src/findDependencies.ts b/packages/cli-config/src/findDependencies.ts index cb0f5ecd0..e0a8858f9 100644 --- a/packages/cli-config/src/findDependencies.ts +++ b/packages/cli-config/src/findDependencies.ts @@ -1,24 +1,43 @@ +import {DependencyMap} from '@react-native-community/cli-types'; +import {findDependencyPath} from '@react-native-community/cli-tools'; import path from 'path'; import fs from 'fs'; /** * Returns an array of dependencies from project's package.json */ -export default function findDependencies(root: string): Array { - let pjson; +export default function findDependencies(root: string): DependencyMap { + const dependencies: DependencyMap = new Map(); + + const checkDependency = (dependencyPath: string) => { + let pjson: {[key: string]: any}; - try { pjson = JSON.parse( - fs.readFileSync(path.join(root, 'package.json'), 'utf8'), + fs.readFileSync(path.join(dependencyPath, 'package.json'), 'utf8'), ); - } catch (e) { - return []; - } - const deps = [ - ...Object.keys(pjson.dependencies || {}), - ...Object.keys(pjson.devDependencies || {}), - ]; + if (dependencies.has(pjson.name)) { + return; + } + + dependencies.set(pjson.name, { + version: pjson.version, + peerDependencies: pjson.peerDependencies || {}, + path: dependencyPath, + }); + + for (const dependency in { + ...pjson.dependencies, + ...pjson.devDependencies, + }) { + const depPath = findDependencyPath(dependency, root, dependencyPath); + if (depPath) { + checkDependency(depPath); + } + } + }; + + checkDependency(root); - return deps; + return dependencies; } diff --git a/packages/cli/src/tools/bun.ts b/packages/cli-tools/src/bun.ts similarity index 100% rename from packages/cli/src/tools/bun.ts rename to packages/cli-tools/src/bun.ts diff --git a/packages/cli-tools/src/index.ts b/packages/cli-tools/src/index.ts index 7730e4e1a..e083bc48a 100644 --- a/packages/cli-tools/src/index.ts +++ b/packages/cli-tools/src/index.ts @@ -17,6 +17,9 @@ export {default as handlePortUnavailable} from './handlePortUnavailable'; export * from './port'; export {default as cacheManager} from './cacheManager'; export {default as runSudo} from './runSudo'; -export {default as checkTransitiveDependencies} from './resolveTransitiveDeps'; +export * from './resolveTransitiveDeps'; +export * from './npm'; +export * from './bun'; +export * from './yarn'; export * from './errors'; diff --git a/packages/cli/src/tools/npm.ts b/packages/cli-tools/src/npm.ts similarity index 100% rename from packages/cli/src/tools/npm.ts rename to packages/cli-tools/src/npm.ts diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index daa2a0516..8907877c4 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -1,54 +1,18 @@ import fs from 'fs-extra'; import path from 'path'; -import * as fetch from 'npm-registry-fetch'; +import * as npmRegistryFetch from 'npm-registry-fetch'; import chalk from 'chalk'; import {prompt} from 'prompts'; import execa from 'execa'; import semver from 'semver'; -import generateFileHash from './generateFileHash'; -import {getLoader} from './loader'; -import logger from './logger'; -import {CLIError} from './errors'; - -export interface DependencyData { - path: string; - version: string; - peerDependencies: {[key: string]: string}; - duplicates?: DependencyData[]; -} - -function isUsingYarn(root: string) { - return fs.existsSync(path.join(root, 'yarn.lock')); -} - -async function podInstall() { - process.chdir('ios'); - const loader = getLoader(); - try { - loader.start('Installing pods...'); - await execa('bundle', ['exec', 'pod', 'install']); - loader.succeed(); - } catch (error) { - const stderr = (error as any).stderr || (error as any).stdout; - loader.fail(); - logger.error(stderr); - - throw new CLIError( - 'Could not install pods. Try running pod installation manually.', - ); - } finally { - process.chdir('..'); - } -} - -function writeFile(filePath: string, content: string) { - fs.writeFileSync(filePath, content, {encoding: 'utf8'}); -} +import {getLoader, logger} from '@react-native-community/cli-tools'; +import {DependencyMap} from '@react-native-community/cli-types'; +import {isProjectUsingYarn} from './yarn'; export async function fetchAvailableVersions( packageName: string, ): Promise { - const response = await fetch.json(`/${packageName}`); + const response = await npmRegistryFetch.json(`/${packageName}`); return Object.keys(response.versions || {}); } @@ -84,64 +48,9 @@ export function findDependencyPath( return dependencyPath; } -export function collectDependencies(root: string): Map { - const dependencies = new Map(); - - const checkDependency = (dependencyPath: string) => { - const packageJsonPath = path.join(dependencyPath, 'package.json'); - const packageJson = require(packageJsonPath); - - if (dependencies.has(packageJson.name)) { - const dependency = dependencies.get(packageJson.name) as DependencyData; - - if ( - dependencyPath !== dependency.path && - dependency.duplicates?.every( - (duplicate) => duplicate.path !== dependencyPath, - ) - ) { - dependencies.set(packageJson.name, { - ...dependency, - duplicates: [ - ...dependency.duplicates, - { - path: dependencyPath, - version: packageJson.version, - peerDependencies: packageJson.peerDependencies, - }, - ], - }); - } - return; - } - - dependencies.set(packageJson.name, { - path: dependencyPath, - version: packageJson.version, - peerDependencies: packageJson.peerDependencies, - duplicates: [], - }); - - for (const dependency in { - ...packageJson.dependencies, - ...(root === dependencyPath ? packageJson.devDependencies : {}), - }) { - const depPath = findDependencyPath(dependency, root, dependencyPath); - - if (depPath) { - checkDependency(depPath); - } - } - }; - - checkDependency(root); - - return dependencies; -} - export function filterNativeDependencies( root: string, - dependencies: Map, + dependencies: DependencyMap, ) { const depsWithNativePeers = new Map>(); @@ -198,7 +107,7 @@ export function filterInstalledPeers( export function findPeerDepsToInstall( root: string, - dependencies: Map, + dependencies: DependencyMap, ) { const rootPackageJson = require(path.join(root, 'package.json')); const dependencyList = { @@ -206,7 +115,7 @@ export function findPeerDepsToInstall( ...rootPackageJson.devDependencies, }; const peerDependencies = new Set(); - dependencies.forEach((value) => { + Array.from(dependencies.entries()).forEach(([_, value]) => { if (value.peerDependencies) { Object.keys(value.peerDependencies).forEach((name) => { if (!Object.keys(dependencyList).includes(name)) { @@ -218,16 +127,24 @@ export function findPeerDepsToInstall( return peerDependencies; } -export function getMissingPeerDepsForYarn(root: string) { - const dependencies = collectDependencies(root); +export function getMissingPeerDepsForYarn( + root: string, + dependencies: DependencyMap, +) { const depsToInstall = findPeerDepsToInstall(root, dependencies); - return depsToInstall; } // install peer deps with yarn without making any changes to package.json and yarn.lock -export function yarnSilentInstallPeerDeps(root: string) { - const dependenciesToInstall = getMissingPeerDepsForYarn(root); +export function yarnSilentInstallPeerDeps( + root: string, + missingPeerDependencies: DependencyMap, +) { + const dependenciesToInstall = getMissingPeerDepsForYarn( + root, + missingPeerDependencies, + ); + const packageJsonPath = path.join(root, 'package.json'); const lockfilePath = path.join(root, 'yarn.lock'); @@ -259,19 +176,11 @@ export function yarnSilentInstallPeerDeps(root: string) { return; } - writeFile(packageJsonPath, binPackageJson); - writeFile(lockfilePath, binLockfile); + fs.writeFileSync(packageJsonPath, binPackageJson, {encoding: 'utf8'}); + fs.writeFileSync(lockfilePath, binLockfile, {encoding: 'utf8'}); } } -function findPeerDepsForAutolinking(root: string) { - const deps = collectDependencies(root); - const nonEmptyPeers = filterNativeDependencies(root, deps); - const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); - - return nonInstalledPeers; -} - export async function promptForMissingPeerDependencies( dependencies: Record>, ): Promise { @@ -302,7 +211,7 @@ export async function promptForMissingPeerDependencies( return install; } -async function getPackagesVersion( +export async function getPackagesVersion( missingDependencies: Record>, ) { const packageToRanges: {[pkg: string]: string[]} = {}; @@ -339,7 +248,7 @@ async function getPackagesVersion( return workingVersions; } -function installMissingPackages( +export function installMissingPackages( packages: Record, yarn = true, ) { @@ -359,63 +268,37 @@ function installMissingPackages( } loader.succeed(); - return true; + return deps; } catch (error) { loader.fail(); - return false; + return []; } } -export async function resolveTransitiveDeps(root: string) { - const isYarn = isUsingYarn(root); +export async function resolveTransitiveDeps( + root: string, + dependencyMap: DependencyMap, +) { + const isYarn = !!isProjectUsingYarn(root); + if (isYarn) { - yarnSilentInstallPeerDeps(root); + yarnSilentInstallPeerDeps(root, dependencyMap); } + const nonEmptyPeers = filterNativeDependencies(root, dependencyMap); + const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); - const missingPeerDependencies = findPeerDepsForAutolinking(root); - if (Object.keys(missingPeerDependencies).length > 0) { + if (Object.keys(nonInstalledPeers).length > 0) { const installDeps = await promptForMissingPeerDependencies( - missingPeerDependencies, + nonInstalledPeers, ); if (installDeps) { - const packagesVersions = await getPackagesVersion( - missingPeerDependencies, - ); + const packagesVersions = await getPackagesVersion(nonInstalledPeers); return installMissingPackages(packagesVersions, isYarn); } } - return false; -} - -async function resolvePodsInstallation() { - const {install} = await prompt({ - type: 'confirm', - name: 'install', - message: - 'Do you want to install pods? This will make sure your transitive dependencies are linked properly.', - }); - - if (install) { - await podInstall(); - } -} - -export default async function checkTransitiveDependencies() { - const root = process.cwd(); - const packageJsonPath = path.join(process.cwd(), 'package.json'); - const preInstallHash = generateFileHash(packageJsonPath); - const areTransitiveDepsInstalled = await resolveTransitiveDeps(root); - const postInstallHash = generateFileHash(packageJsonPath); - - if ( - process.platform === 'darwin' && - areTransitiveDepsInstalled && - preInstallHash !== postInstallHash - ) { - await resolvePodsInstallation(); - } + return []; } diff --git a/packages/cli/src/tools/yarn.ts b/packages/cli-tools/src/yarn.ts similarity index 100% rename from packages/cli/src/tools/yarn.ts rename to packages/cli-tools/src/yarn.ts diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index b20e4378a..dd1ef898f 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -148,6 +148,15 @@ export type UserDependencyConfig = { healthChecks: []; }; +export type DependencyMap = Map< + string, + { + version: string; + peerDependencies: Record; + path: string; + } +>; + export { IOSProjectConfig, IOSProjectParams, diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index b6351cb19..56b2eaee5 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -12,6 +12,9 @@ import { getLoader, Loader, cacheManager, + getBunVersionIfAvailable, + getNpmVersionIfAvailable, + getYarnVersionIfAvailable, } from '@react-native-community/cli-tools'; import {installPods} from '@react-native-community/cli-platform-ios'; import { @@ -24,9 +27,6 @@ import {changePlaceholderInTemplate} from './editTemplate'; import * as PackageManager from '../../tools/packageManager'; import banner from './banner'; import TemplateAndVersionError from './errors/TemplateAndVersionError'; -import {getBunVersionIfAvailable} from '../../tools/bun'; -import {getNpmVersionIfAvailable} from '../../tools/npm'; -import {getYarnVersionIfAvailable} from '../../tools/yarn'; import {createHash} from 'crypto'; const DEFAULT_VERSION = 'latest'; diff --git a/packages/cli/src/tools/packageManager.ts b/packages/cli/src/tools/packageManager.ts index b465f1858..d7b95ce49 100644 --- a/packages/cli/src/tools/packageManager.ts +++ b/packages/cli/src/tools/packageManager.ts @@ -1,8 +1,13 @@ import execa from 'execa'; -import {logger} from '@react-native-community/cli-tools'; -import {getYarnVersionIfAvailable, isProjectUsingYarn} from './yarn'; -import {getBunVersionIfAvailable, isProjectUsingBun} from './bun'; -import {getNpmVersionIfAvailable, isProjectUsingNpm} from './npm'; +import { + getBunVersionIfAvailable, + getNpmVersionIfAvailable, + getYarnVersionIfAvailable, + isProjectUsingBun, + isProjectUsingNpm, + isProjectUsingYarn, + logger, +} from '@react-native-community/cli-tools'; export type PackageManager = keyof typeof packageManagers; From 26f262e27a24fc1ee5f40c9a409e04daf040b7c8 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:33:54 +0200 Subject: [PATCH 19/23] use config param to autolink peer deps --- packages/cli-config/src/loadConfig.ts | 21 ++++++++++++++----- packages/cli-config/src/schema.ts | 1 + packages/cli-doctor/src/commands/doctor.ts | 2 +- .../src/tools/healthchecks/index.ts | 10 +++++---- packages/cli-tools/src/bun.ts | 2 +- .../cli-tools/src/resolveTransitiveDeps.ts | 3 ++- packages/cli-tools/src/yarn.ts | 2 +- packages/cli-types/src/index.ts | 1 + packages/cli/src/index.ts | 2 +- 9 files changed, 30 insertions(+), 14 deletions(-) diff --git a/packages/cli-config/src/loadConfig.ts b/packages/cli-config/src/loadConfig.ts index ffd3533de..d252325cf 100644 --- a/packages/cli-config/src/loadConfig.ts +++ b/packages/cli-config/src/loadConfig.ts @@ -11,6 +11,7 @@ import { version, resolveNodeModuleDir, UnknownProjectError, + resolveTransitiveDeps, } from '@react-native-community/cli-tools'; import findDependencies from './findDependencies'; import resolveReactNativePath from './resolveReactNativePath'; @@ -75,7 +76,9 @@ function getReactNativeVersion(reactNativePath: string) { /** * Loads CLI configuration */ -function loadConfig(projectRoot: string = findProjectRoot()): Config { +async function loadConfig( + projectRoot: string = findProjectRoot(), +): Promise { let lazyProject: ProjectConfig; const userConfig = readConfigFromDisk(projectRoot); @@ -113,11 +116,19 @@ function loadConfig(projectRoot: string = findProjectRoot()): Config { }, }; + const dependencyMap = findDependencies(projectRoot); + let dependencies = Array.from(dependencyMap.keys()); + + if (userConfig.unstable_autolinkPeerDependencies) { + const installedDependencies = await resolveTransitiveDeps( + projectRoot, + dependencyMap, + ); + dependencies = [...dependencies, ...installedDependencies]; + } + const finalConfig = Array.from( - new Set([ - ...Object.keys(userConfig.dependencies), - ...findDependencies(projectRoot), - ]), + new Set([...Object.keys(userConfig.dependencies), ...dependencies]), ).reduce((acc: Config, dependencyName) => { const localDependencyRoot = userConfig.dependencies[dependencyName] && diff --git a/packages/cli-config/src/schema.ts b/packages/cli-config/src/schema.ts index ee4ed7074..91c759633 100644 --- a/packages/cli-config/src/schema.ts +++ b/packages/cli-config/src/schema.ts @@ -186,6 +186,7 @@ export const projectConfig = t linkConfig: t.func(), }), ).default({}), + unstable_autolinkPeerDependencies: t.bool(), }) .unknown(true) .default(); diff --git a/packages/cli-doctor/src/commands/doctor.ts b/packages/cli-doctor/src/commands/doctor.ts index 7271aa1f6..667999456 100644 --- a/packages/cli-doctor/src/commands/doctor.ts +++ b/packages/cli-doctor/src/commands/doctor.ts @@ -175,7 +175,7 @@ const doctorCommand = (async (_, options, config) => { Promise.all(categories.map(iterateOverHealthChecks)); const healthchecksPerCategory = await iterateOverCategories( - Object.values(getHealthchecks(options)).filter( + Object.values(await getHealthchecks(options)).filter( (category) => category !== undefined, ) as HealthCheckCategory[], ); diff --git a/packages/cli-doctor/src/tools/healthchecks/index.ts b/packages/cli-doctor/src/tools/healthchecks/index.ts index cd8b8fb37..8bca0c348 100644 --- a/packages/cli-doctor/src/tools/healthchecks/index.ts +++ b/packages/cli-doctor/src/tools/healthchecks/index.ts @@ -1,3 +1,5 @@ +import loadConfig from '@react-native-community/cli-config'; +import {logger} from '@react-native-community/cli-tools'; import nodeJS from './nodeJS'; import {yarn, npm} from './packageManagers'; import adb from './adb'; @@ -12,11 +14,9 @@ import xcode from './xcode'; import cocoaPods from './cocoaPods'; import iosDeploy from './iosDeploy'; import {Healthchecks, HealthCheckCategory} from '../../types'; -import loadConfig from '@react-native-community/cli-config'; import xcodeEnv from './xcodeEnv'; import packager from './packager'; import deepmerge from 'deepmerge'; -import {logger} from '@react-native-community/cli-tools'; export const HEALTHCHECK_TYPES = { ERROR: 'ERROR', @@ -28,14 +28,16 @@ type Options = { contributor: boolean | void; }; -export const getHealthchecks = ({contributor}: Options): Healthchecks => { +export const getHealthchecks = async ({ + contributor, +}: Options): Promise => { let additionalChecks: HealthCheckCategory[] = []; let projectSpecificHealthchecks = {}; let config; // Doctor can run in a detached mode, where there isn't a config so this can fail try { - config = loadConfig(); + config = await loadConfig(); additionalChecks = config.healthChecks; if (config.reactNativePath) { diff --git a/packages/cli-tools/src/bun.ts b/packages/cli-tools/src/bun.ts index 121be7515..081e6b6eb 100644 --- a/packages/cli-tools/src/bun.ts +++ b/packages/cli-tools/src/bun.ts @@ -1,7 +1,7 @@ -import {logger} from '@react-native-community/cli-tools'; import {execSync} from 'child_process'; import findUp from 'find-up'; import semver from 'semver'; +import logger from './logger'; export function getBunVersionIfAvailable() { let bunVersion; diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index 8907877c4..98ec0a4c6 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -5,9 +5,10 @@ import chalk from 'chalk'; import {prompt} from 'prompts'; import execa from 'execa'; import semver from 'semver'; -import {getLoader, logger} from '@react-native-community/cli-tools'; import {DependencyMap} from '@react-native-community/cli-types'; import {isProjectUsingYarn} from './yarn'; +import {getLoader} from './loader'; +import logger from './logger'; export async function fetchAvailableVersions( packageName: string, diff --git a/packages/cli-tools/src/yarn.ts b/packages/cli-tools/src/yarn.ts index 45a8f463a..178184d20 100644 --- a/packages/cli-tools/src/yarn.ts +++ b/packages/cli-tools/src/yarn.ts @@ -8,8 +8,8 @@ import {execSync} from 'child_process'; import semver from 'semver'; -import {logger} from '@react-native-community/cli-tools'; import findUp from 'find-up'; +import logger from './logger'; /** * Use Yarn if available, it's much faster than the npm client. diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index dd1ef898f..f8cfc4a64 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -135,6 +135,7 @@ export type UserConfig = Omit & { ios?: IOSProjectParams; [key: string]: any; }; + unstable_autolinkPeerDependencies?: boolean; }; export type UserDependencyConfig = { diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index de74e82df..5d97a3856 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -174,7 +174,7 @@ async function setupAndRun() { let config: Config | undefined; try { - config = loadConfig(); + config = await loadConfig(); logger.enable(); From 5f1b7391fd4140bf4828d8d8c663a9cf8380f0d5 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 22 Sep 2023 12:53:37 +0200 Subject: [PATCH 20/23] don't run check for config command --- packages/cli-config/src/loadConfig.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli-config/src/loadConfig.ts b/packages/cli-config/src/loadConfig.ts index d252325cf..66af3d4bf 100644 --- a/packages/cli-config/src/loadConfig.ts +++ b/packages/cli-config/src/loadConfig.ts @@ -119,7 +119,10 @@ async function loadConfig( const dependencyMap = findDependencies(projectRoot); let dependencies = Array.from(dependencyMap.keys()); - if (userConfig.unstable_autolinkPeerDependencies) { + if ( + userConfig.unstable_autolinkPeerDependencies && + !process.argv.includes('config') + ) { const installedDependencies = await resolveTransitiveDeps( projectRoot, dependencyMap, From 9ea7ff5534f1e2fc4059523f8010fc020ca9c935 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Thu, 28 Sep 2023 15:13:54 +0200 Subject: [PATCH 21/23] update tests --- __e2e__/__snapshots__/config.test.ts.snap | 6 +- .../__snapshots__/index-test.ts.snap | 5 - .../src/__tests__/findDependencies-test.ts | 16 ++- .../cli-config/src/__tests__/index-test.ts | 120 ++++++++++++------ packages/cli-config/src/findDependencies.ts | 6 + packages/cli-platform-android/README.md | 6 - .../src}/__tests__/packageManager-test.ts | 2 +- .../__tests__/resolveTransitiveDeps.test.ts | 56 +++----- packages/cli-tools/src/index.ts | 1 + .../tools => cli-tools/src}/packageManager.ts | 13 +- .../cli-tools/src/resolveTransitiveDeps.ts | 1 + .../commands/init/__tests__/template.test.ts | 6 +- packages/cli/src/commands/init/init.ts | 2 +- packages/cli/src/commands/init/template.ts | 9 +- 14 files changed, 141 insertions(+), 108 deletions(-) rename packages/{cli/src/tools => cli-tools/src}/__tests__/packageManager-test.ts (99%) rename packages/{cli/src/tools => cli-tools/src}/packageManager.ts (92%) diff --git a/__e2e__/__snapshots__/config.test.ts.snap b/__e2e__/__snapshots__/config.test.ts.snap index 0249bc706..ddb819206 100644 --- a/__e2e__/__snapshots__/config.test.ts.snap +++ b/__e2e__/__snapshots__/config.test.ts.snap @@ -26,7 +26,7 @@ exports[`shows up current config without unnecessary output 1`] = ` }, { "name": "build-ios", - "description": "builds your app for iOS platform", + "description": "builds your app on iOS simulator", "examples": [ "<>" ], @@ -65,9 +65,7 @@ exports[`shows up current config without unnecessary output 1`] = ` "android": { "sourceDir": "<>/TestProject/android", "appName": "app", - "packageName": "com.testproject", - "applicationId": "com.testproject", - "mainActivity": ".MainActivity" + "packageName": "com.testproject" } } } diff --git a/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap index 453523b62..10dc100fd 100644 --- a/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap +++ b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap @@ -11,7 +11,6 @@ Object { ], "podspecPath": "<>/node_modules/react-native-test/ReactNativeTest.podspec", "scriptPhases": Array [], - "version": "unresolved", }, }, "root": "<>/node_modules/react-native-test", @@ -58,7 +57,6 @@ Object { "path": "./phase.sh", }, ], - "version": "unresolved", }, }, "root": "<>/node_modules/react-native-test", @@ -109,7 +107,6 @@ Object { "show_env_vars_in_log": false, }, ], - "version": "unresolved", }, }, "root": "<>/node_modules/react-native-test", @@ -134,7 +131,6 @@ Object { "configurations": Array [], "podspecPath": "<>/node_modules/react-native-test/ReactNativeTest.podspec", "scriptPhases": Array [], - "version": "unresolved", }, }, "root": "<>/node_modules/react-native-test", @@ -153,7 +149,6 @@ Object { ], "podspecPath": "<>/node_modules/react-native-test/ReactNativeTest.podspec", "scriptPhases": Array [], - "version": "unresolved", }, }, "root": "<>/node_modules/react-native-test", diff --git a/packages/cli-config/src/__tests__/findDependencies-test.ts b/packages/cli-config/src/__tests__/findDependencies-test.ts index 90a366faf..cb2af37bf 100644 --- a/packages/cli-config/src/__tests__/findDependencies-test.ts +++ b/packages/cli-config/src/__tests__/findDependencies-test.ts @@ -14,10 +14,24 @@ test('returns plugins from both dependencies and dev dependencies', () => { writeFiles(DIR, { 'package.json': ` { + "name": "plugin", + "version": "1.0.0", "dependencies": {"rnpm-plugin-test": "*"}, "devDependencies": {"rnpm-plugin-test-2": "*"} } `, + 'node_modules/rnpm-plugin-test/package.json': ` + { + "name": "rnpm-plugin-test", + "version": "1.0.0" + + }`, + 'node_modules/rnpm-plugin-test-2/package.json': ` + { + "name": "rnpm-plugin-test-2", + "version": "1.0.0" + }`, }); - expect(findDependencies(DIR)).toHaveLength(2); + + expect(findDependencies(DIR).size).toBe(3); }); diff --git a/packages/cli-config/src/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts index 104ed7de0..b281a329a 100644 --- a/packages/cli-config/src/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -17,7 +17,12 @@ const androidPath = slash( ); const REACT_NATIVE_MOCK = { - 'node_modules/react-native/package.json': '{}', + 'node_modules/react-native/package.json': ` + { + "name": "react-native", + "version": "0.0.1" + } + `, 'node_modules/react-native/react-native.config.js': ` const ios = require("${iosPath}"); const android = require("${androidPath}"); @@ -59,22 +64,27 @@ beforeEach(async () => { afterEach(async () => await cleanup(DIR)); -test('should have a valid structure by default', () => { +test('should have a valid structure by default', async () => { DIR = getTempDirectory('config_test_structure'); writeFiles(DIR, { 'react-native.config.js': `module.exports = { reactNativePath: "." }`, }); - const config = loadConfig(DIR); + const config = await loadConfig(DIR); expect(removeString(config, DIR)).toMatchSnapshot(); }); -test('should return dependencies from package.json', () => { +test('should return dependencies from package.json', async () => { DIR = getTempDirectory('config_test_deps'); writeFiles(DIR, { ...REACT_NATIVE_MOCK, - 'node_modules/react-native-test/package.json': '{}', + 'node_modules/react-native-test/package.json': ` + { + "name": "react-native-test", + "version": "0.0.1" + } + `, 'node_modules/react-native-test/ReactNativeTest.podspec': '', 'package.json': `{ "dependencies": { @@ -83,15 +93,20 @@ test('should return dependencies from package.json', () => { } }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect(removeString(dependencies, DIR)).toMatchSnapshot(); }); -test('should read a config of a dependency and use it to load other settings', () => { +test('should read a config of a dependency and use it to load other settings', async () => { DIR = getTempDirectory('config_test_settings'); writeFiles(DIR, { ...REACT_NATIVE_MOCK, - 'node_modules/react-native-test/package.json': '{}', + 'node_modules/react-native-test/package.json': ` + { + "name": "react-native-test", + "version": "0.0.1" + } + `, 'node_modules/react-native-test/ReactNativeTest.podspec': '', 'node_modules/react-native-test/react-native.config.js': `module.exports = { dependency: { @@ -122,17 +137,22 @@ test('should read a config of a dependency and use it to load other settings', ( } }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect( removeString(dependencies['react-native-test'], DIR), ).toMatchSnapshot(); }); -test('should merge project configuration with default values', () => { +test('should merge project configuration with default values', async () => { DIR = getTempDirectory('config_test_merge'); writeFiles(DIR, { ...REACT_NATIVE_MOCK, - 'node_modules/react-native-test/package.json': '{}', + 'node_modules/react-native-test/package.json': ` + { + "name": "react-native-test", + "version": "0.0.1" + } + `, 'node_modules/react-native-test/ReactNativeTest.podspec': '', 'package.json': `{ "dependencies": { @@ -153,17 +173,22 @@ test('should merge project configuration with default values', () => { } }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect(removeString(dependencies['react-native-test'], DIR)).toMatchSnapshot( 'snapshoting `react-native-test` config', ); }); -test('should load commands from "react-native-foo" and "react-native-bar" packages', () => { +test('should load commands from "react-native-foo" and "react-native-bar" packages', async () => { DIR = getTempDirectory('config_test_packages'); writeFiles(DIR, { 'react-native.config.js': 'module.exports = { reactNativePath: "." }', - 'node_modules/react-native-foo/package.json': '{}', + 'node_modules/react-native-foo/package.json': ` + { + "name": "react-native-foo", + "version": "0.0.1" + } + `, 'node_modules/react-native-foo/react-native.config.js': `module.exports = { commands: [ { @@ -172,7 +197,12 @@ test('should load commands from "react-native-foo" and "react-native-bar" packag } ] }`, - 'node_modules/react-native-bar/package.json': '{}', + 'node_modules/react-native-bar/package.json': ` + { + "name": "react-native-bar", + "version": "0.0.1" + } + `, 'node_modules/react-native-bar/react-native.config.js': `module.exports = { commands: [ { @@ -188,15 +218,20 @@ test('should load commands from "react-native-foo" and "react-native-bar" packag } }`, }); - const {commands} = loadConfig(DIR); + const {commands} = await loadConfig(DIR); expect(commands).toMatchSnapshot(); }); -test('should not skip packages that have invalid configuration (to avoid breaking users)', () => { +test('should not skip packages that have invalid configuration (to avoid breaking users)', async () => { process.env.FORCE_COLOR = '0'; // To disable chalk DIR = getTempDirectory('config_test_skip'); writeFiles(DIR, { - 'node_modules/react-native/package.json': '{}', + 'node_modules/react-native/package.json': ` + { + "name": "react-native", + "version": "0.0.1" + } + `, 'node_modules/react-native/react-native.config.js': `module.exports = { dependency: { invalidProperty: 5 @@ -208,18 +243,20 @@ test('should not skip packages that have invalid configuration (to avoid breakin } }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect(removeString(dependencies, DIR)).toMatchSnapshot( 'dependencies config', ); expect(spy.mock.calls[0][0]).toMatchSnapshot('logged warning'); }); -test('does not use restricted "react-native" key to resolve config from package.json', () => { +test('does not use restricted "react-native" key to resolve config from package.json', async () => { DIR = getTempDirectory('config_test_restricted'); writeFiles(DIR, { 'node_modules/react-native-netinfo/package.json': `{ - "react-native": "src/index.js" + "react-native": "src/index.js", + "name": "react-native-netinfo", + "version": "0.0.1" }`, 'react-native.config.js': 'module.exports = { reactNativePath: "." }', 'package.json': `{ @@ -228,12 +265,13 @@ test('does not use restricted "react-native" key to resolve config from package. } }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); + expect(dependencies).toHaveProperty('react-native-netinfo'); expect(spy).not.toHaveBeenCalled(); }); -test('supports dependencies from user configuration with custom root and properties', () => { +test('supports dependencies from user configuration with custom root and properties', async () => { DIR = getTempDirectory('config_test_custom_root'); const escapePathSeparator = (value: string) => path.sep === '\\' ? value.replace(/(\/|\\)/g, '\\\\') : value; @@ -274,7 +312,7 @@ module.exports = { }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect(removeString(dependencies['local-lib'], DIR)).toMatchInlineSnapshot(` Object { "name": "local-lib", @@ -284,7 +322,6 @@ module.exports = { "configurations": Array [], "podspecPath": "custom-path", "scriptPhases": Array [], - "version": "0.0.1", }, }, "root": "<>/native-libs/local-lib", @@ -292,11 +329,14 @@ module.exports = { `); }); -test('should apply build types from dependency config', () => { +test('should apply build types from dependency config', async () => { DIR = getTempDirectory('config_test_apply_dependency_config'); writeFiles(DIR, { ...REACT_NATIVE_MOCK, - 'node_modules/react-native-test/package.json': '{}', + 'node_modules/react-native-test/package.json': `{ + "name": "react-native-test", + "version": "0.0.1" + }`, 'node_modules/react-native-test/ReactNativeTest.podspec': '', 'node_modules/react-native-test/react-native.config.js': `module.exports = { dependency: { @@ -314,13 +354,13 @@ test('should apply build types from dependency config', () => { } }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect( removeString(dependencies['react-native-test'], DIR), ).toMatchSnapshot(); }); -test('supports dependencies from user configuration with custom build type', () => { +test('supports dependencies from user configuration with custom build type', async () => { DIR = getTempDirectory('config_test_apply_custom_build_config'); writeFiles(DIR, { ...REACT_NATIVE_MOCK, @@ -335,7 +375,12 @@ test('supports dependencies from user configuration with custom build type', () }, } }`, - 'node_modules/react-native-test/package.json': '{}', + 'node_modules/react-native-test/package.json': ` + { + "name": "react-native-test", + "version": "0.0.1" + } + `, 'node_modules/react-native-test/ReactNativeTest.podspec': '', 'node_modules/react-native-test/react-native.config.js': 'module.exports = {}', @@ -347,17 +392,20 @@ test('supports dependencies from user configuration with custom build type', () }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect( removeString(dependencies['react-native-test'], DIR), ).toMatchSnapshot(); }); -test('supports disabling dependency for ios platform', () => { +test('supports disabling dependency for ios platform', async () => { DIR = getTempDirectory('config_test_disable_dependency_platform'); writeFiles(DIR, { ...REACT_NATIVE_MOCK, - 'node_modules/react-native-test/package.json': '{}', + 'node_modules/react-native-test/package.json': `{ + "name": "react-native-test", + "version": "0.0.1" + }`, 'node_modules/react-native-test/ReactNativeTest.podspec': '', 'node_modules/react-native-test/react-native.config.js': ` module.exports = { @@ -376,13 +424,13 @@ test('supports disabling dependency for ios platform', () => { }`, }); - const {dependencies} = loadConfig(DIR); + const {dependencies} = await loadConfig(DIR); expect( removeString(dependencies['react-native-test'], DIR), ).toMatchSnapshot(); }); -test('should convert project sourceDir relative path to absolute', () => { +test('should convert project sourceDir relative path to absolute', async () => { DIR = getTempDirectory('config_test_absolute_project_source_dir'); const iosProjectDir = './ios2'; const androidProjectDir = './android2'; @@ -441,7 +489,7 @@ test('should convert project sourceDir relative path to absolute', () => { `, }); - const config = loadConfig(DIR); + const config = await loadConfig(DIR); expect(config.project.ios?.sourceDir).toBe(path.join(DIR, iosProjectDir)); expect(config.project.android?.sourceDir).toBe( diff --git a/packages/cli-config/src/findDependencies.ts b/packages/cli-config/src/findDependencies.ts index e0a8858f9..e05114355 100644 --- a/packages/cli-config/src/findDependencies.ts +++ b/packages/cli-config/src/findDependencies.ts @@ -12,6 +12,12 @@ export default function findDependencies(root: string): DependencyMap { const checkDependency = (dependencyPath: string) => { let pjson: {[key: string]: any}; + const packageJsonPath = path.join(dependencyPath, 'package.json'); + + if (!fs.existsSync(packageJsonPath)) { + return; + } + pjson = JSON.parse( fs.readFileSync(path.join(dependencyPath, 'package.json'), 'utf8'), ); diff --git a/packages/cli-platform-android/README.md b/packages/cli-platform-android/README.md index 737de5986..a6148000e 100644 --- a/packages/cli-platform-android/README.md +++ b/packages/cli-platform-android/README.md @@ -73,9 +73,6 @@ Build native libraries only for the current device architecture for debug builds List all available Android devices and simulators and let you choose one to run the app. -#### `--dependency-check` -Check if there are any transitive dependencies containing native code that are not declared as a direct dependency in your package.json. If any found, prompts if you want to install and autolink them before running an app. - ### `build-android` Usage: @@ -111,9 +108,6 @@ Installs passed binary instead of building a fresh one. This command is not comp Id of the User Profile you want to install the app on. -#### `--dependency-check` -Check if there are any transitive dependencies containing native code that are not declared as a direct dependency in your package.json. If any found, prompts if you want to install and autolink them before building an app. - ### `log-android` Usage: diff --git a/packages/cli/src/tools/__tests__/packageManager-test.ts b/packages/cli-tools/src/__tests__/packageManager-test.ts similarity index 99% rename from packages/cli/src/tools/__tests__/packageManager-test.ts rename to packages/cli-tools/src/__tests__/packageManager-test.ts index 78c31a652..03a3d2b27 100644 --- a/packages/cli/src/tools/__tests__/packageManager-test.ts +++ b/packages/cli-tools/src/__tests__/packageManager-test.ts @@ -2,7 +2,7 @@ jest.mock('execa', () => jest.fn()); import execa from 'execa'; import * as yarn from '../yarn'; import * as bun from '../bun'; -import {logger} from '@react-native-community/cli-tools'; +import logger from '../logger'; import * as PackageManager from '../packageManager'; const PACKAGES = ['react', 'react-native']; diff --git a/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts b/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts index 95cb9748e..18d8a2527 100644 --- a/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts +++ b/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts @@ -2,9 +2,7 @@ import path from 'path'; import prompts from 'prompts'; import {cleanup, getTempDirectory, writeFiles} from '../../../../jest/helpers'; import { - DependencyData, calculateWorkingVersion, - collectDependencies, filterInstalledPeers, filterNativeDependencies, findDependencyPath, @@ -12,6 +10,7 @@ import { resolveTransitiveDeps, } from '../resolveTransitiveDeps'; import logger from '../logger'; +import findDependencies from '../../../cli-config/src/findDependencies'; jest.mock('execa', () => { return {sync: jest.fn()}; @@ -158,36 +157,12 @@ describe('findDependencyPath', () => { }); }); -describe('collectDependencies', () => { - beforeEach(() => { - createTempFiles(); - }); - - it('should recursively get all dependencies', () => { - const dependencies = collectDependencies(DIR); - - expect(dependencies.size).toBe(4); - }); - - it('should collect peer dependencies of a dependency', () => { - const dependencies = collectDependencies(DIR); - const stackDependency = dependencies.get( - '@react-navigation/stack', - ) as DependencyData; - const peerNames = Object.keys(stackDependency.peerDependencies); - - expect(peerNames).toContain('react'); - expect(peerNames).toContain('react-native'); - expect(peerNames).toContain('react-native-gesture-handler'); - }); -}); - describe('filterNativeDependencies', () => { it('should return only dependencies with peer dependencies containing native code', () => { createTempFiles({ 'node_modules/react-native-safe-area-view/ios/Podfile': '{}', }); - const dependencies = collectDependencies(DIR); + const dependencies = findDependencies(DIR); const filtered = filterNativeDependencies(DIR, dependencies); expect(filtered.keys()).toContain('@react-navigation/stack'); expect(filtered.keys()).toContain('@react-navigation/elements'); @@ -197,7 +172,7 @@ describe('filterNativeDependencies', () => { describe('filterInstalledPeers', () => { it('should return only dependencies with peer dependencies that are installed', () => { createTempFiles(); - const dependencies = collectDependencies(DIR); + const dependencies = findDependencies(DIR); const libsWithNativeDeps = filterNativeDependencies(DIR, dependencies); const nonInstalledPeers = filterInstalledPeers(DIR, libsWithNativeDeps); @@ -211,11 +186,11 @@ describe('filterInstalledPeers', () => { describe('getMissingPeerDepsForYarn', () => { it('should return an array of peer dependencies to install', () => { createTempFiles(); - - const dependencies = getMissingPeerDepsForYarn(DIR); - expect(dependencies.values()).toContain('react'); - expect(dependencies.values()).toContain('react-native-gesture-handler'); - expect(dependencies.values()).toContain('react-native-safe-area-view'); + const dependencies = findDependencies(DIR); + const missingDeps = getMissingPeerDepsForYarn(DIR, dependencies); + expect(missingDeps.values()).toContain('react'); + expect(missingDeps.values()).toContain('react-native-gesture-handler'); + expect(missingDeps.values()).toContain('react-native-safe-area-view'); }); }); @@ -223,7 +198,8 @@ describe('resolveTransitiveDeps', () => { it('should display list of missing peer dependencies if there are any', async () => { createTempFiles(); prompts.prompt.mockReturnValue({}); - await resolveTransitiveDeps(DIR); + const dependencies = findDependencies(DIR); + await resolveTransitiveDeps(DIR, dependencies); expect(logger.warn).toHaveBeenCalledWith( 'Looks like you are missing some of the peer dependencies of your libraries:\n', ); @@ -233,15 +209,16 @@ describe('resolveTransitiveDeps', () => { writeFiles(DIR, { 'package.json': JSON.stringify(rootPackageJson), }); - - await resolveTransitiveDeps(DIR); + const dependencies = findDependencies(DIR); + await resolveTransitiveDeps(DIR, dependencies); expect(logger.warn).not.toHaveBeenCalled(); }); it('should prompt user to install missing peer dependencies', async () => { createTempFiles(); prompts.prompt.mockReturnValue({}); - await resolveTransitiveDeps(DIR); + const dependencies = findDependencies(DIR); + await resolveTransitiveDeps(DIR, dependencies); expect(prompts.prompt).toHaveBeenCalledWith({ type: 'confirm', name: 'install', @@ -252,6 +229,7 @@ describe('resolveTransitiveDeps', () => { it('should install missing peer dependencies if user confirms', async () => { createTempFiles(); + const dependencies = findDependencies(DIR); prompts.prompt.mockReturnValue({install: true}); mockFetchJson.mockReturnValueOnce({ versions: { @@ -260,8 +238,8 @@ describe('resolveTransitiveDeps', () => { }, }); - const resolveDeps = await resolveTransitiveDeps(DIR); + const resolveDeps = await resolveTransitiveDeps(DIR, dependencies); - expect(resolveDeps).toBe(true); + expect(resolveDeps).toEqual(['react-native-gesture-handler@^2.1.0']); }); }); diff --git a/packages/cli-tools/src/index.ts b/packages/cli-tools/src/index.ts index e083bc48a..b77a52b43 100644 --- a/packages/cli-tools/src/index.ts +++ b/packages/cli-tools/src/index.ts @@ -21,5 +21,6 @@ export * from './resolveTransitiveDeps'; export * from './npm'; export * from './bun'; export * from './yarn'; +export * as PackageManager from './packageManager'; export * from './errors'; diff --git a/packages/cli/src/tools/packageManager.ts b/packages/cli-tools/src/packageManager.ts similarity index 92% rename from packages/cli/src/tools/packageManager.ts rename to packages/cli-tools/src/packageManager.ts index d7b95ce49..39c6dce04 100644 --- a/packages/cli/src/tools/packageManager.ts +++ b/packages/cli-tools/src/packageManager.ts @@ -1,13 +1,8 @@ import execa from 'execa'; -import { - getBunVersionIfAvailable, - getNpmVersionIfAvailable, - getYarnVersionIfAvailable, - isProjectUsingBun, - isProjectUsingNpm, - isProjectUsingYarn, - logger, -} from '@react-native-community/cli-tools'; +import {getYarnVersionIfAvailable, isProjectUsingYarn} from './yarn'; +import {getBunVersionIfAvailable, isProjectUsingBun} from './bun'; +import {getNpmVersionIfAvailable, isProjectUsingNpm} from './npm'; +import logger from './logger'; export type PackageManager = keyof typeof packageManagers; diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index 98ec0a4c6..e29f39cdc 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -128,6 +128,7 @@ export function findPeerDepsToInstall( return peerDependencies; } + export function getMissingPeerDepsForYarn( root: string, dependencies: DependencyMap, diff --git a/packages/cli/src/commands/init/__tests__/template.test.ts b/packages/cli/src/commands/init/__tests__/template.test.ts index f30e51dc2..b2369bc5c 100644 --- a/packages/cli/src/commands/init/__tests__/template.test.ts +++ b/packages/cli/src/commands/init/__tests__/template.test.ts @@ -2,7 +2,7 @@ jest.mock('execa', () => jest.fn()); import execa from 'execa'; import path from 'path'; import fs from 'fs'; -import * as PackageManger from '../../../tools/packageManager'; +import {PackageManager} from '@react-native-community/cli-tools'; import { installTemplatePackage, getTemplateConfig, @@ -20,11 +20,11 @@ afterEach(() => { }); test('installTemplatePackage', async () => { - jest.spyOn(PackageManger, 'install').mockImplementationOnce(() => null); + jest.spyOn(PackageManager, 'install').mockImplementationOnce(jest.fn()); await installTemplatePackage(TEMPLATE_NAME, TEMPLATE_SOURCE_DIR, 'npm'); - expect(PackageManger.install).toHaveBeenCalledWith([TEMPLATE_NAME], { + expect(PackageManager.install).toHaveBeenCalledWith([TEMPLATE_NAME], { packageManager: 'npm', silent: true, root: TEMPLATE_SOURCE_DIR, diff --git a/packages/cli/src/commands/init/init.ts b/packages/cli/src/commands/init/init.ts index 56b2eaee5..a09dd5be9 100644 --- a/packages/cli/src/commands/init/init.ts +++ b/packages/cli/src/commands/init/init.ts @@ -15,6 +15,7 @@ import { getBunVersionIfAvailable, getNpmVersionIfAvailable, getYarnVersionIfAvailable, + PackageManager, } from '@react-native-community/cli-tools'; import {installPods} from '@react-native-community/cli-platform-ios'; import { @@ -24,7 +25,6 @@ import { executePostInitScript, } from './template'; import {changePlaceholderInTemplate} from './editTemplate'; -import * as PackageManager from '../../tools/packageManager'; import banner from './banner'; import TemplateAndVersionError from './errors/TemplateAndVersionError'; import {createHash} from 'crypto'; diff --git a/packages/cli/src/commands/init/template.ts b/packages/cli/src/commands/init/template.ts index c5966fe82..b7333ed00 100644 --- a/packages/cli/src/commands/init/template.ts +++ b/packages/cli/src/commands/init/template.ts @@ -1,7 +1,10 @@ import execa from 'execa'; import path from 'path'; -import {logger, CLIError} from '@react-native-community/cli-tools'; -import * as PackageManager from '../../tools/packageManager'; +import { + logger, + CLIError, + PackageManager, +} from '@react-native-community/cli-tools'; import copyFiles from '../../tools/copyFiles'; import replacePathSepForRegex from '../../tools/replacePathSepForRegex'; import fs from 'fs'; @@ -21,7 +24,7 @@ export async function installTemplatePackage( ) { logger.debug(`Installing template from ${templateName}`); - await PackageManager.init({ + PackageManager.init({ packageManager, silent: true, root, From e5c37200000e6bd0318234a9386d872048adfa08 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 29 Sep 2023 10:48:20 +0200 Subject: [PATCH 22/23] add bun support --- packages/cli-tools/src/packageManager.ts | 11 ++++ .../cli-tools/src/resolveTransitiveDeps.ts | 55 ++++++++++--------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/packages/cli-tools/src/packageManager.ts b/packages/cli-tools/src/packageManager.ts index 39c6dce04..776f56f60 100644 --- a/packages/cli-tools/src/packageManager.ts +++ b/packages/cli-tools/src/packageManager.ts @@ -85,6 +85,17 @@ export function shouldUseNpm(options: Options) { return isProjectUsingNpm(options.root) && getNpmVersionIfAvailable(); } +export function getProjectPackageManager(root: string) { + if (isProjectUsingYarn(root)) { + return 'yarn'; + } + if (isProjectUsingBun(root)) { + return 'bun'; + } + + return 'npm'; +} + export function init(options: Options) { return configurePackageManager([], 'init', options); } diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index e29f39cdc..f023d2533 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -6,9 +6,13 @@ import {prompt} from 'prompts'; import execa from 'execa'; import semver from 'semver'; import {DependencyMap} from '@react-native-community/cli-types'; -import {isProjectUsingYarn} from './yarn'; import {getLoader} from './loader'; import logger from './logger'; +import { + PackageManager, + getProjectPackageManager, + install, +} from './packageManager'; export async function fetchAvailableVersions( packageName: string, @@ -129,26 +133,25 @@ export function findPeerDepsToInstall( return peerDependencies; } -export function getMissingPeerDepsForYarn( - root: string, - dependencies: DependencyMap, -) { +export function getMissingPeerDeps(root: string, dependencies: DependencyMap) { const depsToInstall = findPeerDepsToInstall(root, dependencies); return depsToInstall; } -// install peer deps with yarn without making any changes to package.json and yarn.lock -export function yarnSilentInstallPeerDeps( +// install peer deps with yarn/bun without making any changes to package.json and yarn.lock/bun.lockb +export function silentInstallPeerDeps( root: string, missingPeerDependencies: DependencyMap, + pkgManager: PackageManager, ) { - const dependenciesToInstall = getMissingPeerDepsForYarn( + const dependenciesToInstall = getMissingPeerDeps( root, missingPeerDependencies, ); + const lockfile = pkgManager === 'yarn' ? 'yarn.lock' : 'bun.lockb'; const packageJsonPath = path.join(root, 'package.json'); - const lockfilePath = path.join(root, 'yarn.lock'); + const lockfilePath = path.join(root, lockfile); if (dependenciesToInstall.size > 0) { const binPackageJson = fs.readFileSync(packageJsonPath, { @@ -164,14 +167,14 @@ export function yarnSilentInstallPeerDeps( } if (!binLockfile) { - logger.error('yarn.lock is missing'); + logger.error(`${lockfile} is missing`); return; } const loader = getLoader({text: 'Looking for peer dependencies...'}); loader.start(); try { - execa.sync('yarn', ['add', ...dependenciesToInstall]); + execa.sync(pkgManager, ['add', ...dependenciesToInstall]); loader.succeed(); } catch { loader.fail('Failed to verify peer dependencies'); @@ -204,13 +207,14 @@ export async function promptForMissingPeerDependencies( .replace(/,/g, ''), ); - const {install} = await prompt({ + const {installDependencies} = await prompt({ type: 'confirm', - name: 'install', + name: 'installDependencies', message: 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', }); - return install; + + return installDependencies; } export async function getPackagesVersion( @@ -250,9 +254,9 @@ export async function getPackagesVersion( return workingVersions; } -export function installMissingPackages( +export async function installMissingPackages( packages: Record, - yarn = true, + pkgManager: PackageManager, ) { const packageVersions = Object.entries(packages).map( ([name, version]) => `${name}@^${version}`, @@ -261,13 +265,14 @@ export function installMissingPackages( const loader = getLoader({text: 'Installing peer dependencies...'}); loader.start(); + try { const deps = flattenList.map((dep) => dep); - if (yarn) { - execa.sync('yarn', ['add', ...deps]); - } else { - execa.sync('npm', ['install', ...deps]); - } + await install(deps, { + packageManager: pkgManager, + root: process.cwd(), + silent: true, + }); loader.succeed(); return deps; @@ -282,10 +287,10 @@ export async function resolveTransitiveDeps( root: string, dependencyMap: DependencyMap, ) { - const isYarn = !!isProjectUsingYarn(root); + const packageManager = getProjectPackageManager(root); - if (isYarn) { - yarnSilentInstallPeerDeps(root, dependencyMap); + if (packageManager !== 'npm') { + silentInstallPeerDeps(root, dependencyMap, packageManager); } const nonEmptyPeers = filterNativeDependencies(root, dependencyMap); const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); @@ -298,7 +303,7 @@ export async function resolveTransitiveDeps( if (installDeps) { const packagesVersions = await getPackagesVersion(nonInstalledPeers); - return installMissingPackages(packagesVersions, isYarn); + return installMissingPackages(packagesVersions, packageManager); } } From 6b48cff9984ae1ee524eedb1aef761011349aa22 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Fri, 29 Sep 2023 14:54:59 +0200 Subject: [PATCH 23/23] update tests --- .../__tests__/__snapshots__/index-test.ts.snap | 5 +++++ packages/cli-config/src/__tests__/index-test.ts | 1 + .../src/__tests__/resolveTransitiveDeps.test.ts | 16 ++++++---------- packages/cli-tools/src/resolveTransitiveDeps.ts | 3 +-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap index 10dc100fd..505caac8e 100644 --- a/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap +++ b/packages/cli-config/src/__tests__/__snapshots__/index-test.ts.snap @@ -11,6 +11,7 @@ Object { ], "podspecPath": "<>/node_modules/react-native-test/ReactNativeTest.podspec", "scriptPhases": Array [], + "version": "0.0.1", }, }, "root": "<>/node_modules/react-native-test", @@ -57,6 +58,7 @@ Object { "path": "./phase.sh", }, ], + "version": "0.0.1", }, }, "root": "<>/node_modules/react-native-test", @@ -107,6 +109,7 @@ Object { "show_env_vars_in_log": false, }, ], + "version": "0.0.1", }, }, "root": "<>/node_modules/react-native-test", @@ -131,6 +134,7 @@ Object { "configurations": Array [], "podspecPath": "<>/node_modules/react-native-test/ReactNativeTest.podspec", "scriptPhases": Array [], + "version": "0.0.1", }, }, "root": "<>/node_modules/react-native-test", @@ -149,6 +153,7 @@ Object { ], "podspecPath": "<>/node_modules/react-native-test/ReactNativeTest.podspec", "scriptPhases": Array [], + "version": "0.0.1", }, }, "root": "<>/node_modules/react-native-test", diff --git a/packages/cli-config/src/__tests__/index-test.ts b/packages/cli-config/src/__tests__/index-test.ts index b281a329a..b7157e310 100644 --- a/packages/cli-config/src/__tests__/index-test.ts +++ b/packages/cli-config/src/__tests__/index-test.ts @@ -322,6 +322,7 @@ module.exports = { "configurations": Array [], "podspecPath": "custom-path", "scriptPhases": Array [], + "version": "0.0.1", }, }, "root": "<>/native-libs/local-lib", diff --git a/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts b/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts index 18d8a2527..7696efda1 100644 --- a/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts +++ b/packages/cli-tools/src/__tests__/resolveTransitiveDeps.test.ts @@ -6,16 +6,13 @@ import { filterInstalledPeers, filterNativeDependencies, findDependencyPath, - getMissingPeerDepsForYarn, + getMissingPeerDeps, resolveTransitiveDeps, } from '../resolveTransitiveDeps'; import logger from '../logger'; import findDependencies from '../../../cli-config/src/findDependencies'; -jest.mock('execa', () => { - return {sync: jest.fn()}; -}); - +jest.mock('execa', () => jest.fn()); jest.mock('prompts', () => ({prompt: jest.fn()})); jest.mock('../logger', () => ({ @@ -65,7 +62,7 @@ const elementsPackageJson = { const gestureHandlerPackageJson = { name: 'react-native-gesture-handler', - version: '1.10.3', + version: '2.1.0', }; const DIR = getTempDirectory('root_test'); @@ -164,7 +161,6 @@ describe('filterNativeDependencies', () => { }); const dependencies = findDependencies(DIR); const filtered = filterNativeDependencies(DIR, dependencies); - expect(filtered.keys()).toContain('@react-navigation/stack'); expect(filtered.keys()).toContain('@react-navigation/elements'); }); }); @@ -187,7 +183,7 @@ describe('getMissingPeerDepsForYarn', () => { it('should return an array of peer dependencies to install', () => { createTempFiles(); const dependencies = findDependencies(DIR); - const missingDeps = getMissingPeerDepsForYarn(DIR, dependencies); + const missingDeps = getMissingPeerDeps(DIR, dependencies); expect(missingDeps.values()).toContain('react'); expect(missingDeps.values()).toContain('react-native-gesture-handler'); expect(missingDeps.values()).toContain('react-native-safe-area-view'); @@ -221,7 +217,7 @@ describe('resolveTransitiveDeps', () => { await resolveTransitiveDeps(DIR, dependencies); expect(prompts.prompt).toHaveBeenCalledWith({ type: 'confirm', - name: 'install', + name: 'installDependencies', message: 'Do you want to install them now? The matching versions will be added as project dependencies and become visible for autolinking.', }); @@ -230,7 +226,7 @@ describe('resolveTransitiveDeps', () => { it('should install missing peer dependencies if user confirms', async () => { createTempFiles(); const dependencies = findDependencies(DIR); - prompts.prompt.mockReturnValue({install: true}); + prompts.prompt.mockReturnValue({installDependencies: true}); mockFetchJson.mockReturnValueOnce({ versions: { '2.0.0': {}, diff --git a/packages/cli-tools/src/resolveTransitiveDeps.ts b/packages/cli-tools/src/resolveTransitiveDeps.ts index f023d2533..d3b0ce829 100644 --- a/packages/cli-tools/src/resolveTransitiveDeps.ts +++ b/packages/cli-tools/src/resolveTransitiveDeps.ts @@ -268,7 +268,7 @@ export async function installMissingPackages( try { const deps = flattenList.map((dep) => dep); - await install(deps, { + install(deps, { packageManager: pkgManager, root: process.cwd(), silent: true, @@ -294,7 +294,6 @@ export async function resolveTransitiveDeps( } const nonEmptyPeers = filterNativeDependencies(root, dependencyMap); const nonInstalledPeers = filterInstalledPeers(root, nonEmptyPeers); - if (Object.keys(nonInstalledPeers).length > 0) { const installDeps = await promptForMissingPeerDependencies( nonInstalledPeers,