diff --git a/dev_docs/contributing/third_party_dependencies.mdx b/dev_docs/contributing/third_party_dependencies.mdx index e86019126bd26..953f0be50fd75 100644 --- a/dev_docs/contributing/third_party_dependencies.mdx +++ b/dev_docs/contributing/third_party_dependencies.mdx @@ -170,7 +170,7 @@ Here is an example configuration for a dependency in the `renovate.json` file: "release_note:skip", "backport:all-open", "effort:low", - "risk:high" + "upgrade-risk:high" ], // [5] "minimumReleaseAge": "7 days", @@ -185,7 +185,7 @@ Here is an example configuration for a dependency in the `renovate.json` file: [3] `matchBaseBranches`: The branches that the rule will apply to. This should be set to `main` for most dependencies. -[4] `labels`: Labels to apply to the PRs created by Renovate. The `Team:My-Team-Label` label should be replaced with your team's GitHub label from the Kibana repository. Include an `effort:low|medium|high` label to indicate the level of effort required to update the codebase, and a `risk:low|medium|high` label to indicate the level of testing required to be confident in the changes. The `release_note:skip` and `backport:all-open` labels are used to control the release process and should not be changed without first consulting the AppEx Platform Security team. +[4] `labels`: Labels to apply to the PRs created by Renovate. The `Team:My-Team-Label` label should be replaced with your team's GitHub label from the Kibana repository. Include an `effort:low|medium|high` label to indicate the level of effort required to update the codebase, and an `upgrade-risk:low|medium|high` label to indicate the level of testing required to be confident in the changes. The `release_note:skip` and `backport:all-open` labels are used to control the release process and should not be changed without first consulting the AppEx Platform Security team. [5] `minimumReleaseAge`: The minimum age of a release before it can be upgraded. This is set to `7 days` to allow time for any issues to be identified and resolved before upgrading. You may adjust this value as needed. diff --git a/package.json b/package.json index 5784388bb948a..eb2b662fd6436 100644 --- a/package.json +++ b/package.json @@ -1684,7 +1684,6 @@ "@types/json5": "^2.2.0", "@types/jsonwebtoken": "^9.0.0", "@types/license-checker": "15.0.0", - "@types/loader-utils": "^2.0.3", "@types/lodash": "^4.17.20", "@types/lz-string": "^1.5.0", "@types/mapbox__vector-tile": "1.3.0", diff --git a/packages/kbn-dependency-ownership/src/cli.ts b/packages/kbn-dependency-ownership/src/cli.ts index 00c8d6cb7f0fd..7ea1aeec591b8 100644 --- a/packages/kbn-dependency-ownership/src/cli.ts +++ b/packages/kbn-dependency-ownership/src/cli.ts @@ -46,8 +46,11 @@ export async function identifyDependencyOwnershipCLI() { const result = identifyDependencyOwnership({ dependency, owner, missingOwner }); if (failIfUnowned) { - const { prodDependencies = [] as string[], devDependencies = [] as string[] } = - result as DependenciesByOwner; + const { + prodDependencies = [] as string[], + devDependencies = [] as string[], + invalidRenovateRules = [] as string[], + } = result as DependenciesByOwner; const uncoveredDependencies = [...prodDependencies, ...devDependencies]; if (uncoveredDependencies.length > 0) { @@ -56,9 +59,17 @@ export async function identifyDependencyOwnershipCLI() { throw createFailError( `Found ${uncoveredDependencies.length} dependencies without an owner. Please update \`renovate.json\` to include these dependencies.\nVisit https://docs.elastic.dev/kibana-dev-docs/third-party-dependencies#dependency-ownership for more information.` ); - } else { - log.success('All dependencies have an owner'); } + + if (invalidRenovateRules.length > 0) { + log.write('Invalid renovate rules:'); + log.write(invalidRenovateRules.map((rule) => ` - ${rule}`).join('\n')); + throw createFailError( + `Found ${invalidRenovateRules.length} invalid renovate rules. Please update \`renovate.json\` to fix these errors.\nVisit https://docs.elastic.dev/kibana-dev-docs/third-party-dependencies#dependency-ownership for more information.` + ); + } + + log.success('All dependencies have an owner'); } if (outputPath) { diff --git a/packages/kbn-dependency-ownership/src/dependency_ownership.test.ts b/packages/kbn-dependency-ownership/src/dependency_ownership.test.ts index 70f90338e1e6d..df16617ee978f 100644 --- a/packages/kbn-dependency-ownership/src/dependency_ownership.test.ts +++ b/packages/kbn-dependency-ownership/src/dependency_ownership.test.ts @@ -7,8 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import type { DependenciesByOwner } from './dependency_ownership'; import { identifyDependencyOwnership } from './dependency_ownership'; import { parseConfig } from './parse_config'; +import { ruleFilter } from './rule'; jest.mock('./parse_config', () => ({ parseConfig: jest.fn(), @@ -18,23 +20,33 @@ describe('identifyDependencyOwnership', () => { const mockConfig = { renovateRules: [ { + groupName: 'core-libs', reviewers: ['team:elastic', 'team:infra'], matchPackageNames: ['lodash', 'react'], enabled: true, }, { + groupName: 'testing-libs', reviewers: ['team:ui'], - matchPackageNames: ['@testing-library/react'], + matchPackageNames: ['@testing-library/react', 'undefined-package'], enabled: true, }, { + groupName: 'resolved-libs', + reviewers: ['team:resolved'], + matchPackageNames: ['some-resolved-lib'], + enabled: true, + }, + { + groupName: 'disabled-libs', reviewers: ['team:disabled-team'], matchPackageNames: ['disabled-package'], enabled: false, // Disabled rule }, - ], - packageDependencies: ['lodash', 'react'], + ].filter(ruleFilter), + packageDependencies: ['lodash', 'react', 'disabled-package'], packageDevDependencies: ['jest', '@testing-library/react'], + packageResolutions: ['**/some-resolved-lib'], }; beforeEach(() => { @@ -80,13 +92,26 @@ describe('identifyDependencyOwnership', () => { }); it('returns uncovered dependencies when missingOwner is true', () => { - const result = identifyDependencyOwnership({ missingOwner: true }); - expect(result).toEqual({ - prodDependencies: [], + const { prodDependencies, devDependencies } = identifyDependencyOwnership({ + missingOwner: true, + }) as DependenciesByOwner; + expect({ prodDependencies, devDependencies }).toEqual({ + prodDependencies: ['disabled-package'], devDependencies: ['jest'], }); }); + it('returns renovate rule errors for undeclared dependencies', () => { + const { invalidRenovateRules } = identifyDependencyOwnership({ + missingOwner: true, + }) as DependenciesByOwner; + expect(invalidRenovateRules).toMatchInlineSnapshot(` + Array [ + "Invalid renovate rule: 'testing-libs' declares package 'undefined-package', which is not found in package.json.", + ] + `); + }); + it('returns comprehensive ownership coverage, considering only enabled rules', () => { const result = identifyDependencyOwnership({}); expect(result).toEqual({ @@ -94,15 +119,15 @@ describe('identifyDependencyOwnership', () => { '@elastic/elastic': ['lodash', 'react'], '@elastic/infra': ['lodash', 'react'], '@elastic/ui': [], - '@elastic/disabled-team': [], + '@elastic/resolved': [], }, devDependenciesByOwner: { '@elastic/elastic': [], '@elastic/infra': [], '@elastic/ui': ['@testing-library/react'], - '@elastic/disabled-team': [], + '@elastic/resolved': [], }, - uncoveredProdDependencies: [], + uncoveredProdDependencies: ['disabled-package'], uncoveredDevDependencies: ['jest'], coveredProdDependencies: ['lodash', 'react'], coveredDevDependencies: ['@testing-library/react'], diff --git a/packages/kbn-dependency-ownership/src/dependency_ownership.ts b/packages/kbn-dependency-ownership/src/dependency_ownership.ts index 7a384dc12b79a..2377fe60c7761 100644 --- a/packages/kbn-dependency-ownership/src/dependency_ownership.ts +++ b/packages/kbn-dependency-ownership/src/dependency_ownership.ts @@ -21,6 +21,7 @@ interface GetDependencyOwnershipParams { export interface DependenciesByOwner { prodDependencies: string[]; devDependencies: string[]; + invalidRenovateRules?: string[]; } interface DependenciesByOwners { @@ -106,6 +107,31 @@ const getDependenciesByOwner = (): DependenciesByOwners => { return dependenciesByOwner; }; +const getInvalidRenovateRules = (): string[] => { + const { renovateRules, packageDependencies, packageDevDependencies, packageResolutions } = + parseConfig(); + const declaredDependencies = new Set([...packageDependencies, ...packageDevDependencies]); + + const errors: string[] = []; + + renovateRules.forEach((rule) => { + const { matchPackageNames = [], matchDepNames = [] } = rule; + const allMatchedNames = [...matchPackageNames, ...matchDepNames]; + allMatchedNames.forEach((name) => { + if ( + !declaredDependencies.has(name) && + !packageResolutions.some((resolution) => resolution.includes(name)) + ) { + errors.push( + `Invalid renovate rule: '${rule.groupName}' declares package '${name}', which is not found in package.json.` + ); + } + }); + }); + + return errors; +}; + const getDependenciesCoverage = (): DependenciesCoverage => { const { renovateRules, packageDependencies, packageDevDependencies } = parseConfig(); @@ -168,10 +194,13 @@ export const identifyDependencyOwnership = ({ coveredProdDependencies, } = getDependenciesCoverage(); + const invalidRenovateRules = getInvalidRenovateRules(); + if (missingOwner) { return { prodDependencies: uncoveredProdDependencies, devDependencies: uncoveredDevDependencies, + invalidRenovateRules, }; } diff --git a/packages/kbn-dependency-ownership/src/parse_config.ts b/packages/kbn-dependency-ownership/src/parse_config.ts index ffcd5662b4d6d..b9151d8374238 100644 --- a/packages/kbn-dependency-ownership/src/parse_config.ts +++ b/packages/kbn-dependency-ownership/src/parse_config.ts @@ -17,6 +17,7 @@ export const parseConfig = (() => { renovateRules: RenovatePackageRule[]; packageDependencies: string[]; packageDevDependencies: string[]; + packageResolutions: string[]; } | null = null; return () => { @@ -37,8 +38,9 @@ export const parseConfig = (() => { const packageDevDependencies = Object.keys(packageConfig?.devDependencies || {}).filter( packageFilter ); + const packageResolutions = Object.keys(packageConfig?.resolutions || {}); - cache = { renovateRules, packageDependencies, packageDevDependencies }; + cache = { renovateRules, packageDependencies, packageDevDependencies, packageResolutions }; return cache; }; })(); diff --git a/packages/kbn-dependency-ownership/src/rule.ts b/packages/kbn-dependency-ownership/src/rule.ts index 1348c1f038f40..2d6be16da1f01 100644 --- a/packages/kbn-dependency-ownership/src/rule.ts +++ b/packages/kbn-dependency-ownership/src/rule.ts @@ -13,6 +13,7 @@ export interface RenovatePackageRule { matchDepNames?: string[]; matchPackagePatterns?: string[]; matchDepPatterns?: string[]; + matchManagers?: string[]; excludePackageNames?: string[]; excludePackagePatterns?: string[]; enabled?: boolean; @@ -26,11 +27,18 @@ export function ruleFilter(rule: RenovatePackageRule) { 'typescript', // These updates are always handled manually 'webpack', // While we are in the middle of a webpack upgrade. TODO: Remove this once we are done. ]; + // Rules that use custom managers are not supported by this tool, and are ignored. + const rulesWithCustomManagers = ['chainguard', 'chainguard-fips']; + return ( // Only include rules that are enabled or explicitly allowed to be disabled (allowedDisabledRules.includes(rule.groupName) || rule.enabled !== false) && // Only include rules that have a team reviewer - rule.reviewers?.some((reviewer) => reviewer.startsWith('team:')) + rule.reviewers?.some((reviewer) => reviewer.startsWith('team:')) && + // Only include rules that use the default manager, or specify npm + (!rule.matchManagers || !rule.matchManagers.length || rule.matchManagers.includes('npm')) && + // Exclude rules that use custom managers + !rulesWithCustomManagers.includes(rule.groupName) ); } diff --git a/renovate.json b/renovate.json index 520b0e2532544..2d11674325f1f 100644 --- a/renovate.json +++ b/renovate.json @@ -48,13 +48,10 @@ "clean-webpack-plugin", "css-loader", "file-loader", - "loader-utils", "mini-css-extract-plugin", "postcss-loader", - "raw-loader", "sass-loader", "style-loader", - "url-loader", "val-loader", "webpack", "webpack-bundle-analyzer", @@ -62,13 +59,10 @@ "webpack-dev-server", "webpack-merge", "webpack-sources", - "webpack-visualizer-plugin2", "@statoscope/webpack-plugin", - "@types/loader-utils", "@types/webpack", "@types/webpack-bundle-analyzer", "@types/webpack-env", - "@types/webpack-merge", "@types/webpack-sources" ], "reviewers": [ @@ -226,7 +220,6 @@ "pixelmatch", "@playwright/test", "playwright", - "playwright-chromium", "pngjs", "qs", "react-test-renderer", @@ -525,7 +518,7 @@ "Team:SharedUX", "release_note:skip", "effort:high", - "risk:high", + "upgrade-risk:high", "backport:all-open" ], "enabled": true @@ -592,7 +585,7 @@ "release_note:skip", "backport:all-open", "effort:high", - "risk:high" + "upgrade-risk:high" ], "enabled": true }, @@ -656,8 +649,7 @@ "groupName": "monaco", "matchDepNames": [ "monaco-yaml", - "monaco-editor", - "react-monaco-editor" + "monaco-editor" ], "reviewers": [ "team:appex-sharedux" @@ -780,8 +772,7 @@ { "groupName": "tar", "matchDepNames": [ - "tar", - "@types/tar" + "tar" ], "reviewers": [ "team:fleet", @@ -797,7 +788,7 @@ "enabled": true }, { - "groupName": "unified", + "groupName": "unified - ESM Required", "matchDepNames": [ "unified" ], @@ -810,7 +801,9 @@ ], "labels": [ "release_note:skip", - "backport:all-open" + "backport:all-open", + "blocked", + "effort:low" ], "enabled": true }, @@ -1148,26 +1141,6 @@ "enabled": true, "minimumReleaseAge": "7 days" }, - { - "groupName": "@elastic/kibana-visualizations Test dependencies", - "matchDepNames": [ - "@types/faker", - "faker" - ], - "reviewers": [ - "team:kibana-visualizations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Visualizations", - "release_note:skip", - "backport:prev-minor" - ], - "enabled": true, - "minimumReleaseAge": "7 days" - }, { "groupName": "@elastic/charts", "matchDepNames": [ @@ -1295,8 +1268,7 @@ "launchdarkly-js-client-sdk", "@openfeature/launchdarkly-client-provider", "@launchdarkly/node-server-sdk", - "@launchdarkly/openfeature-node-server", - "launchdarkly/find-code-references" + "@launchdarkly/openfeature-node-server" ], "reviewers": [ "team:kibana-security", @@ -1315,6 +1287,29 @@ "minimumReleaseAge": "7 days", "enabled": true }, + { + "groupName": "LaunchDarkly GitHub Actions", + "matchDepNames": [ + "launchdarkly/find-code-references" + ], + "reviewers": [ + "team:kibana-core" + ], + "matchBaseBranches": [ + "main" + ], + "matchManagers": [ + "github-actions" + ], + "labels": [ + "release_note:skip", + "Team:Core", + "backport:prev-minor", + "backport:prev-major" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, { "groupName": "OpenFeature", "matchDepNames": [ @@ -1487,10 +1482,7 @@ "@hapi/wreck", "brok", "joi", - "@types/hapi__cookie", - "@types/hapi__h2o2", - "@types/hapi__hapi", - "@types/hapi__inert" + "@types/hapi__cookie" ], "reviewers": [ "team:kibana-core" @@ -1510,7 +1502,6 @@ "groupName": "babel", "matchDepNames": [ "@emotion/babel-preset-css-prop", - "@types/babel__core", "babel-loader" ], "matchDepPatterns": [ @@ -2305,7 +2296,8 @@ "Team:Search", "Team:Enterprise Search", "backport:all-open", - "effort:high" + "effort:high", + "upgrade-risk:medium" ], "minimumReleaseAge": "7 days", "enabled": true @@ -2713,7 +2705,6 @@ "expose-loader", "html-loader", "jsondiffpatch", - "null-loader", "object-path-immutable", "postcss-prefix-selector", "safe-squel", @@ -2737,11 +2728,8 @@ "groupName": "reporting dependencies", "matchDepNames": [ "@types/extract-zip", - "@types/opn", "@types/pdfmake", "extract-zip", - "opn", - "pdfjs-dist", "pdfmake", "puppeteer" ], @@ -3243,6 +3231,27 @@ "minimumReleaseAge": "7 days", "enabled": true }, + { + "groupName": "camelcase-keys - ESM Required", + "matchDepNames": [ + "camelcase-keys" + ], + "reviewers": [ + "team:security-solution" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team: SecuritySolution", + "backport:all-open", + "release_note:skip", + "effort:low", + "blocked" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, { "groupName": "papaparse", "matchDepNames": [ @@ -3285,7 +3294,7 @@ "enabled": true }, { - "groupName": "p-map", + "groupName": "p-map - ESM Required", "matchDepNames": [ "p-map" ], @@ -3299,13 +3308,15 @@ ], "labels": [ "backport:all-open", - "release_note:skip" + "release_note:skip", + "effort:low", + "blocked" ], "minimumReleaseAge": "7 days", "enabled": true }, { - "groupName": "p-retry", + "groupName": "p-retry - ESM Required", "matchDepNames": [ "p-retry" ], @@ -3319,7 +3330,9 @@ ], "labels": [ "backport:all-open", - "release_note:skip" + "release_note:skip", + "blocked", + "effort:low" ], "minimumReleaseAge": "7 days", "enabled": true @@ -3444,8 +3457,7 @@ "@types/node-forge", "@types/object-hash", "@types/tough-cookie", - "@types/uuid", - "@types/xml-crypto" + "@types/uuid" ], "reviewers": [ "team:kibana-security" @@ -3475,7 +3487,8 @@ "labels": [ "Team:Security", "release_note:skip", - "backport:all-open" + "backport:all-open", + "blocked" ], "minimumReleaseAge": "7 days", "enabled": true @@ -3486,6 +3499,9 @@ "github/codeql-action/analyze", "github/codeql-action/init" ], + "matchManagers": [ + "github-actions" + ], "reviewers": [ "team:kibana-security" ], @@ -3624,8 +3640,7 @@ "@testing-library/jest-dom", "@testing-library/react", "@testing-library/react-hooks", - "@testing-library/user-event", - "@types/testing-library__jest-dom" + "@testing-library/user-event" ], "reviewers": [ "team:kibana-operations" @@ -3911,7 +3926,7 @@ "backport:all-open", "ci:all-cypress-suites", "effort:high", - "risk:high" + "upgrade-risk:high" ], "minimumReleaseAge": "7 days", "enabled": true @@ -3938,7 +3953,6 @@ { "groupName": "Cytoscape", "matchDepNames": [ - "@types/cytoscape", "cytoscape", "cytoscape-dagre" ], diff --git a/yarn.lock b/yarn.lock index 9a354ba7a28b5..5696bb5390258 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12557,14 +12557,6 @@ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" integrity sha512-Q7DYAOi9O/+cLLhdaSvKdaumWyHbm7HAk/bFwwyTuU0arR5yyCeW5GOoqt4tJTpDRxhpx9Q8kQL6vMpuw9hDSw== -"@types/loader-utils@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/loader-utils/-/loader-utils-2.0.3.tgz#fbc2337358f8f4a7dc532ac0a3646c74275edf2d" - integrity sha512-sDXXzZnTLXgdso54/iOpAFSDgqhVXabCvwGAt77Agadh/Xk0QYgOk520r3tpOouI098gyqGIFywx8Op1voc3vQ== - dependencies: - "@types/node" "*" - "@types/webpack" "^4" - "@types/lodash@^4.14.202": version "4.17.0" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" @@ -13235,11 +13227,6 @@ "@types/methods" "^1.1.4" "@types/superagent" "^8.1.0" -"@types/tapable@^1": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" - integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== - "@types/tedious@^4.0.14": version "4.0.14" resolved "https://registry.yarnpkg.com/@types/tedious/-/tedious-4.0.14.tgz#868118e7a67808258c05158e9cad89ca58a2aec1" @@ -13294,13 +13281,6 @@ resolved "https://registry.yarnpkg.com/@types/type-detect/-/type-detect-4.0.1.tgz#3b0f5ac82ea630090cbf57c57a1bf5a63a29b9b6" integrity sha512-0+S1S9Iq0oJ9w9IaBC5W/z1WsPNDUIAJG+THGmqR4vUAxUPCzIY+dApTvyGsaBUWjafTDL0Dg8Z9+iRuk3/BQA== -"@types/uglify-js@*": - version "3.17.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" - integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== - dependencies: - source-map "^0.6.1" - "@types/undertaker-registry@*": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz#4306d4a03d7acedb974b66530832b90729e1d1da" @@ -13392,15 +13372,6 @@ resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.5.tgz#eccda0b04fe024bed505881e2e532f9c119169bf" integrity sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA== -"@types/webpack-sources@*": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" - integrity sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.6.1" - "@types/webpack-sources@^3.2.3": version "3.2.3" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.3.tgz#b667bd13e9fa15a9c26603dce502c7985418c3d8" @@ -13410,18 +13381,6 @@ "@types/source-list-map" "*" source-map "^0.7.3" -"@types/webpack@^4": - version "4.41.32" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" - integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== - dependencies: - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - anymatch "^3.0.0" - source-map "^0.6.0" - "@types/webpack@^5.0.0", "@types/webpack@^5.28.5": version "5.28.5" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-5.28.5.tgz#0e9d9a15efa09bbda2cef41356ca4ac2031ea9a2" @@ -14257,7 +14216,7 @@ antlr4@^4.13.1-patch-1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1-patch-1.tgz#946176f863f890964a050c4f18c47fd6f7e57602" integrity sha512-OjFLWWLzDMV9rdFhpvroCWR4ooktNg9/nvVYSA5z28wuVpU36QUNuioR1XLnQtcjVlf8npjyz593PxnU/f/Cow== -anymatch@^3.0.0, anymatch@^3.0.3, anymatch@^3.1.3, anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -30432,7 +30391,7 @@ string-replace-loader@^3.1.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -30450,6 +30409,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -30542,7 +30510,7 @@ stringify-object@^3.2.1: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -30556,6 +30524,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -33376,7 +33351,7 @@ workerpool@^6.5.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -33402,6 +33377,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -33512,7 +33496,7 @@ xpath@^0.0.33: resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.33.tgz#5136b6094227c5df92002e7c3a13516a5074eb07" integrity sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA== -"xstate5@npm:xstate@^5.19.2", xstate@^5.19.2: +"xstate5@npm:xstate@^5.19.2": version "5.19.2" resolved "https://registry.yarnpkg.com/xstate/-/xstate-5.19.2.tgz#db3f1ee614bbb6a49ad3f0c96ddbf98562d456ba" integrity sha512-B8fL2aP0ogn5aviAXFzI5oZseAMqN00fg/TeDa3ZtatyDcViYLIfuQl4y8qmHCiKZgGEzmnTyNtNQL9oeJE2gw== @@ -33522,6 +33506,11 @@ xstate@^4.38.3: resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.3.tgz#4e15e7ad3aa0ca1eea2010548a5379966d8f1075" integrity sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw== +xstate@^5.19.2: + version "5.19.2" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-5.19.2.tgz#db3f1ee614bbb6a49ad3f0c96ddbf98562d456ba" + integrity sha512-B8fL2aP0ogn5aviAXFzI5oZseAMqN00fg/TeDa3ZtatyDcViYLIfuQl4y8qmHCiKZgGEzmnTyNtNQL9oeJE2gw== + "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"