@samitouri / QOS-React-2 / commits / e3fb7c1de1

feat[devtools]: support x_google_ignoreList source maps extension (#26951)

## Summary This was originally implemented by Mengdi @mondaychen in https://github.com/facebook/react/pull/26506. Because we patch console methods (to append components stack and some other features), errors in console will include `react_devtools_backend-....js` in its stack traces. Example: <img width="763" alt="Screenshot 2023-06-15 at 13 31 49" src="https://github.com/facebook/react/assets/28902667/fa9c3d26-b6c5-4965-af71-62d100cd806d"> Using https://github.com/mondaychen/devtools-ignore-webpack-plugin to support [x_google_ignoreList source maps extension](https://developer.chrome.com/blog/devtools-better-angular-debugging/#the-x_google_ignorelist-source-map-extension). @mondaychen created a react app, which throws an error via `console.error`, when user click on the button - https://3owqsn.csb.app/. Stack trace with these changes: <img width="759" alt="Screenshot 2023-06-14 at 14 26 38" src="https://github.com/facebook/react/assets/28902667/b118b168-3200-4a47-9718-39fc455ea993">

Ruslan Lesiutin committed Jun 21, 2023 at 12:36 UTC e3fb7c1de1ed375e32397b3502a30b8ae4c2db9f
6 files changed +235 -22
packages/react-devtools-extensions/package.json
+2
@@ -39,6 +39,7 @@
39 "chrome-launch": "^1.1.4",
40 "crx": "^5.0.0",
41 "css-loader": "^1.0.1",
42 + "devtools-ignore-webpack-plugin": "^0.1.1",
43 "file-loader": "^6.1.0",
44 "filesize": "^6.0.1",
45 "find": "^0.3.0",
@@ -57,6 +58,7 @@
58 "parse-filepath": "^1.0.2",
59 "process": "0.11.10",
60 "raw-loader": "^3.1.0",
61 + "rimraf": "^5.0.1",
62 "source-map-js": "^0.6.2",
63 "sourcemap-codec": "^1.4.8",
64 "style-loader": "^0.23.1",
packages/react-devtools-extensions/src/__tests__/xGoogleIgnoreList-test.js new
+68
@@ -0,0 +1,68 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + *
7 + * @flow
8 + */
9 +
10 +import {exec} from 'child-process-promise';
11 +import {readFileSync} from 'fs';
12 +import path from 'path';
13 +import {rimrafSync} from 'rimraf';
14 +
15 +describe('x_google_ignoreList source map extension', () => {
16 + jest.setTimeout(30 * 1000);
17 +
18 + const pathToExtensionsPackage = path.resolve(__dirname, '..', '..');
19 + const pathToChromeExtensionBuild = path.join(
20 + pathToExtensionsPackage,
21 + 'chrome/build',
22 + );
23 + const pathToSourceMap = path.resolve(
24 + pathToChromeExtensionBuild,
25 + 'unpacked/build/react_devtools_backend_compact.js.map',
26 + );
27 +
28 + afterAll(() => {
29 + rimrafSync(pathToChromeExtensionBuild);
30 + });
31 +
32 + describe('for dev builds', () => {
33 + it('should include only sources with /node_modules/ and /webpack/ in path', async () => {
34 + await exec('yarn build:chrome:local', {
35 + cwd: pathToExtensionsPackage,
36 + });
37 +
38 + const sourceMapJSON = readFileSync(pathToSourceMap);
39 + const sourceMap = JSON.parse(sourceMapJSON);
40 +
41 + const {sources, x_google_ignoreList} = sourceMap;
42 +
43 + const expectedIgnoreList = [];
44 + for (let sourceIndex = 0; sourceIndex < sources.length; ++sourceIndex) {
45 + const source = sources[sourceIndex];
46 +
47 + if (source.includes('/node_modules/') || source.includes('/webpack/')) {
48 + expectedIgnoreList.push(sourceIndex);
49 + }
50 + }
51 +
52 + expect(x_google_ignoreList).toEqual(expectedIgnoreList);
53 + });
54 + });
55 +
56 + describe('for production builds', function () {
57 + it('should include every source', async () => {
58 + await exec('yarn build:chrome', {cwd: pathToExtensionsPackage});
59 +
60 + const sourceMapJSON = readFileSync(pathToSourceMap);
61 + const sourceMap = JSON.parse(sourceMapJSON);
62 +
63 + const {sources, x_google_ignoreList} = sourceMap;
64 +
65 + expect(sources.length).toBe(x_google_ignoreList.length);
66 + });
67 + });
68 +});
packages/react-devtools-extensions/webpack.backend.js
+12 -1
@@ -2,6 +2,9 @@
2
3 const {resolve} = require('path');
4 const Webpack = require('webpack');
5 +const DevToolsIgnorePlugin = require('devtools-ignore-webpack-plugin');
6 +
7 +const {resolveFeatureFlags} = require('react-devtools-shared/buildUtils');
8 const {
9 DARK_MODE_DIMMED_WARNING_COLOR,
10 DARK_MODE_DIMMED_ERROR_COLOR,
@@ -12,7 +15,6 @@ const {
15 GITHUB_URL,
16 getVersionString,
17 } = require('./utils');
15 -const {resolveFeatureFlags} = require('react-devtools-shared/buildUtils');
18
19 const NODE_ENV = process.env.NODE_ENV;
20 if (!NODE_ENV) {
@@ -78,6 +80,15 @@ module.exports = {
80 'process.env.LIGHT_MODE_DIMMED_ERROR_COLOR': `"${LIGHT_MODE_DIMMED_ERROR_COLOR}"`,
81 'process.env.LIGHT_MODE_DIMMED_LOG_COLOR': `"${LIGHT_MODE_DIMMED_LOG_COLOR}"`,
82 }),
83 + new DevToolsIgnorePlugin({
84 + shouldIgnorePath: function (path) {
85 + if (!__DEV__) {
86 + return true;
87 + }
88 +
89 + return path.includes('/node_modules/') || path.includes('/webpack/');
90 + },
91 + }),
92 ],
93 module: {
94 rules: [
packages/react-devtools-shared/src/__tests__/utils.js
+1 -1
@@ -152,7 +152,7 @@ export function getRendererID(): number {
152 return rendererInterface.renderer.rendererPackageName === 'react-dom';
153 });
154
155 - if (ids == null) {
155 + if (id == null) {
156 throw Error('Could not find renderer.');
157 }
158
scripts/jest/config.build-devtools.js
+1 -1
@@ -69,7 +69,7 @@ module.exports = Object.assign({}, baseConfig, {
69 '/__compiled__/',
70 '/__untransformed__/',
71 ],
72 - testRegex: 'packages/react-devtools-shared/.+/__tests__/[^]+.test.js$',
72 + testRegex: 'packages/react-devtools(-(.+))?/.+/__tests__/[^]+.test.js$',
73 snapshotSerializers: [
74 require.resolve(
75 '../../packages/react-devtools-shared/src/__tests__/__serializers__/dehydratedValueSerializer.js'
yarn.lock
+151 -19
@@ -2092,6 +2092,18 @@
2092 resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
2093 integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
2094
2095 +"@isaacs/cliui@^8.0.2":
2096 + version "8.0.2"
2097 + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
2098 + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
2099 + dependencies:
2100 + string-width "^5.1.2"
2101 + string-width-cjs "npm:string-width@^4.2.0"
2102 + strip-ansi "^7.0.1"
2103 + strip-ansi-cjs "npm:strip-ansi@^6.0.1"
2104 + wrap-ansi "^8.1.0"
2105 + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
2106 +
2107 "@istanbuljs/load-nyc-config@^1.0.0":
2108 version "1.1.0"
2109 resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -2510,6 +2522,11 @@
2522 dependencies:
2523 "@octokit/openapi-types" "^12.11.0"
2524
2525 +"@pkgjs/parseargs@^0.11.0":
2526 + version "0.11.0"
2527 + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
2528 + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
2529 +
2530 "@playwright/test@^1.16.3":
2531 version "1.16.3"
2532 resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.16.3.tgz#99439d07af6a355586393b463fd88315f32d2a57"
@@ -3973,6 +3990,11 @@ ansi-regex@^5.0.1:
3990 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
3991 integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
3992
3993 +ansi-regex@^6.0.1:
3994 + version "6.0.1"
3995 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
3996 + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
3997 +
3998 ansi-styles@^2.2.1:
3999 version "2.2.1"
4000 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -3998,6 +4020,11 @@ ansi-styles@^5.0.0:
4020 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
4021 integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
4022
4023 +ansi-styles@^6.1.0:
4024 + version "6.2.1"
4025 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
4026 + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
4027 +
4028 ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
4029 version "0.1.0"
4030 resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
@@ -6664,6 +6691,11 @@ detect-node@^2.0.4:
6691 resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
6692 integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
6693
6694 +devtools-ignore-webpack-plugin@^0.1.1:
6695 + version "0.1.1"
6696 + resolved "https://registry.yarnpkg.com/devtools-ignore-webpack-plugin/-/devtools-ignore-webpack-plugin-0.1.1.tgz#8f4fcf83019bc361e8a3cf7b7d466a33693de14e"
6697 + integrity sha512-pJ/NGZTQxK1VDoyy8fLm0UV3ugOanostztLKUmzqYnUIKqyUm2ZkIpon6No0gWlpOSMoSpBWTnzrx1cdsbpuyw==
6698 +
6699 diff-sequences@^27.0.6:
6700 version "27.0.6"
6701 resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723"
@@ -6877,6 +6909,11 @@ duplexify@^3.4.2, duplexify@^3.6.0:
6909 readable-stream "^2.0.0"
6910 stream-shift "^1.0.0"
6911
6912 +eastasianwidth@^0.2.0:
6913 + version "0.2.0"
6914 + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
6915 + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
6916 +
6917 ecc-jsbn@~0.1.1:
6918 version "0.1.1"
6919 resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@@ -6953,6 +6990,11 @@ emoji-regex@^8.0.0:
6990 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
6991 integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
6992
6993 +emoji-regex@^9.2.2:
6994 + version "9.2.2"
6995 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
6996 + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
6997 +
6998 emojis-list@^2.0.0:
6999 version "2.1.0"
7000 resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -8289,6 +8331,14 @@ for-in@^1.0.2:
8331 resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
8332 integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
8333
8334 +foreground-child@^3.1.0:
8335 + version "3.1.1"
8336 + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
8337 + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
8338 + dependencies:
8339 + cross-spawn "^7.0.0"
8340 + signal-exit "^4.0.1"
8341 +
8342 forever-agent@~0.6.1:
8343 version "0.6.1"
8344 resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -8611,6 +8661,17 @@ glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glo
8661 once "^1.3.0"
8662 path-is-absolute "^1.0.0"
8663
8664 +glob@^10.2.5:
8665 + version "10.2.7"
8666 + resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.7.tgz#9dd2828cd5bc7bd861e7738d91e7113dda41d7d8"
8667 + integrity sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==
8668 + dependencies:
8669 + foreground-child "^3.1.0"
8670 + jackspeak "^2.0.3"
8671 + minimatch "^9.0.1"
8672 + minipass "^5.0.0 || ^6.0.2"
8673 + path-scurry "^1.7.0"
8674 +
8675 glob@^6.0.1:
8676 version "6.0.4"
8677 resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
@@ -10116,6 +10177,15 @@ isurl@^1.0.0-alpha5:
10177 has-to-string-tag-x "^1.2.0"
10178 is-object "^1.0.1"
10179
10180 +jackspeak@^2.0.3:
10181 + version "2.2.1"
10182 + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
10183 + integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
10184 + dependencies:
10185 + "@isaacs/cliui" "^8.0.2"
10186 + optionalDependencies:
10187 + "@pkgjs/parseargs" "^0.11.0"
10188 +
10189 jed@1.1.1:
10190 version "1.1.1"
10191 resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4"
@@ -11278,6 +11348,11 @@ lru-cache@^6.0.0:
11348 dependencies:
11349 yallist "^4.0.0"
11350
11351 +lru-cache@^9.1.1:
11352 + version "9.1.2"
11353 + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835"
11354 + integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==
11355 +
11356 macos-release@^2.2.0:
11357 version "2.3.0"
11358 resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
@@ -11616,6 +11691,13 @@ minimatch@^5.0.1:
11691 dependencies:
11692 brace-expansion "^2.0.1"
11693
11694 +minimatch@^9.0.1:
11695 + version "9.0.1"
11696 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253"
11697 + integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==
11698 + dependencies:
11699 + brace-expansion "^2.0.1"
11700 +
11701 minimist@1.x, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
11702 version "1.2.5"
11703 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -11626,6 +11708,11 @@ minimist@^1.2.3:
11708 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f"
11709 integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw==
11710
11711 +"minipass@^5.0.0 || ^6.0.2":
11712 + version "6.0.2"
11713 + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
11714 + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
11715 +
11716 mississippi@^3.0.0:
11717 version "3.0.0"
11718 resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
@@ -12696,6 +12783,14 @@ path-root@^0.1.1:
12783 dependencies:
12784 path-root-regex "^0.1.0"
12785
12786 +path-scurry@^1.7.0:
12787 + version "1.9.2"
12788 + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
12789 + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
12790 + dependencies:
12791 + lru-cache "^9.1.1"
12792 + minipass "^5.0.0 || ^6.0.2"
12793 +
12794 path-to-regexp@0.1.7:
12795 version "0.1.7"
12796 resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
@@ -13970,6 +14065,13 @@ rimraf@^3.0.2:
14065 dependencies:
14066 glob "^7.1.3"
14067
14068 +rimraf@^5.0.1:
14069 + version "5.0.1"
14070 + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0"
14071 + integrity sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==
14072 + dependencies:
14073 + glob "^10.2.5"
14074 +
14075 rimraf@~2.4.0:
14076 version "2.4.5"
14077 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"
@@ -14486,6 +14588,11 @@ signal-exit@^3.0.7:
14588 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
14589 integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
14590
14591 +signal-exit@^4.0.1:
14592 + version "4.0.2"
14593 + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
14594 + integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
14595 +
14596 signedsource@^2.0.0:
14597 version "2.0.0"
14598 resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-2.0.0.tgz#f72dc0f98f5bca2763b464a555511a84a4da8eee"
@@ -14937,6 +15044,15 @@ string-natural-compare@^3.0.1:
15044 resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
15045 integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
15046
15047 +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.2.3:
15048 + version "4.2.3"
15049 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
15050 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
15051 + dependencies:
15052 + emoji-regex "^8.0.0"
15053 + is-fullwidth-code-point "^3.0.0"
15054 + strip-ansi "^6.0.1"
15055 +
15056 string-width@^2.0.0, string-width@^2.1.1:
15057 version "2.1.1"
15058 resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@@ -14963,14 +15079,14 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
15079 is-fullwidth-code-point "^3.0.0"
15080 strip-ansi "^6.0.0"
15081
14966 -string-width@^4.2.3:
14967 - version "4.2.3"
14968 - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
14969 - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
15082 +string-width@^5.0.1, string-width@^5.1.2:
15083 + version "5.1.2"
15084 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
15085 + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
15086 dependencies:
14971 - emoji-regex "^8.0.0"
14972 - is-fullwidth-code-point "^3.0.0"
14973 - strip-ansi "^6.0.1"
15087 + eastasianwidth "^0.2.0"
15088 + emoji-regex "^9.2.2"
15089 + strip-ansi "^7.0.1"
15090
15091 string.prototype.trimend@^1.0.1:
15092 version "1.0.1"
@@ -15023,6 +15139,13 @@ string_decoder@~1.1.1:
15139 dependencies:
15140 safe-buffer "~5.1.0"
15141
15142 +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
15143 + version "6.0.1"
15144 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
15145 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
15146 + dependencies:
15147 + ansi-regex "^5.0.1"
15148 +
15149 strip-ansi@^3.0.0:
15150 version "3.0.1"
15151 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -15051,12 +15174,12 @@ strip-ansi@^6.0.0:
15174 dependencies:
15175 ansi-regex "^5.0.0"
15176
15054 -strip-ansi@^6.0.1:
15055 - version "6.0.1"
15056 - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
15057 - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
15177 +strip-ansi@^7.0.1:
15178 + version "7.1.0"
15179 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
15180 + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
15181 dependencies:
15059 - ansi-regex "^5.0.1"
15182 + ansi-regex "^6.0.1"
15183
15184 strip-bom-buf@^2.0.0:
15185 version "2.0.0"
@@ -16605,6 +16728,15 @@ workerize-loader@^2.0.2:
16728 dependencies:
16729 loader-utils "^2.0.0"
16730
16731 +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
16732 + version "7.0.0"
16733 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
16734 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
16735 + dependencies:
16736 + ansi-styles "^4.0.0"
16737 + string-width "^4.1.0"
16738 + strip-ansi "^6.0.0"
16739 +
16740 wrap-ansi@^6.2.0:
16741 version "6.2.0"
16742 resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
@@ -16614,14 +16746,14 @@ wrap-ansi@^6.2.0:
16746 string-width "^4.1.0"
16747 strip-ansi "^6.0.0"
16748
16617 -wrap-ansi@^7.0.0:
16618 - version "7.0.0"
16619 - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
16620 - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
16749 +wrap-ansi@^8.1.0:
16750 + version "8.1.0"
16751 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
16752 + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
16753 dependencies:
16622 - ansi-styles "^4.0.0"
16623 - string-width "^4.1.0"
16624 - strip-ansi "^6.0.0"
16754 + ansi-styles "^6.1.0"
16755 + string-width "^5.0.1"
16756 + strip-ansi "^7.0.1"
16757
16758 wrappy@1:
16759 version "1.0.2"