[flow] Upgrade Flow to 0.245.2 (#30919)
## Summary This PR bumps Flow all the way to the latest 0.245.2. Most of the suppressions comes from Flow v0.239.0's change to include undefined in the return of `Array.pop`. I also enabled `react.custom_jsx_typing=true` and added custom jsx typing to match the old behavior that `React.createElement` is effectively any typed. This is necessary since various builtin components like `React.Fragment` is actually symbol in the React repo instead of `React.AbstractComponent<...>`. It can be made more accurate by customizing the `React$CustomJSXFactory` type, but I will leave it to the React team to decide. ## How did you test this change? `yarn flow` for all the renderers
Sam Zhou committed
Sep 9, 2024 at 08:41 UTC
e210d08180a63f42079b91acaa7f6af15eef6d32
24 files changed
+142
-20
package.json
+2
-2
@@ -63,8 +63,8 @@
63
"eslint-plugin-react-internal": "link:./scripts/eslint-rules",
64
"fbjs-scripts": "^3.0.1",
65
"filesize": "^6.0.1",
66
- "flow-bin": "^0.235.0",
67
- "flow-remove-types": "^2.235.0",
66
+ "flow-bin": "^0.245.2",
67
+ "flow-remove-types": "^2.245.2",
68
"glob": "^7.1.6",
69
"glob-stream": "^6.1.0",
70
"google-closure-compiler": "^20230206.0.0",
packages/internal-test-utils/internalAct.js
+2
@@ -163,6 +163,7 @@ export async function act<T>(scope: () => Thenable<T>): Thenable<T> {
163
throw thrownError;
164
}
165
166
+ // $FlowFixMe[incompatible-return]
167
return result;
168
} finally {
169
const depth = actingUpdatesScopeDepth;
@@ -271,6 +272,7 @@ export async function serverAct<T>(scope: () => Thenable<T>): Thenable<T> {
272
throw thrownError;
273
}
274
275
+ // $FlowFixMe[incompatible-return]
276
return result;
277
} finally {
278
if (typeof process === 'object') {
packages/react-client/src/ReactFlightReplyClient.js
+3
@@ -554,6 +554,7 @@ export function processReply(
554
const prefix = formFieldPrefix + refId + '_';
555
// $FlowFixMe[prop-missing]: FormData has forEach.
556
value.forEach((originalValue: string | File, originalKey: string) => {
557
+ // $FlowFixMe[incompatible-call]
558
data.append(prefix + originalKey, originalValue);
559
});
560
return serializeFormDataReference(refId);
@@ -925,6 +926,7 @@ function defaultEncodeFormAction(
926
const prefixedData = new FormData();
927
// $FlowFixMe[prop-missing]
928
encodedFormData.forEach((value: string | File, key: string) => {
929
+ // $FlowFixMe[incompatible-call]
930
prefixedData.append('$ACTION_' + identifierPrefix + ':' + key, value);
931
});
932
data = prefixedData;
@@ -1153,6 +1155,7 @@ const FunctionBind = Function.prototype.bind;
1155
const ArraySlice = Array.prototype.slice;
1156
function bind(this: Function): Function {
1157
// $FlowFixMe[unsupported-syntax]
1158
+ // $FlowFixMe[prop-missing]
1159
const newFn = FunctionBind.apply(this, arguments);
1160
const reference = knownServerReferences.get(this);
1161
if (reference) {
packages/react-debug-tools/src/ReactDebugHooks.js
+1
@@ -1033,6 +1033,7 @@ function buildTree(
1033
}
1034
// Pop back the stack as many steps as were not common.
1035
for (let j = prevStack.length - 1; j > commonSteps; j--) {
1036
+ // $FlowFixMe[incompatible-type]
1037
levelChildren = stackOfChildren.pop();
1038
}
1039
}
packages/react-devtools-shared/src/backend/profilingHooks.js
+3
@@ -274,16 +274,19 @@ export function createProfilingHooks({
274
}
275
276
const top = currentReactMeasuresStack.pop();
277
+ // $FlowFixMe[incompatible-type]
278
if (top.type !== type) {
279
console.error(
280
'Unexpected type "%s" completed at %sms before "%s" completed.',
281
type,
282
currentTime,
283
+ // $FlowFixMe[incompatible-use]
284
top.type,
285
);
286
}
287
288
// $FlowFixMe[cannot-write] This property should not be writable outside of this function.
289
+ // $FlowFixMe[incompatible-use]
290
top.duration = currentTime - top.timestamp;
291
292
if (currentTimelineData) {
packages/react-devtools-shared/src/backend/utils.js
+2
@@ -299,10 +299,12 @@ export function formatConsoleArgumentsToSingleString(
299
if (args.length) {
300
const REGEXP = /(%?)(%([jds]))/g;
301
302
+ // $FlowFixMe[incompatible-call]
303
formatted = formatted.replace(REGEXP, (match, escaped, ptn, flag) => {
304
let arg = args.shift();
305
switch (flag) {
306
case 's':
307
+ // $FlowFixMe[unsafe-addition]
308
arg += '';
309
break;
310
case 'd':
packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js
+1
@@ -194,6 +194,7 @@ export default class Overlay {
194
195
while (this.rects.length > elements.length) {
196
const rect = this.rects.pop();
197
+ // $FlowFixMe[incompatible-use]
198
rect.remove();
199
}
200
if (elements.length === 0) {
packages/react-devtools-shared/src/devtools/views/Profiler/CommitTreeBuilder.js
+4
@@ -391,18 +391,22 @@ const __printTree = (commitTree: CommitTree) => {
391
const id = queue.shift();
392
const depth = queue.shift();
393
394
+ // $FlowFixMe[incompatible-call]
395
const node = nodes.get(id);
396
if (node == null) {
397
+ // $FlowFixMe[incompatible-type]
398
throw Error(`Could not find node with id "${id}" in commit tree`);
399
}
400
401
console.log(
402
+ // $FlowFixMe[incompatible-call]
403
`${'•'.repeat(depth)}${node.id}:${node.displayName || ''} ${
404
node.key ? `key:"${node.key}"` : ''
405
} (${node.treeBaseDuration})`,
406
);
407
408
node.children.forEach(childID => {
409
+ // $FlowFixMe[unsafe-addition]
410
queue.push(childID, depth + 1);
411
});
412
}
packages/react-devtools-shared/src/devtools/views/utils.js
+4
@@ -142,10 +142,14 @@ export function serializeHooksForCopy(hooks: HooksTree | null): string {
142
const current = queue.pop();
143
144
// These aren't meaningful
145
+ // $FlowFixMe[incompatible-use]
146
delete current.id;
147
+ // $FlowFixMe[incompatible-use]
148
delete current.isStateEditable;
149
150
+ // $FlowFixMe[incompatible-use]
151
if (current.subHooks.length > 0) {
152
+ // $FlowFixMe[incompatible-use]
153
queue.push(...current.subHooks);
154
}
155
}
packages/react-devtools-shared/src/hook.js
+1
@@ -532,6 +532,7 @@ export function installHook(target: any): DevToolsHook | null {
532
const startStackFrame = openModuleRangesStack.pop();
533
const stopStackFrame = getTopStackFrameString(error);
534
if (stopStackFrame !== null) {
535
+ // $FlowFixMe[incompatible-call]
536
moduleRanges.push([startStackFrame, stopStackFrame]);
537
}
538
}
packages/react-devtools-shared/src/utils.js
+2
@@ -475,6 +475,7 @@ export function parseElementDisplayNameFromBackend(
475
if (displayName.indexOf('(') >= 0) {
476
const matches = displayName.match(/[^()]+/g);
477
if (matches != null) {
478
+ // $FlowFixMe[incompatible-type]
479
displayName = matches.pop();
480
hocDisplayNames = matches;
481
}
@@ -485,6 +486,7 @@ export function parseElementDisplayNameFromBackend(
486
}
487
488
return {
489
+ // $FlowFixMe[incompatible-return]
490
formattedDisplayName: displayName,
491
hocDisplayNames,
492
compiledWithForget: false,
packages/react-devtools-timeline/src/import-worker/preprocessData.js
+1
@@ -202,6 +202,7 @@ function markWorkCompleted(
202
);
203
}
204
205
+ // $FlowFixMe[incompatible-use]
206
const {measure, startTime} = stack.pop();
207
if (!measure) {
208
console.error('Could not find matching measure for type "%s".', type);
packages/react-dom/src/client/ReactDOMClientFB.js
+1
@@ -100,6 +100,7 @@ function flushSyncFromReconciler<R>(fn: (() => R) | void): R | void {
100
);
101
}
102
}
103
+ // $FlowFixMe[incompatible-call]
104
return flushSyncWithoutWarningIfAlreadyRendering(fn);
105
}
106
packages/react-native-renderer/src/ReactNativeTypes.js
+2
-2
@@ -233,8 +233,8 @@ export type ReactNativeType = {
233
): ?ElementRef<ElementType>,
234
unmountComponentAtNode(containerTag: number): void,
235
unmountComponentAtNodeAndRemoveContainer(containerTag: number): void,
236
- unstable_batchedUpdates: <T>(fn: (T) => void, bookkeeping: T) => void,
237
- __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: SecretInternalsType,
236
+ +unstable_batchedUpdates: <T>(fn: (T) => void, bookkeeping: T) => void,
237
+ +__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: SecretInternalsType,
238
...
239
};
240
packages/react-server-dom-esm/src/ReactFlightESMReferences.js
+1
-1
@@ -49,7 +49,7 @@ const FunctionBind = Function.prototype.bind;
49
// $FlowFixMe[method-unbinding]
50
const ArraySlice = Array.prototype.slice;
51
function bind(this: ServerReference<any>): any {
52
- // $FlowFixMe[unsupported-syntax]
52
+ // $FlowFixMe[prop-missing]
53
const newFn = FunctionBind.apply(this, arguments);
54
if (this.$$typeof === SERVER_REFERENCE_TAG) {
55
if (__DEV__) {
packages/react-server-dom-turbopack/src/ReactFlightTurbopackReferences.js
+1
-1
@@ -63,7 +63,7 @@ const FunctionBind = Function.prototype.bind;
63
// $FlowFixMe[method-unbinding]
64
const ArraySlice = Array.prototype.slice;
65
function bind(this: ServerReference<any>): any {
66
- // $FlowFixMe[unsupported-syntax]
66
+ // $FlowFixMe[prop-missing]
67
const newFn = FunctionBind.apply(this, arguments);
68
if (this.$$typeof === SERVER_REFERENCE_TAG) {
69
if (__DEV__) {
packages/react-server-dom-webpack/src/ReactFlightWebpackReferences.js
+1
@@ -64,6 +64,7 @@ const FunctionBind = Function.prototype.bind;
64
const ArraySlice = Array.prototype.slice;
65
function bind(this: ServerReference<any>): any {
66
// $FlowFixMe[unsupported-syntax]
67
+ // $FlowFixMe[prop-missing]
68
const newFn = FunctionBind.apply(this, arguments);
69
if (this.$$typeof === SERVER_REFERENCE_TAG) {
70
if (__DEV__) {
packages/react-server/src/ReactFlightActionServer.js
+1
@@ -93,6 +93,7 @@ export function decodeAction<T>(
93
// $FlowFixMe[prop-missing]
94
body.forEach((value: string | File, key: string) => {
95
if (!key.startsWith('$ACTION_')) {
96
+ // $FlowFixMe[incompatible-call]
97
formData.append(key, value);
98
return;
99
}
packages/react-server/src/ReactFlightReplyServer.js
+1
@@ -978,6 +978,7 @@ function parseModelString(
978
// $FlowFixMe[prop-missing] FormData has forEach on it.
979
backingFormData.forEach((entry: File | string, entryKey: string) => {
980
if (entryKey.startsWith(formPrefix)) {
981
+ // $FlowFixMe[incompatible-call]
982
data.append(entryKey.slice(formPrefix.length), entry);
983
}
984
});
packages/react-test-renderer/src/ReactTestRenderer.js
+4
@@ -166,10 +166,14 @@ function flatten(arr) {
166
const stack = [{i: 0, array: arr}];
167
while (stack.length) {
168
const n = stack.pop();
169
+ // $FlowFixMe[incompatible-use]
170
while (n.i < n.array.length) {
171
+ // $FlowFixMe[incompatible-use]
172
const el = n.array[n.i];
173
+ // $FlowFixMe[incompatible-use]
174
n.i += 1;
175
if (isArray(el)) {
176
+ // $FlowFixMe[incompatible-call]
177
stack.push(n);
178
stack.push({i: 0, array: el});
179
break;
packages/scheduler/src/SchedulerMinHeap.js
+2
@@ -31,7 +31,9 @@ export function pop<T: Node>(heap: Heap<T>): T | null {
31
const first = heap[0];
32
const last = heap.pop();
33
if (last !== first) {
34
+ // $FlowFixMe[incompatible-type]
35
heap[0] = last;
36
+ // $FlowFixMe[incompatible-call]
37
siftDown(heap, last, 0);
38
}
39
return first;
scripts/flow/config/flowconfig
+3
@@ -31,9 +31,12 @@
31
32
[lints]
33
untyped-type-import=error
34
+internal-type=off
35
+deprecated-type=off
36
37
[options]
38
munge_underscores=false
39
+react.custom_jsx_typing=true
40
41
# Substituted by createFlowConfig.js:
42
%REACT_RENDERER_FLOW_OPTIONS%
scripts/flow/environment.js
+3
-1
@@ -26,7 +26,7 @@ declare const AggregateError: Class<Error>;
26
declare const FinalizationRegistry: any;
27
28
declare module 'create-react-class' {
29
- declare const exports: React$CreateClass;
29
+ declare const exports: $FlowFixMe;
30
}
31
32
declare interface ConsoleTask {
@@ -46,6 +46,8 @@ declare opaque type React$Element<
46
+ref: any,
47
};
48
49
+declare type React$CustomJSXFactory = any;
50
+
51
declare const trustedTypes: {
52
isHTML: (value: any) => boolean,
53
isScript: (value: any) => boolean,
yarn.lock
+96
-13
@@ -7366,7 +7366,7 @@ eslint-utils@^2.0.0, eslint-utils@^2.1.0:
7366
dependencies:
7367
eslint-visitor-keys "^1.1.0"
7368
7369
-"eslint-v7@npm:eslint@^7.7.0", eslint@^7.7.0:
7369
+"eslint-v7@npm:eslint@^7.7.0":
7370
version "7.32.0"
7371
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
7372
integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
@@ -7526,6 +7526,52 @@ eslint@8.57.0:
7526
strip-ansi "^6.0.1"
7527
text-table "^0.2.0"
7528
7529
+eslint@^7.7.0:
7530
+ version "7.32.0"
7531
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
7532
+ integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
7533
+ dependencies:
7534
+ "@babel/code-frame" "7.12.11"
7535
+ "@eslint/eslintrc" "^0.4.3"
7536
+ "@humanwhocodes/config-array" "^0.5.0"
7537
+ ajv "^6.10.0"
7538
+ chalk "^4.0.0"
7539
+ cross-spawn "^7.0.2"
7540
+ debug "^4.0.1"
7541
+ doctrine "^3.0.0"
7542
+ enquirer "^2.3.5"
7543
+ escape-string-regexp "^4.0.0"
7544
+ eslint-scope "^5.1.1"
7545
+ eslint-utils "^2.1.0"
7546
+ eslint-visitor-keys "^2.0.0"
7547
+ espree "^7.3.1"
7548
+ esquery "^1.4.0"
7549
+ esutils "^2.0.2"
7550
+ fast-deep-equal "^3.1.3"
7551
+ file-entry-cache "^6.0.1"
7552
+ functional-red-black-tree "^1.0.1"
7553
+ glob-parent "^5.1.2"
7554
+ globals "^13.6.0"
7555
+ ignore "^4.0.6"
7556
+ import-fresh "^3.0.0"
7557
+ imurmurhash "^0.1.4"
7558
+ is-glob "^4.0.0"
7559
+ js-yaml "^3.13.1"
7560
+ json-stable-stringify-without-jsonify "^1.0.1"
7561
+ levn "^0.4.1"
7562
+ lodash.merge "^4.6.2"
7563
+ minimatch "^3.0.4"
7564
+ natural-compare "^1.4.0"
7565
+ optionator "^0.9.1"
7566
+ progress "^2.0.0"
7567
+ regexpp "^3.1.0"
7568
+ semver "^7.2.1"
7569
+ strip-ansi "^6.0.0"
7570
+ strip-json-comments "^3.1.0"
7571
+ table "^6.0.9"
7572
+ text-table "^0.2.0"
7573
+ v8-compile-cache "^2.0.3"
7574
+
7575
espree@10.0.1, espree@^10.0.1:
7576
version "10.0.1"
7577
resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f"
@@ -8296,17 +8342,17 @@ flatted@^3.2.9:
8342
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
8343
integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
8344
8299
-flow-bin@^0.235.0:
8300
- version "0.235.1"
8301
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.235.1.tgz#7dfca9c480bb7cb83fa3caca58386e9beca09bc3"
8302
- integrity sha512-SuXw5NQDIdSBMg/NgvS5mzdI6dPEYWubnucnYno9wWLd6xoK1nkH6t2Dn2GsML9bIoVqp3E/ni1jo18A4G4FrQ==
8345
+flow-bin@^0.245.2:
8346
+ version "0.245.2"
8347
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.245.2.tgz#ab5cd2115a8b57cc91c0d84add105c7098418f4c"
8348
+ integrity sha512-1rFzkb7OoknVovimQvB+2Dq2vYP+guqSZAb4Cnnh0YsIdAOU7upCwnLHBOhMSXvEp6+J6tDMe9G8KwTAB8aI/g==
8349
8304
-flow-remove-types@^2.235.0:
8305
- version "2.238.2"
8306
- resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-2.238.2.tgz#85c9d26e83ba395f0206a23bce438223bc035609"
8307
- integrity sha512-WJXRomjPiZ34nG14y7AceoPxg1L00FxjPSA3TDBTG2OPt8QFNtiYEmO4/3WG58n3C4wjxyVuoE6KjxQIvCDyjw==
8350
+flow-remove-types@^2.245.2:
8351
+ version "2.245.2"
8352
+ resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-2.245.2.tgz#ccc7b8db25609833f9bf549bd025e740f023464f"
8353
+ integrity sha512-p4rWHk20Vp8/pu9MOVi26r+r8hYpZ1vk+9OsFcJnKc/oUYJBxmTL8/fBlIo4/LJ9aLOrAeHwO1PnSsU6Z7gVsw==
8354
dependencies:
8309
- hermes-parser "0.22.0"
8355
+ hermes-parser "0.23.1"
8356
pirates "^3.0.2"
8357
vlq "^0.2.1"
8358
@@ -9138,6 +9184,11 @@ hermes-estree@0.23.0:
9184
resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.23.0.tgz#89c5419877b9d6bce4bb616821f496f5c5daddbc"
9185
integrity sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==
9186
9187
+hermes-estree@0.23.1:
9188
+ version "0.23.1"
9189
+ resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.23.1.tgz#d0bac369a030188120ee7024926aabe5a9f84fdb"
9190
+ integrity sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==
9191
+
9192
hermes-parser@0.22.0, hermes-parser@^0.22.0:
9193
version "0.22.0"
9194
resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.22.0.tgz#fc8e0e6c7bfa8db85b04c9f9544a102c4fcb4040"
@@ -9152,6 +9203,13 @@ hermes-parser@0.23.0:
9203
dependencies:
9204
hermes-estree "0.23.0"
9205
9206
+hermes-parser@0.23.1:
9207
+ version "0.23.1"
9208
+ resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.23.1.tgz#e5de648e664f3b3d84d01b48fc7ab164f4b68205"
9209
+ integrity sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==
9210
+ dependencies:
9211
+ hermes-estree "0.23.1"
9212
+
9213
homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
9214
version "1.0.3"
9215
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
@@ -15083,7 +15141,7 @@ string-natural-compare@^3.0.1:
15141
resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
15142
integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
15143
15086
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
15144
+"string-width-cjs@npm:string-width@^4.2.0":
15145
version "4.2.3"
15146
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
15147
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -15118,6 +15176,15 @@ string-width@^4.0.0:
15176
is-fullwidth-code-point "^3.0.0"
15177
strip-ansi "^6.0.0"
15178
15179
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
15180
+ version "4.2.3"
15181
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
15182
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
15183
+ dependencies:
15184
+ emoji-regex "^8.0.0"
15185
+ is-fullwidth-code-point "^3.0.0"
15186
+ strip-ansi "^6.0.1"
15187
+
15188
string-width@^5.0.1, string-width@^5.1.2:
15189
version "5.1.2"
15190
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
@@ -15178,7 +15245,7 @@ string_decoder@~1.1.1:
15245
dependencies:
15246
safe-buffer "~5.1.0"
15247
15181
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
15248
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
15249
version "6.0.1"
15250
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
15251
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -15206,6 +15273,13 @@ strip-ansi@^5.1.0:
15273
dependencies:
15274
ansi-regex "^4.1.0"
15275
15276
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
15277
+ version "6.0.1"
15278
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
15279
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
15280
+ dependencies:
15281
+ ansi-regex "^5.0.1"
15282
+
15283
strip-ansi@^7.0.1:
15284
version "7.1.0"
15285
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -16673,7 +16747,7 @@ workerize-loader@^2.0.2:
16747
dependencies:
16748
loader-utils "^2.0.0"
16749
16676
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
16750
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
16751
version "7.0.0"
16752
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
16753
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -16691,6 +16765,15 @@ wrap-ansi@^6.2.0:
16765
string-width "^4.1.0"
16766
strip-ansi "^6.0.0"
16767
16768
+wrap-ansi@^7.0.0:
16769
+ version "7.0.0"
16770
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
16771
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
16772
+ dependencies:
16773
+ ansi-styles "^4.0.0"
16774
+ string-width "^4.1.0"
16775
+ strip-ansi "^6.0.0"
16776
+
16777
wrap-ansi@^8.1.0:
16778
version "8.1.0"
16779
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"