diff --git a/karma.conf.js b/karma.conf.js index bfb7066..ec1063b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -89,6 +89,7 @@ module.exports = function (karmaConfig) { ); let testFilePattern = "tests/*.tsx"; + // let testFilePattern = "tests/ssr.test.tsx"; // let testFilePattern = "tests/basic.tsx"; // let testFilePattern = "tests/testing-lib.tsx"; diff --git a/package.json b/package.json index b73dbf8..b9008f3 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,8 @@ "package.json" ], "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "react": "16.8.0 - 18", + "react-dom": "16.8.0 - 18" }, "devDependencies": { "@babel/core": "^7.7.7", @@ -88,11 +88,11 @@ "@semantic-release/npm": "^7.0.6", "@semantic-release/release-notes-generator": "^9.0.1", "@size-limit/preset-small-lib": "^5.0.1", - "@testing-library/react": "^12.0.0", + "@testing-library/react": "^13.1.1", "@types/karma": "^6.3.1", "@types/karma-jasmine": "^4.0.1", - "@types/react": "^17.0.15", - "@types/react-dom": "^17.0.9", + "@types/react": "^18.0.8", + "@types/react-dom": "^18.0.3", "babel-loader": "^8.1.0", "delay": "^5.0.0", "husky": "^7.0.0", @@ -107,9 +107,9 @@ "lint-staged": "^11.1.1", "npm-run-all": "^4.1.5", "prettier": "^2.0.4", - "react": "^17.0.2", + "react": "^18.0.0", "react-app-polyfill": "^2.0.0", - "react-dom": "^17.0.2", + "react-dom": "^18.0.0", "rollup": "^2.6.1", "semantic-release": "^17.2.2", "size-limit": "^5.0.1", diff --git a/src/index.ts b/src/index.ts index 3ed2f78..02e3af9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,7 +15,7 @@ type SubscriberResponse = SubscriberCleanup | void; // refs, but then host hooks / components could not opt out of renders. // This could've been exported to its own module, but the current build doesn't // seem to work with module imports and I had no more time to spend on this... -function useResolvedElement( +function useResolvedElement( subscriber: (element: T) => SubscriberResponse, refOrElement?: T | RefObject | null ): RefCallback { @@ -26,12 +26,15 @@ function useResolvedElement( } | null>(null); const cleanupRef = useRef(); + // Resolving ".current" purely so that a new callSubscriber instance is created when needed. + const refElement = + refOrElement && "current" in refOrElement ? refOrElement.current : null; const callSubscriber = useCallback(() => { let element = null; if (callbackRefElement.current) { element = callbackRefElement.current; } else if (refOrElement) { - if (refOrElement instanceof HTMLElement) { + if (refOrElement instanceof Element) { element = refOrElement; } else { element = refOrElement.current; @@ -60,7 +63,7 @@ function useResolvedElement( if (element) { cleanupRef.current = subscriber(element); } - }, [refOrElement, subscriber]); + }, [refOrElement, refElement, subscriber]); // On each render, we check whether a ref changed, or if we got a new raw // element. @@ -88,7 +91,7 @@ type ObservedSize = { type ResizeHandler = (size: ObservedSize) => void; -type HookResponse = { +type HookResponse = { ref: RefCallback; } & ObservedSize; @@ -159,7 +162,7 @@ const extractSize = ( type RoundingFunction = (n: number) => number; -function useResizeObserver( +function useResizeObserver( opts: { ref?: RefObject | T | null | undefined; onResize?: ResizeHandler; @@ -194,6 +197,8 @@ function useResizeObserver( // the component unmounted. const didUnmount = useRef(false); useEffect(() => { + didUnmount.current = false; + return () => { didUnmount.current = true; }; diff --git a/tests/basic.tsx b/tests/basic.tsx index 2e2cf2c..29eb4cf 100644 --- a/tests/basic.tsx +++ b/tests/basic.tsx @@ -1,391 +1,397 @@ -import React, { - useEffect, - useState, - useRef, - RefObject, - FunctionComponent, - RefCallback, -} from "react"; +// Tests written with react testing library +import React, { useRef, useState } from "react"; +import { render, cleanup, act } from "@testing-library/react"; +import createController from "./utils/createController"; import useResizeObserver from "../"; -import { - createComponentHandler, - Observed, - render, - HandlerReceiver, - ObservedSize, - MultiHandlerResolverComponentProps, - ComponentHandler, - HandlerResolverComponentProps, -} from "./utils"; +import useMergedCallbackRef from "./utils/useMergedCallbackRef"; import awaitNextFrame from "./utils/awaitNextFrame"; +import { ObservedSize } from "./utils"; +import useRenderTrigger from "./utils/useRenderTrigger"; -describe("Vanilla tests", () => { +afterEach(() => { + cleanup(); +}); + +describe("Basic tests", () => { it("should render with undefined sizes at first", async () => { - const handler = await render(Observed); - handler.assertDefaultSize(); + const controller = createController(); + const Test = () => { + const { ref, width, height } = useResizeObserver(); + controller.reportMeasuredSize({ width, height }); + + return
; + }; + + render(); + controller.assertMeasuredSize({ width: undefined, height: undefined }); }); it("should render with custom defaults", async () => { - const { assertSize } = await render( - Observed, - {}, - { - defaultWidth: 24, - defaultHeight: 42, - } - ); + const controller = createController(); + const Test = () => { + const { ref, width = 24, height = 42 } = useResizeObserver(); + controller.reportMeasuredSize({ width, height }); + + return
; + }; // By running this assertion immediately, it should check the default values // instead ot the first on-mount measurement. - assertSize({ width: 24, height: 42 }); + render(); + controller.assertMeasuredSize({ width: 24, height: 42 }); }); it("should follow size changes correctly with appropriate render count and without sub-pixels as they're used in CSS", async () => { - const { setAndAssertSize, setSize, assertSize, assertRenderCount } = - await render(Observed, { waitForFirstMeasurement: true }); + const controller = createController(); + const Test = () => { + const { ref, width = 24, height = 42 } = useResizeObserver(); + controller.reportMeasuredSize({ width, height }); + controller.incrementRenderCount(); + + const mergedCallbackRef = useMergedCallbackRef( + ref, + (element: HTMLDivElement) => { + controller.provideSetSizeFunction(element); + } + ); + + return
; + }; // Default render + first measurement - assertRenderCount(2); + render(); + await act(async () => { + await awaitNextFrame(); + }); + controller.assertRenderCount(2); - await setAndAssertSize({ width: 100, height: 200 }); - assertRenderCount(3); + await act(async () => { + await controller.setSize({ width: 100, height: 200 }); + }); + controller.assertMeasuredSize({ width: 100, height: 200 }); + controller.assertRenderCount(3); - setSize({ width: 321, height: 456 }); - await awaitNextFrame(); - assertSize({ width: 321, height: 456 }); - assertRenderCount(4); + await act(async () => { + await controller.setSize({ width: 321, height: 456 }); + }); + controller.assertMeasuredSize({ width: 321, height: 456 }); + controller.assertRenderCount(4); }); it("should handle multiple instances", async () => { - const Test: FunctionComponent = ({ - resolveHandler, + const Test = ({ + controller, + }: { + controller: ReturnType; }) => { - let resolveHandler1: HandlerReceiver = () => {}; - let resolveHandler2: HandlerReceiver = () => {}; - - const handlersPromise = Promise.all([ - new Promise( - (resolve) => (resolveHandler1 = resolve as HandlerReceiver) - ), - new Promise( - (resolve) => (resolveHandler2 = resolve as HandlerReceiver) - ), - ]); - - useEffect(() => { - handlersPromise.then( - ([handler1, handler2]: [ComponentHandler, ComponentHandler]) => { - resolveHandler([handler1, handler2]); - } - ); - }, []); - - return ( - <> - - - + const { ref, width = 24, height = 42 } = useResizeObserver(); + controller.reportMeasuredSize({ width, height }); + controller.incrementRenderCount(); + + const mergedCallbackRef = useMergedCallbackRef( + ref, + (element: HTMLDivElement) => { + controller.provideSetSizeFunction(element); + } ); - }; - const [handler1, handler2] = await render(Test, { - waitForFirstMeasurement: true, - }); - await handler1.setAndAssertSize({ width: 100, height: 200 }); - await handler2.setAndAssertSize({ width: 300, height: 400 }); + return
; + }; + const controller1 = createController(); + const controller2 = createController(); + + render( + <> + + + + ); - // By the first measurement the component would've rendered three times: - // - First natural render with "undefined" values - // - Second with whatever size the window is - // - Third render with the values set above - handler1.assertRenderCount(3); - handler2.assertRenderCount(3); + await act(async () => { + await controller1.setSize({ width: 100, height: 200 }); + await controller2.setSize({ width: 300, height: 400 }); + }); - await handler2.setAndAssertSize({ width: 321, height: 456 }); + controller1.assertMeasuredSize({ width: 100, height: 200 }); + controller2.assertMeasuredSize({ width: 300, height: 400 }); - handler1.assertRenderCount(3); - handler2.assertRenderCount(4); + controller1.assertRenderCount(2); + controller2.assertRenderCount(2); - // Instance No. 1 should still be at the previous state. - handler1.assertSize({ width: 100, height: 200 }); + await act(async () => { + await controller2.setSize({ width: 321, height: 456 }); + }); + controller1.assertMeasuredSize({ width: 100, height: 200 }); + controller2.assertMeasuredSize({ width: 321, height: 456 }); + controller1.assertRenderCount(2); + controller2.assertRenderCount(3); }); - it("should handle custom refs", async () => { - const Test: FunctionComponent = ({ - resolveHandler, - }) => { + it("should handle ref objects on mount", async () => { + const controller = createController(); + const Test = () => { const ref = useRef(null); const { width, height } = useResizeObserver({ ref }); - const currentSizeRef = useRef({} as ObservedSize); - currentSizeRef.current.height = height; - currentSizeRef.current.width = width; - - useEffect(() => { - resolveHandler(createComponentHandler({ currentSizeRef })); - }, []); + controller.reportMeasuredSize({ width, height }); - return ( -
- {width}x{height} -
- ); + return
; }; - const handler = await render(Test); + render(); + controller.assertMeasuredSize({ width: undefined, height: undefined }); - // Default - handler.assertDefaultSize(); + // Actual measurement + await act(async () => { + await awaitNextFrame(); + }); + controller.assertMeasuredSize({ width: 100, height: 200 }); + }); + + it("should handle ref objects calling onResize on mount", async () => { + const controller = createController(); + const Test = () => { + const ref = useRef(null); + useResizeObserver({ + ref, + onResize: (size) => { + controller.reportMeasuredSize(size); + }, + }); + + return
; + }; + + render(); + controller.assertMeasuredSize({ width: undefined, height: undefined }); // Actual measurement - await awaitNextFrame(); - handler.assertSize({ width: 100, height: 200 }); + await act(async () => { + await awaitNextFrame(); + }); + controller.assertMeasuredSize({ width: 100, height: 200 }); }); it("should be able to reuse the same ref to measure different elements", async () => { let switchRefs = (): void => { throw new Error(`"switchRefs" should've been implemented by now.`); }; - const Test = ({ resolveHandler }: { resolveHandler: HandlerReceiver }) => { + const controller = createController(); + const Test = () => { const ref1 = useRef(null); const ref2 = useRef(null); - const [stateRef, setStateRef] = useState>(ref1); // Measures ref1 first - const sizeRef = useRef(null); - const { width, height } = useResizeObserver({ ref: stateRef }); - const currentSizeRef = useRef({ - width: undefined, - height: undefined, - }); - currentSizeRef.current.width = width; - currentSizeRef.current.height = height; - - useEffect(() => { - // Measures the second div on demand - switchRefs = () => setStateRef(ref2); - - resolveHandler(createComponentHandler({ currentSizeRef })); - }, []); + const [stateRef, setStateRef] = useState(ref1); // Measuring ref1 first + switchRefs = () => setStateRef(ref2); + const response = useResizeObserver({ ref: stateRef }); + controller.reportMeasuredSize(response); return ( <> -
- {width}x{height} -
); }; - const handler = await render(Test); + render(); // Default - handler.assertDefaultSize(); + controller.assertMeasuredSize({ width: undefined, height: undefined }); // Div 1 measurement - await awaitNextFrame(); - handler.assertSize({ width: 100, height: 200 }); + await act(async () => { + await awaitNextFrame(); + }); + controller.assertMeasuredSize({ width: 100, height: 200 }); // Div 2 measurement - switchRefs(); - await awaitNextFrame(); - handler.assertSize({ width: 150, height: 250 }); - }); - - it("should be able to render without mock defaults", async () => { - const handler = await render(Observed); - - // Default values should be undefined - handler.assertDefaultSize(); - - handler.setSize({ width: 100, height: 100 }); - await awaitNextFrame(); - handler.assertSize({ width: 100, height: 100 }); + await act(async () => { + switchRefs(); + }); + await act(async () => { + await awaitNextFrame(); + }); + controller.assertMeasuredSize({ width: 150, height: 250 }); }); it("should not trigger unnecessary renders with the same width or height", async () => { - const handler = await render(Observed); + const controller = createController(); + const Test = () => { + const { ref, width, height } = useResizeObserver(); + controller.reportMeasuredSize({ width, height }); + controller.incrementRenderCount(); + + const mergedCallbackRef = useMergedCallbackRef( + ref, + (element: HTMLDivElement) => { + controller.provideSetSizeFunction(element); + } + ); - handler.assertDefaultSize(); + return
; + }; + + render(); // Default render + first measurement - await awaitNextFrame(); - handler.assertRenderCount(2); + controller.assertMeasuredSize({ width: undefined, height: undefined }); + await act(async () => { + await awaitNextFrame(); + }); + controller.assertRenderCount(2); - handler.setSize({ width: 100, height: 102 }); - await awaitNextFrame(); - handler.assertSize({ width: 100, height: 102 }); - handler.assertRenderCount(3); + await act(async () => { + await controller.setSize({ width: 100, height: 102 }); + }); + controller.assertMeasuredSize({ width: 100, height: 102 }); + controller.assertRenderCount(3); // Shouldn't trigger on subpixel values that are rounded to be the same as the // previous size - handler.setSize({ width: 100.4, height: 102.4 }); - await awaitNextFrame(); - handler.assertSize({ width: 100, height: 102 }); - handler.assertRenderCount(3); + await act(async () => { + await controller.setSize({ width: 100.4, height: 102.4 }); + }); + controller.assertMeasuredSize({ width: 100, height: 102 }); + controller.assertRenderCount(3); }); it("should keep the same response instance between renders if nothing changed", async () => { - let assertSameInstance = (): void => { - throw new Error( - `"assertSameInstance" should've been implemented by now.` - ); - }; - - const Test: FunctionComponent = ({ - resolveHandler, - }) => { - const previousResponseRef = useRef< - | ({ - ref: RefCallback; - } & ObservedSize) - | null - >(null); - const response = useResizeObserver(); - const [state, setState] = useState(false); - - const sameInstance = previousResponseRef.current === response; - previousResponseRef.current = response; - - useEffect(() => { - if (response.width && response.height) { - // Triggering an extra render once the hook properly measured the element size once. - // This'll allow us to see if the hook keeps the same response object or not. - setState(true); - } - }, [response]); - - useEffect(() => { - if (!state) { - return; - } - - assertSameInstance = () => { - expect(sameInstance).toBe(true); - }; - - // Everything is set up, ready for assertions - resolveHandler({}); - }, [state]); + const responses: ReturnType[] = []; + const controller = createController(); + const Test = () => { + const response = useResizeObserver(); + if (response.width) { + responses.push(response); + } + controller.triggerRender = useRenderTrigger(); - return
{String(sameInstance)}
; + return
; }; - await render(Test); + render(); + await act(async () => { + await awaitNextFrame(); + }); + + await act(async () => { + await controller.triggerRender(); + }); + // ignoring the first "undefined" measurement before uRO received the element + responses.unshift(); - assertSameInstance(); + // As the size did not change between renders, the response objects should be the same by reference. + expect(responses.length).toBe(2); + expect(responses[0]).toBe(responses[1]); }); it("should ignore invalid custom refs", async () => { - const Test: FunctionComponent = ({ - resolveHandler, - }) => { - // Passing in an invalid custom ref. - // Same should be work if "null" or something similar gets passed in. - const { width, height } = useResizeObserver({ - ref: {} as RefObject, - }); - const currentSizeRef = useRef({} as ObservedSize); - currentSizeRef.current.width = width; - currentSizeRef.current.height = height; - - useEffect(() => { - resolveHandler(createComponentHandler({ currentSizeRef })); - }, []); + const controller = createController(); + const Test = () => { + const response = useResizeObserver({ ref: {} as HTMLDivElement }); + controller.reportMeasuredSize(response); - return ( -
- {width}x{height} -
- ); + return
; }; - const handler = await render(Test); + render(); // Since no refs were passed in with an element to be measured, the hook should // stay on the defaults await awaitNextFrame(); - handler.assertDefaultSize(); + controller.assertMeasuredSize({ width: undefined, height: undefined }); }); it("should be able to work with onResize instead of rendering the values", async () => { const observations: ObservedSize[] = []; - const handler = await render( - Observed, - {}, - { onResize: (size: ObservedSize) => observations.push(size) } - ); + const controller = createController(); + const Test = () => { + const { ref, width, height } = useResizeObserver({ + onResize: (size) => observations.push(size), + }); + controller.reportMeasuredSize({ width, height }); + controller.incrementRenderCount(); - handler.setSize({ width: 100, height: 200 }); - await awaitNextFrame(); - handler.setSize({ width: 101, height: 201 }); - await awaitNextFrame(); + const mergedCallbackRef = useMergedCallbackRef( + ref, + (element: HTMLDivElement) => { + controller.provideSetSizeFunction(element); + } + ); + + return
; + }; + + render(); + + await act(async () => { + await controller.setSize({ width: 100, height: 200 }); + await controller.setSize({ width: 101, height: 201 }); + }); // Should stay at default as width/height is not passed to the hook response // when an onResize callback is given - handler.assertDefaultSize(); + controller.assertMeasuredSize({ width: undefined, height: undefined }); expect(observations.length).toBe(2); expect(observations[0]).toEqual({ width: 100, height: 200 }); expect(observations[1]).toEqual({ width: 101, height: 201 }); // Should render once on mount only - handler.assertRenderCount(1); + controller.assertRenderCount(1); }); - it("should handle if the onResize handler changes properly with the correct render counts", async () => { - let changeOnResizeHandler: (fn: Function) => void = () => {}; - const Test: FunctionComponent = ({ - resolveHandler, - ...props - }) => { - const [onResizeHandler, setOnResizeHandler] = useState(() => () => {}); - - changeOnResizeHandler = (handler) => setOnResizeHandler(() => handler); - - return ( - + it("should handle if the onResize handler changes, with the correct render counts", async () => { + const controller = createController(); + type OnResizeHandler = (size: ObservedSize) => {}; + let changeOnResizeHandler = (handler: OnResizeHandler) => {}; + const Test = () => { + const [onResize, setOnResize] = useState(() => () => {}); + changeOnResizeHandler = (handler) => setOnResize(() => handler); + const { ref, width, height } = useResizeObserver({ onResize }); + controller.reportMeasuredSize({ width, height }); + controller.incrementRenderCount(); + + const mergedCallbackRef = useMergedCallbackRef( + ref, + (element: HTMLDivElement) => { + controller.provideSetSizeFunction(element); + } ); + + return
; }; - const { assertRenderCount, setSize } = await render(Test, { - waitForFirstMeasurement: true, - }); + render(); // Since `onResize` is used, no extra renders should've been triggered at this // point. (As opposed to the defaults where the hook would trigger a render // with the first measurement.) - assertRenderCount(1); + controller.assertRenderCount(1); const observations1: ObservedSize[] = []; const observations2: ObservedSize[] = []; + // Establishing a default onResize handler, which'll be measured when the resize handler is set. + await act(async () => { + await controller.setSize({ width: 1, height: 1 }); + }); + controller.assertRenderCount(1); - // Establishing a default, which'll be measured when the resize handler is set. - setSize({ width: 1, height: 1 }); - await awaitNextFrame(); - - assertRenderCount(1); - - changeOnResizeHandler((size: ObservedSize) => observations1.push(size)); - await awaitNextFrame(); - setSize({ width: 1, height: 2 }); - await awaitNextFrame(); - setSize({ width: 3, height: 4 }); - - assertRenderCount(2); - - await awaitNextFrame(); - changeOnResizeHandler((size: ObservedSize) => observations2.push(size)); - await awaitNextFrame(); - setSize({ width: 5, height: 6 }); - await awaitNextFrame(); - setSize({ width: 7, height: 8 }); - await awaitNextFrame(); + await act(async () => { + changeOnResizeHandler((size) => observations1.push(size)); + }); + await act(async () => { + await controller.setSize({ width: 1, height: 2 }); + await controller.setSize({ width: 3, height: 4 }); + }); + controller.assertRenderCount(2); - assertRenderCount(3); + await act(async () => { + changeOnResizeHandler((size) => observations2.push(size)); + }); + await act(async () => { + await controller.setSize({ width: 5, height: 6 }); + await controller.setSize({ width: 7, height: 8 }); + }); + controller.assertRenderCount(3); expect(observations1.length).toBe(2); expect(observations1[0]).toEqual({ width: 1, height: 2 }); diff --git a/tests/ie/polyfilled.tsx b/tests/ie/polyfilled.tsx index 01e0c9a..31cd88d 100644 --- a/tests/ie/polyfilled.tsx +++ b/tests/ie/polyfilled.tsx @@ -1,13 +1,9 @@ import "react-app-polyfill/ie11"; -import React, { FunctionComponent, useEffect, useRef } from "react"; -import { - createComponentHandler, - HandlerResolverComponentProps, - ObservedSize, - render, -} from "../utils"; +import React from "react"; import useResizeObserver from "../../polyfilled"; import { ResizeObserver as ROP } from "@juggle/resize-observer"; +import createController from "../utils/createController"; +import { act, render } from "@testing-library/react"; import awaitNextFrame from "../utils/awaitNextFrame"; /** @@ -29,28 +25,20 @@ describe("Polyfilled lib testing", () => { }); it("should work with the polyfilled version", async () => { - const Test: FunctionComponent = ({ - resolveHandler, - }) => { - const { ref, width, height } = useResizeObserver(); - const currentSizeRef = useRef({} as ObservedSize); - currentSizeRef.current.width = width; - currentSizeRef.current.height = height; + const controller = createController(); + const Test = () => { + const response = useResizeObserver(); + controller.reportMeasuredSize(response); - useEffect(() => { - resolveHandler(createComponentHandler({ currentSizeRef })); - }, []); - - return ( -
- {width}x{height} -
- ); + return
; }; - const { assertSize } = await render(Test); + render(); + + await act(async () => { + await awaitNextFrame(); + }); - await awaitNextFrame(); - assertSize({ width: 50, height: 40 }); + controller.assertMeasuredSize({ width: 50, height: 40 }); }); }); diff --git a/tests/ssr.test.tsx b/tests/ssr.test.tsx index 505b22a..e022d2b 100644 --- a/tests/ssr.test.tsx +++ b/tests/ssr.test.tsx @@ -1,11 +1,11 @@ -import ReactDOM from "react-dom"; +import { hydrateRoot } from "react-dom/client"; import React from "react"; import delay from "delay"; // opting out from ts checks const Test = require("./ssr/Test"); // This is replaced with the "server-generated" string before the tests are run. -const html = `
1x2
`; +const html = `
1x2
`; describe("SSR", () => { it("should render with the defaults first, then hydrate properly", async () => { @@ -19,7 +19,7 @@ describe("SSR", () => { throw new Error("#app not found"); } - ReactDOM.hydrate(, app); + hydrateRoot(app, ); expect(app.textContent).toBe(`1x2`); diff --git a/tests/ssr/ssr.template.tsx b/tests/ssr/ssr.template.tsx index da0ab1b..fc7b5d8 100644 --- a/tests/ssr/ssr.template.tsx +++ b/tests/ssr/ssr.template.tsx @@ -1,4 +1,4 @@ -import ReactDOM from "react-dom"; +import { hydrateRoot } from "react-dom/client"; import React from "react"; import delay from "delay"; // opting out from ts checks @@ -19,7 +19,7 @@ describe("SSR", () => { throw new Error("#app not found"); } - ReactDOM.hydrate(, app); + hydrateRoot(app, ); expect(app.textContent).toBe(`1x2`); diff --git a/tests/testing-lib.tsx b/tests/testing-lib.tsx index be8f6bd..919bdcb 100644 --- a/tests/testing-lib.tsx +++ b/tests/testing-lib.tsx @@ -1,7 +1,7 @@ // Tests written with react testing library import React, { useRef, useState, useCallback } from "react"; import useResizeObserver from "../"; -import { render, cleanup } from "@testing-library/react"; +import { render, cleanup, act } from "@testing-library/react"; import useRenderTrigger from "./utils/useRenderTrigger"; import awaitNextFrame from "./utils/awaitNextFrame"; import createController from "./utils/createController"; @@ -44,11 +44,56 @@ describe("Testing Lib: Basics", () => { controller.assertRenderCount(1); // Should react to component size changes. - await controller.setSize({ width: 100, height: 200 }); + await act(async () => { + await controller.setSize({ width: 100, height: 200 }); + }); controller.assertMeasuredSize({ width: 100, height: 200 }); controller.assertRenderCount(2); }); + + it("should render normally in react 18 strict mode on mount", async () => { + const controller = createController(); + const Test = () => { + const { ref, width, height } = useResizeObserver(); + controller.reportMeasuredSize({ width, height }); + + return
; + }; + + render( + + + + ); + await act(async () => { + await awaitNextFrame(); + }); + + controller.assertMeasuredSize({ width: 100, height: 100 }); + }); + + it("should call onResize on mount when a custom ref is used", async () => { + const controller = createController(); + const Test = () => { + const ref = useRef(null); + useResizeObserver({ + ref, + onResize: (size) => { + controller.reportMeasuredSize(size); + }, + }); + + return
; + }; + + render(); + await act(async () => { + await awaitNextFrame(); + }); + + controller.assertMeasuredSize({ width: 10, height: 20 }); + }); }); describe("Testing Lib: Resize Observer Instance Counting Block", () => { @@ -111,8 +156,9 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { render(); - await awaitNextFrame(); - await controller.triggerRender(); + act(() => { + controller.triggerRender(); + }); // Different onResize instances used to trigger the hook's internal useEffect, // resulting in the hook using a new ResizeObserver instance on each render @@ -142,14 +188,14 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { }; const { rerender } = render(); - await awaitNextFrame(); expect(resizeObserverInstanceCount).toBe(1); expect(resizeObserverObserveCount).toBe(1); expect(resizeObserverUnobserveCount).toBe(0); - rerender(); - await awaitNextFrame(); + act(() => { + rerender(); + }); expect(resizeObserverInstanceCount).toBe(1); expect(resizeObserverObserveCount).toBe(2); @@ -185,8 +231,13 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { expect(measuredHeight).toBe(undefined); // Actually kickstarting the hook by switching from null to a real ref. - rerender(); - await awaitNextFrame(); + await act(async () => { + rerender(); + }); + await act(async () => { + await awaitNextFrame(); + }); + expect(resizeObserverInstanceCount).toBe(1); expect(renderCount).toBe(3); expect(measuredWidth).toBe(100); @@ -204,7 +255,8 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { // then set the ref from null, to its actual object value. // @see https://github.com/ZeeCoder/use-resize-observer/issues/43#issuecomment-674719609 const Test = ({ mount = false }) => { - const { ref, width, height } = useResizeObserver(); + const ref = useRef(null); + const { width, height } = useResizeObserver({ ref }); controller.triggerRender = useRenderTrigger(); controller.reportMeasuredSize({ width, height }); @@ -268,8 +320,12 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { // Once mounted, the hook should automatically pick the new element up with // the RefCallback. - rerender(); - await awaitNextFrame(); + await act(async () => { + rerender(); + }); + await act(async () => { + await awaitNextFrame(); + }); controller.assertMeasuredSize({ width: 100, height: 200 }); }); @@ -283,10 +339,14 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { return
; }; - render(); + act(() => { + render(); + }); controller.assertMeasuredSize({ width: undefined, height: undefined }); - await awaitNextFrame(); + await act(async () => { + await awaitNextFrame(); + }); controller.assertMeasuredSize({ width: 100, height: 200 }); }); @@ -314,7 +374,9 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { render(); controller.assertMeasuredSize({ width: undefined, height: undefined }); - await awaitNextFrame(); + await act(async () => { + await awaitNextFrame(); + }); controller.assertMeasuredSize({ width: 100, height: 200 }); }); @@ -331,7 +393,6 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { const [box, setBox] = useState("border-box"); c2.setBox = useCallback(async (box) => { setBox(box); - await awaitNextFrame(); }, []); const { ref, width, height } = useResizeObserver({ box }); @@ -360,7 +421,9 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { c1.assertRenderCount(1); // Should react to component size changes. - await c1.setSize({ width: 100, height: 200 }); + await act(async () => { + await c1.setSize({ width: 100, height: 200 }); + }); // Should report border-size if (supports.borderBox) { @@ -373,7 +436,12 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { } // Should be able to switch to observing content-box - await c2.setBox("content-box"); + await act(async () => { + await c2.setBox("content-box"); + }); + await act(async () => { + await awaitNextFrame(); + }); c1.assertMeasuredSize({ width: 100, height: 200 }); // 2 extra render should be happening: @@ -386,7 +454,12 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { } // Switching back yet again should be reported with "undefined" in non-supporting browsers. - await c2.setBox("border-box"); + await act(async () => { + await c2.setBox("border-box"); + }); + await act(async () => { + await awaitNextFrame(); + }); if (supports.borderBox) { c1.assertRenderCount(6); c1.assertMeasuredSize({ width: 142, height: 222 }); @@ -441,7 +514,9 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { c1.assertRenderCount(1); c1.assertMeasuredSize({ width: undefined, height: undefined }); - await c1.setSize({ width: 100, height: 200 }); + await act(async () => { + await c1.setSize({ width: 100, height: 200 }); + }); if (supports.devicePixelContentBoxSize) { c1.assertRenderCount(2); c1.assertMeasuredSize({ @@ -482,11 +557,15 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { c.assertRenderCount(1); c.assertMeasuredSize({ width: undefined, height: undefined }); - await c.setSize({ width: 100, height: 200 }); + await act(async () => { + await c.setSize({ width: 100, height: 200 }); + }); c.assertRenderCount(2); c.assertMeasuredSize({ width: 100, height: 200 }); - await c.setSize({ width: 100.2, height: 200.4 }); + await act(async () => { + await c.setSize({ width: 100.2, height: 200.4 }); + }); c.assertRenderCount(2); c.assertMeasuredSize({ width: 100, height: 200 }); }); @@ -513,7 +592,6 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { setRounder(() => fn === "multiply" ? (n: number) => Math.round(n * 2) : undefined ); - await awaitNextFrame(); }; } ); @@ -530,20 +608,35 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { c1.assertRenderCount(1); c1.assertMeasuredSize({ width: undefined, height: undefined }); - await c1.setSize({ width: 100.1, height: 200.1 }); + await act(async () => { + await c1.setSize({ width: 100.1, height: 200.1 }); + }); c1.assertRenderCount(2); c1.assertMeasuredSize({ width: 101, height: 201 }); // Testing normal re-renders - await c1.setSize({ width: 200.2, height: 300.2 }); + + await act(async () => { + await c1.setSize({ width: 200.2, height: 300.2 }); + }); c1.assertRenderCount(3); c1.assertMeasuredSize({ width: 201, height: 301 }); - await c2.replaceRoundFunction("multiply"); + await act(async () => { + await c2.replaceRoundFunction("multiply"); + }); + await act(async () => { + await awaitNextFrame(); + }); c1.assertRenderCount(5); c1.assertMeasuredSize({ width: 400, height: 600 }); - await c2.replaceRoundFunction("unset"); + await act(async () => { + await c2.replaceRoundFunction("unset"); + }); + await act(async () => { + await awaitNextFrame(); + }); c1.assertRenderCount(7); c1.assertMeasuredSize({ width: 200, height: 300 }); }); @@ -584,27 +677,39 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => { c.assertRenderCount(1); c.assertMeasuredSize({ width: undefined, height: undefined }); - await c.setSize({ width: 100, height: 100 }); + await act(async () => { + await c.setSize({ width: 100, height: 100 }); + }); c.assertRenderCount(2); c.assertMeasuredSize({ width: 0, height: 0 }); - await c.setSize({ width: 200, height: 200 }); + await act(async () => { + await c.setSize({ width: 200, height: 200 }); + }); c.assertRenderCount(2); c.assertMeasuredSize({ width: 0, height: 0 }); - await c.setSize({ width: 600, height: 600 }); + await act(async () => { + await c.setSize({ width: 600, height: 600 }); + }); c.assertRenderCount(3); c.assertMeasuredSize({ width: 500, height: 500 }); - await c.setSize({ width: 1100, height: 600 }); + await act(async () => { + await c.setSize({ width: 1100, height: 600 }); + }); c.assertRenderCount(4); c.assertMeasuredSize({ width: 1000, height: 500 }); - await c.setSize({ width: 1100, height: 800 }); + await act(async () => { + await c.setSize({ width: 1100, height: 800 }); + }); c.assertRenderCount(4); c.assertMeasuredSize({ width: 1000, height: 500 }); - await c.setSize({ width: 1100, height: 1100 }); + await act(async () => { + await c.setSize({ width: 1100, height: 1100 }); + }); c.assertRenderCount(5); c.assertMeasuredSize({ width: 1000, height: 1000 }); }); diff --git a/tests/utils/index.tsx b/tests/utils/index.tsx index ca2bafa..d981144 100644 --- a/tests/utils/index.tsx +++ b/tests/utils/index.tsx @@ -1,8 +1,4 @@ -import React, { useRef, RefObject, FunctionComponent } from "react"; -import ReactDOM from "react-dom"; -import useResizeObserver from "../.."; -import useMergedCallbackRef from "./useMergedCallbackRef"; -import awaitNextFrame from "./awaitNextFrame"; +import React from "react"; // Creating an RO instance ahead of time as a "side effect" of using this module, to avoid affecting tests. export const supports = { @@ -16,218 +12,7 @@ new ResizeObserver((entries) => { ); }).observe(document.body); -export type Size = { - width: number; - height: number; -}; - export type ObservedSize = { width: number | undefined; height: number | undefined; }; - -type BaseComponentHandler = { - assertSize: (size: ObservedSize) => void; - assertDefaultSize: () => void; -}; -type SizingComponentHandler = { - setSize: (size: Size | ObservedSize) => void; - setAndAssertSize: (size: Size | ObservedSize) => void; -}; -type CountingComponentHandler = { - assertRenderCount: (count: number) => void; -}; - -export type ComponentHandler = BaseComponentHandler & - SizingComponentHandler & - CountingComponentHandler; - -export function createComponentHandler(opts: { - currentSizeRef: RefObject; -}): BaseComponentHandler; -export function createComponentHandler(opts: { - currentSizeRef: RefObject; - element: HTMLElement; -}): BaseComponentHandler & SizingComponentHandler; -export function createComponentHandler(opts: { - currentSizeRef: RefObject; - renderCountRef: RefObject; -}): BaseComponentHandler & CountingComponentHandler; -export function createComponentHandler(opts: { - currentSizeRef: RefObject; - element: HTMLElement; - renderCountRef: RefObject; -}): ComponentHandler; -export function createComponentHandler({ - currentSizeRef, - element, - renderCountRef, -}: { - currentSizeRef: RefObject; - element?: HTMLElement; - renderCountRef?: RefObject; -}): BaseComponentHandler { - let handler = { - assertSize: function ({ width, height }: ObservedSize) { - if (currentSizeRef.current === null) { - throw new Error(`currentSizeRef.current is not set.`); - } - - expect(currentSizeRef.current.width).toBe(width); - expect(currentSizeRef.current.height).toBe(height); - }, - assertDefaultSize: function () { - return this.assertSize({ width: undefined, height: undefined }); - }, - } as ComponentHandler; - - if (element) { - handler.setSize = ({ width, height }) => { - if (element === null) { - throw new Error(`element is not set.`); - } - - element.style.width = `${width}px`; - element.style.height = `${height}px`; - }; - handler.setAndAssertSize = async (size) => { - handler.setSize(size); - await awaitNextFrame(); - handler.assertSize(size); - }; - } - - if (renderCountRef) { - handler.assertRenderCount = (count) => { - expect(renderCountRef.current).toBe(count); - }; - } - - return handler; -} - -export type HandlerResolverComponentProps = { - resolveHandler: HandlerReceiver; -}; - -export type MultiHandlerResolverComponentProps = { - resolveHandler: MultiHandlerReceiver; -}; - -export const Observed: FunctionComponent< - HandlerResolverComponentProps & { - defaultWidth?: number; - defaultHeight?: number; - onResize?: (size: ObservedSize) => void; - } -> = ({ resolveHandler, defaultWidth, defaultHeight, onResize, ...props }) => { - const renderCountRef = useRef(0); - const { - ref, - width = defaultWidth, - height = defaultHeight, - } = useResizeObserver({ onResize }); - const currentSizeRef = useRef({ - width: undefined, - height: undefined, - }); - currentSizeRef.current.width = width; - currentSizeRef.current.height = height; - renderCountRef.current++; - - const mergedCallbackRef = useMergedCallbackRef( - ref, - (element: HTMLElement) => { - if (!resolveHandler) { - return; - } - - resolveHandler( - createComponentHandler({ - currentSizeRef, - renderCountRef, - element, - }) - ); - } - ); - - return ( -
- - {width}x{height} - -
- Render Count: {renderCountRef.current} -
-
- ); -}; - -export type HandlerReceiver = >( - handler: T -) => void; -export type MultiHandlerReceiver = >( - handler: T[] -) => void; - -let appRoot: HTMLDivElement | null = null; - -export function render( - TestComponent: FunctionComponent, - opts?: { waitForFirstMeasurement?: boolean }, - props?: {} -): Promise; -export function render( - TestComponent: FunctionComponent, - opts?: { waitForFirstMeasurement?: boolean }, - props?: {} -): Promise; -export function render( - TestComponent: - | FunctionComponent - | FunctionComponent, - { - waitForFirstMeasurement = false, - }: { waitForFirstMeasurement?: boolean } = {}, - props?: {} -) { - return new Promise((resolve) => { - async function resolveHandler>( - handler: T | T[] - ): Promise { - if (waitForFirstMeasurement) { - await awaitNextFrame(); - } - - resolve(handler); - } - - if (!appRoot) { - appRoot = document.createElement("div"); - appRoot.id = "app"; - document.body.appendChild(appRoot); - } - - // Clean out previous renders - ReactDOM.render(
, appRoot); - - ReactDOM.render( - , - appRoot - ); - }); -} diff --git a/yarn.lock b/yarn.lock index 9ad5c62..0e62bca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -918,15 +918,7 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-typescript" "^7.15.0" -"@babel/runtime-corejs3@^7.10.2": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz#28754263988198f2a928c09733ade2fb4d28089d" - integrity sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A== - dependencies: - core-js-pure "^3.16.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": version "7.15.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== @@ -965,11 +957,21 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@gar/promisify@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== +"@isaacs/string-locale-compare@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "@jest/types@^27.1.0": version "27.1.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.0.tgz#674a40325eab23c857ebc0689e7e191a3c5b10cc" @@ -1007,11 +1009,12 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@*", "@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0": - version "2.8.2" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.8.2.tgz#643f8c8a26ffbaa579983972f67a60cb6217e86a" - integrity sha512-6E1XJ0YXBaI9J+25gcTF110MGNx3jv6npr4Rz1U0UAqkuVV7bbDznVJvNqi6F0p8vgrE+Smf9jDTn1DR+7uBjQ== +"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.8.2": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" + integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== dependencies: + "@isaacs/string-locale-compare" "^1.0.1" "@npmcli/installed-package-contents" "^1.0.7" "@npmcli/map-workspaces" "^1.0.2" "@npmcli/metavuln-calculator" "^1.1.0" @@ -1044,15 +1047,15 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" - integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== +"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" + integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/config@*": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.2.0.tgz#c3f6cb76e74691d1ae746cda482b7df751ed2124" - integrity sha512-y0V3F7RCWXy8kBOvKvKSRUNKRobLB6vL/UNchy/6+IUNIqu+UyrY3Z7jvj1ZA/AkYc/0WkCUtppCo+bPhMU8Aw== +"@npmcli/config@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.4.0.tgz#1447b0274f9502871dabd3ab1d8302472d515b1f" + integrity sha512-fwxu/zaZnvBJohXM3igzqa3P1IVYWi5N343XcKvKkJbAx+rTqegS5tAul4NLiMPQh6WoS5a4er6oo/ieUx1f4g== dependencies: ini "^2.0.0" mkdirp-infer-owner "^2.0.0" @@ -1097,7 +1100,7 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^1.0.2": +"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== @@ -1134,7 +1137,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== -"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": +"@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -1148,7 +1151,7 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@*", "@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4": +"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -1420,27 +1423,28 @@ webpack "^4.44.1" webpack-bundle-analyzer "^4.4.2" -"@testing-library/dom@^8.0.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.2.0.tgz#ac46a1b9d7c81f0d341ae38fb5424b64c27d151e" - integrity sha512-U8cTWENQPHO3QHvxBdfltJ+wC78ytMdg69ASvIdkGdQ/XRg4M9H2vvM3mHddxl+w/fM6NNqzGMwpQoh82v9VIA== +"@testing-library/dom@^8.5.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" + integrity sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" + aria-query "^5.0.0" chalk "^4.1.0" - dom-accessibility-api "^0.5.6" + dom-accessibility-api "^0.5.9" lz-string "^1.4.4" pretty-format "^27.0.2" -"@testing-library/react@^12.0.0": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.0.0.tgz#9aeb2264521522ab9b68f519eaf15136148f164a" - integrity sha512-sh3jhFgEshFyJ/0IxGltRhwZv2kFKfJ3fN1vTZ6hhMXzz9ZbbcTgmDYM4e+zJv+oiVKKEWZPyqPAh4MQBI65gA== +"@testing-library/react@^13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.1.1.tgz#6c1635e25acca8ca5be8ee3b19ad1391681c5846" + integrity sha512-8mirlAa0OKaUvnqnZF6MdAh2tReYA2KtWVw1PKvaF5EcCZqgK5pl8iF+3uW90JdG5Ua2c2c2E2wtLdaug3dsVg== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" + "@testing-library/dom" "^8.5.0" + "@types/react-dom" "^18.0.0" "@tootallnate/once@1": version "1.1.2" @@ -1543,21 +1547,21 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/react-dom@^17.0.9": - version "17.0.9" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add" - integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg== +"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.3": + version "18.0.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.3.tgz#a022ea08c75a476fe5e96b675c3e673363853831" + integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.15": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.19.tgz#8f2a85e8180a43b57966b237d26a29481dacc991" - integrity sha512-sX1HisdB1/ZESixMTGnMxH9TDe8Sk709734fEQZzCV/4lSu9kJCPbo2PbTRoZM+53Pp0P10hYVyReUueGwUi4A== +"@types/react@*", "@types/react@^18.0.8": + version "18.0.8" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.8.tgz#a051eb380a9fbcaa404550543c58e1cf5ce4ab87" + integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1748,7 +1752,7 @@ JSONStream@^1.0.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abbrev@*, abbrev@1: +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -1883,12 +1887,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@*, ansicolors@~0.3.2: +ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@*: +ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -1919,12 +1923,20 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@*: +archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= -are-we-there-yet@^1.1.5, are-we-there-yet@~1.1.2: +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== @@ -1937,13 +1949,10 @@ argv-formatter@~1.0.0: resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" +aria-query@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== arr-diff@^4.0.0: version "4.0.0" @@ -2380,7 +2389,28 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@*, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -2404,27 +2434,6 @@ cacache@*, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.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" @@ -2478,9 +2487,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001251: - version "1.0.30001252" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz#cb16e4e3dafe948fc4a9bb3307aea054b912019a" - integrity sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw== + version "1.0.30001334" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz" + integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw== cardinal@^2.1.1: version "2.1.1" @@ -2495,14 +2504,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@*, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2512,6 +2513,14 @@ chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2546,16 +2555,16 @@ chokidar@^3.4.1, chokidar@^3.5.1, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" -chownr@*, chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -2596,7 +2605,7 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@*: +cli-columns@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= @@ -2611,15 +2620,14 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table3@*: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" - integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== +cli-table3@^0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== dependencies: - object-assign "^4.1.0" string-width "^4.2.0" optionalDependencies: - colors "^1.1.2" + "@colors/colors" "1.5.0" cli-table@^0.3.1: version "0.3.6" @@ -2719,7 +2727,7 @@ colors@^1.1.2, colors@^1.4.0: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@*: +columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -2899,11 +2907,6 @@ core-js-compat@^3.14.0, core-js-compat@^3.16.0: browserslist "^4.16.8" semver "7.0.0" -core-js-pure@^3.16.0: - version "3.16.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.16.3.tgz#41ccb9b6027535f8dd51a0af004c1c7f0a8c9ca7" - integrity sha512-6In+2RwN0FT5yK0ZnhDP5rco/NnuuFZhHauQizZiHo5lDnqAvq8Phxcpy3f+prJOqtKodt/cftBl/GTOW0kiqQ== - core-js@^3.6.5: version "3.16.3" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.3.tgz#1f2d43c51a9ed014cc6c83440af14697ae4b75f2" @@ -3121,9 +3124,9 @@ csso@^4.2.0: css-tree "^1.1.2" csstype@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== + version "3.0.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" + integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== custom-event@~1.0.0: version "1.0.1" @@ -3323,10 +3326,10 @@ dir-glob@^3.0.0, dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dom-accessibility-api@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.7.tgz#8c2aa6325968f2933160a0b7dbb380893ddf3e7d" - integrity sha512-ml3lJIq9YjUfM9TUnEPvEYWFSwivwIGBPKpewX7tii7fwCazA8yCioGdqQcNsItPpfFvSJ3VIdMQPj60LJhcQA== +dom-accessibility-api@^0.5.9: + version "0.5.14" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" + integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== dom-serialize@^2.2.1: version "2.2.1" @@ -3783,7 +3786,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fastest-levenshtein@*: +fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -4133,7 +4136,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@*, glob@^7.0.5, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: +glob@^7.0.5, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -4162,10 +4165,10 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.0.4: merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@*, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== gzip-size@^6.0.0: version "6.0.0" @@ -4305,18 +4308,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -4505,7 +4508,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@*, ini@^2.0.0: +ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -4515,16 +4518,15 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@*: - version "2.0.4" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.4.tgz#9f9f66cd5934e6d5f645150e15013d384d0b90d2" - integrity sha512-gUACSdZYka+VvnF90TsQorC+1joAVWNI724vBNj3RD0LLMeDss2IuzaeiQs0T4YzKs76BPHtrp/z3sn2p+KDTw== +init-package-json@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.5.tgz#78b85f3c36014db42d8f32117252504f68022646" + integrity sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA== dependencies: - glob "^7.1.1" - npm-package-arg "^8.1.2" + npm-package-arg "^8.1.5" promzard "^0.3.0" read "~1.0.1" - read-package-json "^4.0.0" + read-package-json "^4.1.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" @@ -4619,7 +4621,7 @@ is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-cidr@*: +is-cidr@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -4945,7 +4947,7 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5140,7 +5142,7 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -libnpmaccess@*: +libnpmaccess@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -5150,7 +5152,7 @@ libnpmaccess@*: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@*: +libnpmdiff@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -5164,7 +5166,7 @@ libnpmdiff@*: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@*: +libnpmexec@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== @@ -5181,14 +5183,14 @@ libnpmexec@*: read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@*: +libnpmfund@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== dependencies: "@npmcli/arborist" "^2.5.0" -libnpmhook@*: +libnpmhook@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -5196,7 +5198,7 @@ libnpmhook@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@*: +libnpmorg@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -5204,7 +5206,7 @@ libnpmorg@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@*: +libnpmpack@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== @@ -5213,7 +5215,7 @@ libnpmpack@*: npm-package-arg "^8.1.0" pacote "^11.2.6" -libnpmpublish@*: +libnpmpublish@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -5224,14 +5226,14 @@ libnpmpublish@*: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@*: +libnpmsearch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@*: +libnpmteam@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -5239,7 +5241,7 @@ libnpmteam@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@*: +libnpmversion@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== @@ -5476,7 +5478,7 @@ make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-fetch-happen@*, make-fetch-happen@^9.0.1: +make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -5498,27 +5500,6 @@ make-fetch-happen@*, make-fetch-happen@^9.0.1: socks-proxy-agent "^6.0.0" ssri "^8.0.0" -make-fetch-happen@^8.0.14: - version "8.0.14" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" - integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - promise-retry "^2.0.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5763,7 +5744,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -5777,7 +5758,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== @@ -5816,7 +5797,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -5825,11 +5806,6 @@ mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@^0.5.3: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -5837,6 +5813,11 @@ mkdirp@^0.5.1, mkdirp@^0.5.3: dependencies: minimist "^1.2.5" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -5854,11 +5835,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@*, ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5869,6 +5845,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -5933,23 +5914,7 @@ node-fetch@^2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-gyp@*: - version "8.2.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.2.0.tgz#ef509ccdf5cef3b4d93df0690b90aa55ff8c7977" - integrity sha512-KG8SdcoAnw2d6augGwl1kOayALUrXW/P2uOAm2J2+nmW/HjZo7y+8TDg7LejxbekOOSv3kzhq+NSUYkIDAX8eA== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^8.0.14" - nopt "^5.0.0" - npmlog "^4.1.2" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-gyp@^7.1.0: +node-gyp@^7.1.0, node-gyp@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== @@ -5999,7 +5964,7 @@ node-releases@^1.1.75: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== -nopt@*, nopt@^5.0.0: +nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -6043,7 +6008,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@*: +npm-audit-report@^2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -6069,7 +6034,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -6088,7 +6053,7 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -6098,14 +6063,14 @@ npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pic npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@*: +npm-profile@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" -npm-registry-fetch@*, npm-registry-fetch@^11.0.0: +npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== @@ -6139,7 +6104,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@*: +npm-user-validate@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -6218,16 +6183,6 @@ npm@^7.0.0: which "^2.0.2" write-file-atomic "^3.0.3" -npmlog@*: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.0.tgz#e6a41b556e9b34cb29ea132294676c07acb30efb" - integrity sha512-ftpIiLjerL2tUg3dCqN8pOSoB90gqZlzv/gaZoxHaKjeLClrfJIEQ1Pdxi6qSzflz916Bljdy8dTWQ4J7hAFSQ== - dependencies: - are-we-there-yet "^1.1.5" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -6238,6 +6193,16 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" @@ -6324,7 +6289,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@*, opener@^1.5.2: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -6430,7 +6395,7 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@*, pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: +pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -6487,7 +6452,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-conflict-json@*, parse-conflict-json@^1.1.1: +parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -7064,7 +7029,7 @@ qjobs@^1.2.0: resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qrcode-terminal@*: +qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -7158,34 +7123,32 @@ react-app-polyfill@^2.0.0: regenerator-runtime "^0.13.7" whatwg-fetch "^3.4.1" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.0.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" + integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.22.0" react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.0.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" + integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-cmd-shim@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: +read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -7193,10 +7156,10 @@ read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@ json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@*, read-package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.0.1.tgz#da88a38c410344fecb7d840d35f27635e848ea54" - integrity sha512-czqCcYfkEl6sIFJVOND/5/Goseu7cVw1rcDUATq6ED0jLGjMm9/HOPmFmEZMvRu9yl272YERaMUcOlvcNU9InQ== +read-package-json@^4.0.1, read-package-json@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.2.tgz#b444d047de7c75d4a160cb056d00c0693c1df703" + integrity sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ== dependencies: glob "^7.1.1" json-parse-even-better-errors "^2.3.0" @@ -7231,7 +7194,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@*, read@1, read@^1.0.7, read@~1.0.1: +read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -7260,7 +7223,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -7471,13 +7434,6 @@ rfdc@^1.1.4: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@*, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -7485,6 +7441,13 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@~2.5.2: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" @@ -7550,13 +7513,12 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@^1.0.0: version "1.0.0" @@ -7636,13 +7598,6 @@ semver-regex@^3.1.2: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== -semver@*, semver@7.3.5, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -7653,6 +7608,13 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@7.3.5, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -7859,15 +7821,6 @@ socket.io@^3.1.0: socket.io-adapter "~2.1.0" socket.io-parser "~4.0.3" -socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - socks-proxy-agent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.0.0.tgz#9f8749cdc05976505fa9f9a958b1818d0e60573b" @@ -7877,7 +7830,7 @@ socks-proxy-agent@^6.0.0: debug "^4.3.1" socks "^2.6.1" -socks@^2.3.3, socks@^2.6.1: +socks@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== @@ -8015,13 +7968,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@*, ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -8029,6 +7975,13 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -8286,7 +8239,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -8350,7 +8303,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@*: +text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -8387,7 +8340,7 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tiny-relative-date@*: +tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -8464,7 +8417,7 @@ traverse@~0.6.6: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= -treeverse@*, treeverse@^1.0.4: +treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -8735,7 +8688,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@*, validate-npm-package-name@^3.0.0: +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -8876,13 +8829,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@*, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - which@^1.2.1, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -8890,6 +8836,13 @@ which@^1.2.1, which@^1.2.9: dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -8932,7 +8885,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@*, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==