diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 753ceb3d98..bf54207cdd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: run: yarn run build - name: Jest run - run: yarn run test + run: yarn run dev && yarn run test - name: Report Fiber size run: yarn run analyze-fiber diff --git a/docs/API/canvas.mdx b/docs/API/canvas.mdx index 7dcb4dbd5e..7723e69230 100644 --- a/docs/API/canvas.mdx +++ b/docs/API/canvas.mdx @@ -23,27 +23,27 @@ const App = () => ( ## Properties -| Prop | Description | Default | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | -| children | three.js JSX elements or regular components | | -| fallback | optional DOM JSX elements or regular components in case GL is not supported | | -| gl | Props that go into the default renderer, or your own renderer. Also accepts a synchronous callback like `gl={canvas => new Renderer({ canvas })}` | `{}` | -| camera | Props that go into the default camera, or your own `THREE.Camera` | `{ fov: 75, near: 0.1, far: 1000, position: [0, 0, 5] }` | -| scene | Props that go into the default scene, or your own `THREE.Scene` | `{}` | -| shadows | Props that go into `gl.shadowMap`, can be set true for `PCFsoft` or one of the following: 'basic', 'percentage', 'soft', 'variance' | `false` | -| raycaster | Props that go into the default raycaster | `{}` | -| frameloop | Render mode: always, demand, never | `always` | -| resize | Resize config, see react-use-measure's options | `{ scroll: true, debounce: { scroll: 50, resize: 0 } }` | -| orthographic | Creates an orthographic camera | `false` | -| dpr | Pixel-ratio, use `window.devicePixelRatio`, or automatic: [min, max] | `[1, 2]` | -| legacy | Enables THREE.ColorManagement in three r139 or later | `false` | -| linear | Switch off automatic sRGB color space and gamma correction | `false` | -| events | Configuration for the event manager, as a function of state | `import { events } from "@react-three/fiber"` | -| eventSource | The source where events are being subscribed to, HTMLElement | `React.MutableRefObject`, `gl.domElement.parentNode` | -| eventPrefix | The event prefix that is cast into canvas pointer x/y events | `offset` | -| flat | Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` | `false` | -| onCreated | Callback after the canvas has rendered (but not yet committed) | `(state) => {}` | -| onPointerMissed | Response for pointer clicks that have missed any target | `(event) => {}` | +| Prop | Description | Default | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | +| children | three.js JSX elements or regular components | | +| fallback | optional DOM JSX elements or regular components in case GL is not supported | | +| gl | Props that go into the default renderer, or your own renderer. Also accepts a synchronous callback like `gl={canvas => new Renderer({ canvas })}` | `{}` | +| camera | Props that go into the default camera, or your own `THREE.Camera` | `{ fov: 75, near: 0.1, far: 1000, position: [0, 0, 5] }` | +| scene | Props that go into the default scene, or your own `THREE.Scene` | `{}` | +| shadows | Props that go into `gl.shadowMap`, can be set true for `PCFsoft` or one of the following: 'basic', 'percentage', 'soft', 'variance' | `false` | +| raycaster | Props that go into the default raycaster | `{}` | +| frameloop | Render mode: always, demand, never | `always` | +| resize | Resize config, see react-use-measure's options | `{ scroll: true, debounce: { scroll: 50, resize: 0 } }` | +| orthographic | Creates an orthographic camera | `false` | +| dpr | Pixel-ratio, use `window.devicePixelRatio`, or automatic: [min, max] | `[1, 2]` | +| legacy | Enables THREE.ColorManagement in three r139 or later | `false` | +| linear | Switch off automatic sRGB color space and gamma correction | `false` | +| events | Configuration for the event manager, as a function of state | `import { events } from "@react-three/fiber"` | +| eventSource | The source where events are being subscribed to, HTMLElement | `React.RefObject`, `gl.domElement.parentNode` | +| eventPrefix | The event prefix that is cast into canvas pointer x/y events | `offset` | +| flat | Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` | `false` | +| onCreated | Callback after the canvas has rendered (but not yet committed) | `(state) => {}` | +| onPointerMissed | Response for pointer clicks that have missed any target | `(event) => {}` | ## Defaults diff --git a/docs/API/hooks.mdx b/docs/API/hooks.mdx index bb76ec4a69..821663af26 100644 --- a/docs/API/hooks.mdx +++ b/docs/API/hooks.mdx @@ -64,14 +64,14 @@ The hook is reactive, if you resize the browser for instance, you get fresh meas | `legacy` | Disables global color management via `THREE.ColorManagement` | `boolean` | | `frameloop` | Render mode: always, demand, never | `always`, `demand`, `never` | | `performance` | System regression | `{ current: number, min: number, max: number, debounce: number, regress: () => void }` | -| `size` | Canvas size in pixels | `{ width: number, height: number, top: number, left: number, updateStyle?: boolean }` | +| `size` | Canvas size in pixels | `{ width: number, height: number, top: number, left: number }` | | `viewport` | Viewport size in three.js units | `{ width: number, height: number, initialDpr: number, dpr: number, factor: number, distance: number, aspect: number, getCurrentViewport: (camera?: Camera, target?: THREE.Vector3, size?: Size) => Viewport }` | | `xr` | XR interface, manages WebXR rendering | `{ connect: () => void, disconnect: () => void }` | | `set` | Allows you to set any state property | `(state: SetState) => void` | | `get` | Allows you to retrieve any state property non-reactively | `() => GetState` | | `invalidate` | Request a new render, given that `frameloop === 'demand'` | `() => void` | | `advance` | Advance one tick, given that `frameloop === 'never'` | `(timestamp: number, runGlobalEffects?: boolean) => void` | -| `setSize` | Resize the canvas | `(width: number, height: number, updateStyle?: boolean, top?: number, left?: number) => void` | +| `setSize` | Resize the canvas | `(width: number, height: number, top?: number, left?: number) => void` | | `setDpr` | Set the pixel-ratio | `(dpr: number) => void` | | `setFrameloop` | Shortcut to set the current render mode | `(frameloop?: 'always', 'demand', 'never') => void` | | `setEvents` | Shortcut to setting the event layer | `(events: Partial>) => void` | @@ -126,7 +126,7 @@ function Foo() { > [!CAUTION] > Be careful about what you do inside useFrame! You should never setState in there! Your calculations should be slim and - you should mind all the commonly known pitfalls when dealing with loops in general, like re-use of variables, etc. +> you should mind all the commonly known pitfalls when dealing with loops in general, like re-use of variables, etc. ### Taking over the render-loop diff --git a/docs/API/objects.mdx b/docs/API/objects.mdx index 7df1abe0c1..69837c4d4e 100644 --- a/docs/API/objects.mdx +++ b/docs/API/objects.mdx @@ -101,7 +101,7 @@ You can also deeply nest attach through piercing. The following adds a buffer-at ```jsx - + ``` #### More examples diff --git a/docs/triplex-app.png b/docs/triplex-app.png new file mode 100644 index 0000000000..523c71b78d Binary files /dev/null and b/docs/triplex-app.png differ diff --git a/docs/tutorials/typescript.mdx b/docs/tutorials/typescript.mdx index 64d6312bdc..f1b334a556 100644 --- a/docs/tutorials/typescript.mdx +++ b/docs/tutorials/typescript.mdx @@ -34,36 +34,7 @@ function Box(props) { The exclamation mark is a non-null assertion that will let TS know that `ref.current` is defined when we access it in effects. -## Typing shorthand props - -react-three-fiber accepts short-hand props like scalars, strings, and arrays so you can declaratively set properties without side effects. - -Here are the different variations of props: - -```tsx -import { Euler, Vector3, Color } from 'three' - -rotation: Euler || [x, y, z] -position: Vector3 || [x, y, z] || scalar -color: Color || 'hotpink' || 0xffffff -``` - -Each property has extended types which you can pull from to type these properties. - -```tsx -import { Euler, Vector3, Color } from '@react-three/fiber' -// or -// import { ReactThreeFiber } from '@react-three/fiber' -// ReactThreeFiber.Euler, ReactThreeFiber.Vector3, etc. - -rotation: Euler -position: Vector3 -color: Color -``` - -This is particularly useful if you are typing properties outside of components, such as a store or a hook. - -## `extend` usage +## Extend usage react-three-fiber can also accept third-party elements and extend them into its internal catalogue. @@ -77,6 +48,8 @@ class CustomElement extends GridHelper {} // Extend so the reconciler will learn about it extend({ CustomElement }) + + ``` The catalogue teaches the underlying reconciler how to create fibers for these elements and treat them within the scene. @@ -89,26 +62,14 @@ You can then declaratively create custom elements with primitives, but TypeScrip ``` -### Node Helpers - -react-three-fiber exports helpers that you can use to define different types of nodes. These nodes will type an element that we'll attach to the global JSX namespace. - -```tsx -Node -Object3DNode -BufferGeometryNode -MaterialNode -LightNode -``` - -### Extending `ThreeElements` +### Extending ThreeElements -Since our custom element is an object, we'll use `Object3DNode` to define it. +To define our element in JSX, we'll use the `ThreeElement` interface to extend `ThreeElements`. This interface describes three.js classes that are available in the R3F catalog and can be used as native elements. ```tsx import { useRef, useEffect } from 'react' import { GridHelper } from 'three' -import { extend, Object3DNode } from '@react-three/fiber' +import { extend, ThreeElement } from '@react-three/fiber' // Create our custom element class CustomElement extends GridHelper {} @@ -119,12 +80,12 @@ extend({ CustomElement }) // Add types to ThreeElements elements so primitives pick up on it declare module '@react-three/fiber' { interface ThreeElements { - customElement: Object3DNode + customElement: ThreeElement } } // react-three-fiber will create your custom component and TypeScript will understand it - +; ``` ## Exported types @@ -148,7 +109,7 @@ Viewport Camera // Canvas props -Props +CanvasProps // Supported events Events diff --git a/docs/tutorials/v8-migration-guide.mdx b/docs/tutorials/v8-migration-guide.mdx deleted file mode 100644 index d79c9885aa..0000000000 --- a/docs/tutorials/v8-migration-guide.mdx +++ /dev/null @@ -1,506 +0,0 @@ ---- -title: 'v8 Migration Guide' -description: Changes and new features with v8 and react 18 -nav: 12 ---- - -Work on version 8 has begun 3 Sep 2021 and is perhaps the biggest update to Fiber yet. We've tried our best to keep breaking-changes to a minimum, they mostly affect rarely used api's like `attach`. This release brings a ton of performance related fixes, but also includes some new and ground breaking features. - -We would like to express our gratitude to the community for their continued support, as well as to all our contributors. 🎉 - -## React Native support - -With React 18 and Expo 43, you can now ship threejs goodness across web and native. These apps are not confined to a web-view, they are truly native OpenGLES. - -Now expo-gl, which does the hard lifting, has existed for a while, but we've addressed some of the common concerns related to interop and making the three eco system readily work in the native space. For instance, you handle assets the same exact way you'd treat them in a web app. - -See [installation](/getting-started/installation#react-native) to get started with managed Expo or bare React Native apps. - -```diff -- import { Canvas, useLoader } from '@react-three/fiber' -+ import { Canvas, useLoader } from '@react-three/fiber/native' - -- import { useGLTF } from '@react-three/drei' -+ import { useGLTF } from '@react-three/drei/native' -``` - -This is complete with support for Pressability events and native threejs loaders. See [events](/api/events) for a complete list of events. - -```jsx - console.log('onPress')} - onPointerDown={(e) => console.log('onPressIn')} - onPointerUp={(e) => console.log('onPressOut')} - onDoubleClick={(e) => console.log('onLongPress')} - onPointerOver={(e) => console.log('onHoverIn')} - onPointerOut={(e) => console.log('onHoverOut')} - onPointerMove={(e) => console.log('onPressMove')} - // Not implemented - // onContextMenu={(e) => console.log('context menu')} - // onWheel={(e) => console.log('wheel spins')} -/> -``` - -```jsx -import React, { Suspense } from 'react' -import { useGLTF } from '@react-three/drei/native' -import { Canvas } from '@react-three/fiber/native' -import modelPath from './assets/model.glb' - -function Model(props) { - const { scene } = useGLTF(modelPath) - return -} - -export default function App() { - return ( - - - - - - ) -} -``` - -React Native support was submitted by [@Cody_J_Bennett](https://twitter.com/Cody_J_Bennett). 🎉 - -## Zustand and suspend-react - -Fiber uses [zustand](https://zustand.js.org/) to manage state. It's a simple, powerful, and performant state management library for React. And [suspend-react](https://github.com/pmndrs/suspend-react) to manage async ops and suspense (useLoader for instance). You can use these in your projects as well as they are to get closer interop with Fiber. - -## New pixel ratio default - -The default DPR has changed from `1` to `[1, 2]`, which will clamp between 1 and 2, but prefer 2, depending on the screen's native pixel ratio. - -This was the most common setting in the wild, so it was brought in as a better default. - -```diff -- -+ -``` - -## Color management - -Color management is now being handled by Three R139. Therefore we set `THREE.ColorManagement.enabled` to `true` and cede to touch colors and textures since everything will now be converted from sRGB to linear color space by Three itself. - -You can manipulate this yourself with the `legacy` prop: - -```jsx -// sets THREE.ColorManagement.enabled = false - -``` - -While you can of course use Fiber with any Three version you like we recommend updating to R139. - -Check out https://threejs.org/docs/#manual/en/introduction/Color-management for information. - -## Automatic concurrency - -Concurrency is now part of React 18, which automatically switches between blocking (default) and concurrent (async). - -```diff -- -+ -``` - -React 18 introduces the `startTransition` and `useTransition` APIs to defer and schedule expensive operations and state updates. Use these to de-prioritize expensive operations. - -```jsx -import { startTransition } from 'react' -import { Points } from '@react-three/drei' - -const [radius, setRadius] = useState(1) -const positions = calculatePositions(radius) -const colors = calculateColors(radius) -const sizes = calculateSizes(radius) - - startTransition(() => setRadius(prev => prev + 1))} -> - - -``` - -### Examples - -Please be careful, this is an extreme stress test. It creates so much load that without React the browser will freeze or crash. - -

- - View splitting - -

- -## Conditional rendering with `frameloop` - -`frameloop` can now be toggled to render conditionally. This is useful to toggle on user interaction or while in frame. - -```jsx -const [frameloop, setFrameloop] = useState('never') - - setFrameloop('always')} -/> -``` - -Another usecase would be using intersection observers to stop the canvas when it's out of view. - -```jsx -const canvasRef = useRef() -const [frameloop, setFrameloop] = useState('never') - -useEffect(() => { - const observer = new IntersectionObserver(([{ isIntersecting }]) => { - setFrameloop(isIntersecting ? 'always' : 'never') - }, {}) - - observer.observe(canvasRef.current) - return () => observer.disconnect() -}, []) - - -``` - -## Expanded `gl` prop - -The `gl` prop can now accept both constructor args and renderer properties like the `camera` prop. - -```jsx - -``` - -It can also accept a synchronous callback to manually create a renderer. This allows you to use any custom renderer you want. - -```jsx - new Renderer({ canvas })} /> -``` - -## Improved WebXR handling - -### Automatic WebXR switching - -The `vr` prop was removed in favor of automatic WebXR switching. Whenever a session is requested, XR features are enabled, and the renderer will render at the native refresh rate. The inverse is true when exiting a session. - -> `frameloop` will not be respected while in a session. - -```diff -- -+ -``` - -### Extended `useFrame` - -In addition to the automatic rendering, useFrame will expose the current [`XRFrame`](https://developer.mozilla.org/en-US/docs/Web/API/XRFrame) obtained via [XRSession#requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/XRSession/requestAnimationFrame). - -```ts -useFrame((state: RootState, delta: number, frame?: THREE.XRFrame) => { ... }) -``` - -This removes the need for custom rendering loops when using WebXR pose data and abstractions like `useXRFrame` of [@react-three/xr](https://github.com/pmndrs/react-xr). - -## Manual `camera` manipulation - -By default Fiber is responsive and will set up cameras properly on resize (aspect ratio etc). - -Cameras can be controlled manually by setting `manual` to true in `camera`. This will opt out of projection matrix recalculation when the drawing area resizes. - -```jsx - -``` - -This is also supported by all cameras that you create, be it a THREE.PerspectiveCamera or drei/cameras, put `manual` on it and Fiber will not touch it. - -```jsx -import { PerspectiveCamera } from '@react-three/drei' - - - -``` - -## Unified `attach` API - -Previously, attach had multiple signatures: - -- `attach="name"` -- `attachObject={["name", "attribute"]}` -- `attachArray="name"` -- `attachFns={["add", "remove"]}` -- `attachFns={[(self, parent) => parent.add(self), (self, parent) => parent.remove(self)]}` - -This is now a single, unified signature with support for piercing and named attach functions or custom handlers. - -```jsx -// Attach foo to parent.a - - -// Attach foo to parent.a.b and a.b.c (nested object attach) - - - -// Attach foo to parent.a[0] and [1] (array attach is just object attach) - - - -// Attach foo to parent via explicit add/remove functions - { - parent.add(self) - return () => parent.remove(self) -} /> - -// The same as a one liner - (parent.add(self), () => parent.remove(self))} /> -``` - -### Real-world use-cases: - -Attaching to nested objects: - -```diff -- -+ -+ -+ -``` - -```diff - -- -+ - -``` - -Arrays must be explcit now: - -```diff - -- {colors.map((color, index) => )} -+ {colors.map((color, index) => )} - -``` - -## Spread `Canvas` props - -The `` can now accept non-render props to spread as native props: styles, classes, events, a11y, ... - -```diff --
-- --
-+ -``` - -## New `createRoot` API - -`render` is depreciated in v8 for the new `createRoot` signature. - -```diff -import { -- render, -+ createRoot, - events -} from '@react-three/fiber' - -- render(, canvas, { event }) -+ createRoot(canvas).configure({ events }).render() -``` - -Here is a typical setup: - -```jsx -import * as THREE from 'three' -import { extend, createRoot, events } from '@react-three/fiber' - -extend(THREE) - -const root = createRoot(document.querySelector('#root')) - -window.addEventListener('resize', () => { - root.configure({ - events, - camera: { position: [0, 0, 50], fov: 50 }, - size: { width: window.innerWidth, height: window.innerHeight }, - }) - root.render() -}) -window.dispatchEvent(new Event('resize')) - -// This is how you would unmount the root -// root.unmount() -``` - -### Examples - -This is a custom-renderer example using the createRoot api: - -

- - View splitting - -

- -## Tree-shaking via `extend` - -The underlying reconciler no longer pulls in the THREE namespace automatically. - -This enables a granular catalogue and tree-shaking via the `extend` API: - -```jsx -import { extend, createRoot } from '@react-three/fiber' -import { Mesh, BoxGeometry, MeshStandardMaterial } from 'three' - -extend({ Mesh, BoxGeometry, MeshStandardMaterial }) - -createRoot(canvas).render( - - - - , -) -``` - -There's an [official babel plugin](https://github.com/pmndrs/react-three-babel) which will do this for you automatically: - -```jsx -// In: - -import { createRoot } from '@react-three/fiber' - -createRoot(canvasNode).render( - - - - , -) - -// Out: - -import { createRoot, extend } from '@react-three/fiber' -import { Mesh as _Mesh, BoxGeometry as _BoxGeometry, MeshStandardMaterial as _MeshStandardMaterial } from 'three' - -extend({ - Mesh: _Mesh, - BoxGeometry: _BoxGeometry, - MeshStandardMaterial: _MeshStandardMaterial, -}) - -createRoot(canvasNode).render( - - - - , -) -``` - -No changes are necessary for `@react-three/test-renderer` as THREE is extended automatically. - -## `createPortal` creates a state enclave - -`createPortal` allows you to write a declarative JSX scene into a pre-existing, foreign object. This has been very useful for portals, heads-up displays, view-cubes, view splitting, etc. - -But these things were very limited and lacked event support as well as support for eco-system packages (for instance putting OrbitControls into a split view). - -With this release `createPortal` creates a virtual state-model in which everything keeps functioning. Events work, you can use any 3rd party eco-system control and throw it in there. - -The event layering part of this was submitted by [@theatre_js](https://twitter.com/theatre_js) and [@AndrewPrifer](https://twitter.com/AndrewPrifer) 🎉. - -```jsx -import { createPortal } from '@react-three/fiber' - -function HeadsUpDisplay({ children }) { - const [scene] = useState(() => new THREE.Scene()) - return createPortal(children, scene, { - /* Override RootState here */ - }) -} -``` - -The event system in particular can now be layered, so that you can have portals inside portals with event priority. You can also inject objects into RootState right away, these will become the defaults inside the portalled state world and anything using `useThree` inside will receive these objects. - -Here is an example of a layered portal: - -```jsx -createPortal(children, scene, { - camera: myCustomCamera, - events: { - priority: previousPriority - 1, - compute: (event, state, previous) => { - // First we call the previous state-onion-layers compute, this is what makes it possible to nest portals - if (!previous.raycaster.camera) previous.events.compute(event, previous, previous.previousRoot.getState()) - // We run a quick check against the textured plane itself, if it isn't hit there's no need to raycast at all - const [intersection] = previous.raycaster.intersectObject(ref.current) - if (!intersection) return false - // We take that hits uv coords, set up this layers raycaster, et voilà, we have raycasting with perspective shift - const uv = intersection.uv - state.raycaster.setFromCamera(state.pointer.set(uv.x * 2 - 1, uv.y * 2 - 1), camera) - }, - }, -}) -``` - -`createPortal` can still be considered low-level and the exact API for `compute` is still experimental at this point. Expect ready-made components for portals, hud's and view-splitting to come to drei soon. - -### Examples - -

- - View splitting - - - Portals - - - Heads-up displays - -

- -## RTTR Regex Matchers - -test-renderer's `findByProps` and `findAllByProps` now accept RegExp matchers to search for variable or computed properties. - -```ts -testInstance.findByProps(props) - -// Also accepts RegExp matchers -testInstance.findByProps({ [prop]: /^match/i }) -``` - -```ts -testInstance.findAllByProps(props) - -// Also accepts RegExp matchers -testInstance.findAllByProps({ [prop]: /^matches/i }) -``` - -React-three-test-renderer was submitted by [@_josh_ellis_](https://twitter.com/_josh_ellis_) 🎉. - -## Deprecated - -```diff -useFrame((state) => { -- state.mouse -+ state.pointer -``` - -```diff -onClick={(event) => { -- event.sourceEvent -+ event.nativeEvent - -- event.spaceX -- event.spaceY -+ event.pointer -``` diff --git a/docs/tutorials/v9-migration-guide.mdx b/docs/tutorials/v9-migration-guide.mdx new file mode 100644 index 0000000000..be0e91192f --- /dev/null +++ b/docs/tutorials/v9-migration-guide.mdx @@ -0,0 +1,200 @@ +--- +title: 'v9 Migration Guide' +description: Changes and new features with v9 and react 19 +nav: 12 +--- + +This release is a compatability release for React 19, which brings further performance, stability, and type improvements. You can check out the React 19 changelog [here](https://react.dev/blog/2024/04/25/react-19). + +We would like to express our gratitude to the community for their continued support, as well as to all our contributors, including the React team at Meta and Vercel, for ensuring this upgrade went smoothly. 🎉 + +## Performance + +// TODO: JSX, React Compiler (if not explicitly clear), react-native Hermes profile +// Also, PoC for improvements with OffscreenCanvas support + +## Features + +### useLoader Accepts Loader Instance + +`useLoader` now supports re-use of external loader instances for more controlled pooling and setup. + +```jsx +import { GLTFLoader } from 'three/addons' +import { useLoader } from '@react-three/fiber' + +function Model() { + const gltf = useLoader(GLTFLoader, '/path/to/model.glb') +} + +// or, + +const loader = new GLTFLoader() +function Model() { + const gltf = useLoader(loader, '/path/to/model.glb') +} +``` + +### Factory extend Signature + +`extend` can now produce a component when a three.js class is passed to it individually instead of a catalog of named classes. This is backwards compatible and reduces TypeScript boilerplate and JSX collisions. We recommend libraries migrate to this signature so internal components don't clash with user-land declarations. + +```tsx +import { OrbitControls } from 'three/addons' +import { type ThreeElement, type ThreeElements } from '@react-three/fiber' + +declare module '@react-three/fiber' { + interface ThreeElements { + orbitControls: ThreeElement + } +} + +extend({ OrbitControls }) + + + +// or, + +const Controls = extend(OrbitControls) + +``` + +## Fixes + +### Color Management of Textures + +Automatic sRGB conversion of texture props is removed, and color textures are handled automatically for known built-in materials. This aligns with vanilla three behavior and fixes hard-to-debug errors where data textures like normals or displacement are corrupted or made non-linear (math and interpolation must be done linearly). For custom materials or shaders, make sure to annotate color textures with `texture.colorSpace = THREE.SRGBColorSpace` or `texture-colorSpace={THREE.SRGBColorSpace}` with JSX. + +For more details, see https://threejs.org/docs/#manual/en/introduction/Color-management. + +### Suspense and Side-Effects + +Correctness and handling of `Suspense` and fallback content have improved between both React and R3F. Side-effects like `attach` and constructor side-effects (e.g., controls, which may add event listeners) will no longer fire repeatedly without cleanup while a tree is suspending. This required a major rearchitecture over the last 2 years and collaboration upstream to iterate towards a robust solution. + +```jsx +import { OrbitControls } from 'three/addons' + +extend({ OrbitControls }) + +function Controls() { + const camera = useThree((state) => state.camera) + const gl = useThree((state) => state.gl) + + // Will only initialize when tree is connected to screen + return +} + + + + + +``` + +### Swapping with args and primitives + +Internal handling of swapping elements when changing the `args` or primitive `object` prop has improved for structured children like an array or iterator (yes, React supports iterators and async iterators). Previously, primitives who shared an `object` could be updated out-of-order or removed from the scene along with their children. + +```jsx +// ✅ Mounts a,b,c,d +[a, b, c, d].map((object, i) => ) + +// ❌ Updates undefined,undefined,c,d +[d, c, b, a].map((object, i) => ) +``` + +## TypeScript Changes + +### Props renamed to CanvasProps + +Canvas `Props` is now called `CanvasProps` for clarity. These were aliased in v8 for forward compatibility, but `Props` is removed with v9. + +```diff +-function Canvas(props: Props) ++function Canvas(props: CanvasProps) +``` + +### Dynamic JSX Types + +Since R3F's creation, JSX types had to be maintained in accordance with additions to three core API. Although missing or future types could be ignored or resilient for forward and backwards compatibility, this was a major maintenance burden for us and those extending three. Furthermore, libraries which wrap or bind to the known catalog of elements (e.g. React Spring ``) had no way of knowing which elements belonged to a renderer. + +Since v8, we've added a catalog of known elements to a `ThreeElements` interface, and with v9 automatically map three API to JSX types. As types are now dynamically mapped, hardcoded exports like `MeshProps` have been removed, and can be accessed as `ThreeElements['mesh']`. Helper types like `Color` or `Vector3` remain to reflect the JSX `MathType` API for shorthand expression. + +```diff +-import { MeshProps } from '@react-three/fiber' +-type Props = MeshProps + ++import { ThreeElements } from '@react-three/fiber' ++type Props = ThreeElements['mesh'] +``` + +### Node Helpers + +Specialized `Node` type helpers for extending JSX (`Node`, `Object3DNode`, `BufferGeometryNode`, `MaterialNode`, `LightNode`) are removed and combined into 'ThreeElement', which accepts a single type representing the extended element instance. + +```tsx +import { type ThreeElement } from '@react-three/fiber' + +declare module '@react-three/fiber' { + interface ThreeElements { + customElement: ThreeElement + } +} +``` + +### ThreeElements + +`ThreeElements` was added as an interface since v8.1.0 and is the current way of declaring or accessing JSX within R3F since React's depreciation of `global` JSX (see https://react.dev/blog/2024/04/25/react-19-upgrade-guide#the-jsx-namespace-in-typescript). All JSX types belonging to R3F are accessible from `ThreeElements`. + +```diff +-import { type Node } from '@react-three/fiber' +-declare global { +- namespace JSX { +- interface IntrinsicElements { +- customElement: Node +- } +- } +-} + +-import { type Node } from '@react-three/fiber' +-declare module '@react-three/fiber' { +- interface ThreeElements { +- customElement: Node +- } +-} + ++import { type ThreeElement } from '@react-three/fiber' ++declare module '@react-three/fiber' { ++ interface ThreeElements { ++ customElement: ThreeElement ++ } ++} +``` + +## Testing + +### StrictMode + +`StrictMode` is now correctly inherited from a parent renderer like react-dom. Previously, `` mounted in another root such as react-dom would not affect the R3F canvas, so it had to be redeclared within the canvas as well. + +```diff + + +- +- // ... +- ++ // ... + + +``` + +### Act + +`act` is now exported from React itself and can be used for all renderers. It will return the contents of a passed async callback like before and recursively flush async effects to synchronously test React output. + +```tsx +import { act } from 'react' +import { createRoot } from '@react-three/fiber' + +const store = await act(async () => createRoot(canvas).render()) +console.log(store.getState()) +``` diff --git a/example/package.json b/example/package.json index 611a584283..a5a4e0152b 100644 --- a/example/package.json +++ b/example/package.json @@ -9,25 +9,27 @@ "dependencies": { "@react-spring/core": "^9.7.3", "@react-spring/three": "^9.7.3", - "@react-three/drei": "^9.93.0", + "@react-three/drei": "^9.105.5", "@use-gesture/react": "latest", - "@vitejs/plugin-react": "^4.2.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-merge-refs": "^2.1.1", + "react": "19.0.0-rc.0", + "react-dom": "19.0.0-rc.0", "react-use-refs": "^1.0.1", - "styled-components": "^6.1.8", "three": "^0.160.0", - "three-stdlib": "^2.29.1", + "three-stdlib": "^2.29.9", "use-error-boundary": "^2.0.6", "wouter": "^2.12.1", "zustand": "^4.4.7" }, "devDependencies": { - "@types/react": "^18.2.47", - "@types/styled-components": "^5.1.34", + "@types/react": "npm:types-react@beta", + "@types/react-dom": "npm:types-react-dom@beta", "@vitejs/plugin-react-refresh": "^1.3.6", + "@vitejs/plugin-react": "^4.2.1", "typescript": "^5.3.3", - "vite": "^5.0.11" + "vite": "^5.2.10" + }, + "overrides": { + "@types/react": "npm:types-react@beta", + "@types/react-dom": "npm:types-react-dom@beta" } } diff --git a/example/public/apple.gltf b/example/public/apple.gltf index 05ca5e61a9..37a839829c 100644 --- a/example/public/apple.gltf +++ b/example/public/apple.gltf @@ -1 +1,257 @@ -{"extensionsUsed":["KHR_materials_unlit","KHR_draco_mesh_compression"],"asset":{"generator":"UniGLTF-1.27","version":"2.0"},"buffers":[{"name":"buffer","byteLength":1696,"uri":"data:application/octet-stream;base64,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"}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":733},{"buffer":0,"byteOffset":736,"byteLength":249},{"buffer":0,"byteOffset":988,"byteLength":303},{"buffer":0,"byteOffset":1292,"byteLength":216},{"buffer":0,"byteOffset":1508,"byteLength":188}],"accessors":[{"type":"SCALAR","componentType":5125,"count":270,"min":[0],"max":[135]},{"type":"VEC3","componentType":5126,"count":136,"max":[0.09829112117938082,0.15707400633348856,0.09824317429100063],"min":[-0.00009589377676037153,-0.00009589377676037153,-0.09824317429100064]},{"type":"VEC3","componentType":5126,"count":136,"min":[-1.007843137254902,-1.007843137254902,-0.9083239440824471],"max":[0.9058823529411764,1.007843137254902,0.9112838990548078]},{"type":"VEC2","componentType":5126,"count":136,"min":[-3.872480570978666,-5.190146624750639],"max":[3.868810683984095,3.4346615669198286]},{"type":"SCALAR","componentType":5125,"count":30,"min":[0],"max":[19]},{"type":"VEC3","componentType":5126,"count":20,"max":[0.00963633247975553,0.19077478181780055,0.009620332180030559],"min":[-0.000021366590864202948,0.1469946371370487,-0.009630966188616297]},{"type":"VEC3","componentType":5126,"count":20,"min":[-1.0078249400737238,-0.10404930024170408,-1.0031846588733149],"max":[1.003184658873315,1.007092190227088,1.0000000000000002]},{"type":"VEC2","componentType":5126,"count":20,"min":[-0.38604318408089766,-6.51924526003915],"max":[0.3852044690039851,1.386043184080898]},{"type":"SCALAR","componentType":5125,"count":78,"min":[0],"max":[23]},{"type":"VEC3","componentType":5126,"count":24,"max":[0.00007905138808456816,0.1404482741236439,0.08098814709264007],"min":[-0.00007905138808456816,0.016574748995125614,-0.08098814709264009]},{"type":"VEC3","componentType":5126,"count":24,"min":[-1.003921568627451,-0.00392156862745098,-0.00392156862745098],"max":[-0.996078431372549,0.00392156862745098,0.00392156862745098]},{"type":"VEC2","componentType":5126,"count":24,"min":[-3.191625186308621,-4.532298156126736],"max":[3.191625186308621,0.35010993375806176]},{"type":"SCALAR","componentType":5125,"count":12,"min":[0],"max":[7]},{"type":"VEC3","componentType":5126,"count":8,"max":[0.00002426540176054298,0.09019649050616613,0.024859904103676285],"min":[-0.00002426540176054298,0.06954663360794405,-0.024859904103676285]},{"type":"VEC3","componentType":5126,"count":8,"min":[-1.003921568627451,-0.00392156862745098,-0.00392156862745098],"max":[-0.996078431372549,0.00392156862745098,0.00392156862745098]},{"type":"VEC2","componentType":5126,"count":8,"min":[-0.9796926527778425,-2.552443459586314],"max":[0.9796926527778425,-1.7361922152231166]},{"type":"SCALAR","componentType":5125,"count":6,"min":[0],"max":[5]},{"type":"VEC3","componentType":5126,"count":6,"max":[0.005384004925540091,0.147021261545223,0.00538663383419514],"min":[-0.000005257817310097745,0.1470107459106028,-0.00538663383419514]},{"type":"VEC3","componentType":5126,"count":6,"min":[-0.00392156862745098,0.996078431372549,-0.00392156862745098],"max":[0.00392156862745098,1.003921568627451,0.00392156862745098]},{"type":"VEC2","componentType":5126,"count":6,"min":[-0.38001393852345755,-6.511660094834492],"max":[0.21416659508982017,-4.786348347090556]}],"materials":[{"name":"red","pbrMetallicRoughness":{"baseColorFactor":[0.9098039,0.333333343,0.3254902,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"brown","pbrMetallicRoughness":{"baseColorFactor":[0.827451,0.5647059,0.403921574,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"brownLight","pbrMetallicRoughness":{"baseColorFactor":[0.9764706,0.772549033,0.549019635,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"brownDark","pbrMetallicRoughness":{"baseColorFactor":[0.6392157,0.3882353,0.2784314,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"_defaultMat","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]}],"meshes":[{"name":"Mesh appleHalf","primitives":[{"mode":4,"indices":0,"attributes":{"POSITION":1,"NORMAL":2,"TEXCOORD_0":3},"material":0,"extensions":{"KHR_draco_mesh_compression":{"bufferView":0,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":4,"attributes":{"POSITION":5,"NORMAL":6,"TEXCOORD_0":7},"material":1,"extensions":{"KHR_draco_mesh_compression":{"bufferView":1,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":8,"attributes":{"POSITION":9,"NORMAL":10,"TEXCOORD_0":11},"material":2,"extensions":{"KHR_draco_mesh_compression":{"bufferView":2,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":12,"attributes":{"POSITION":13,"NORMAL":14,"TEXCOORD_0":15},"material":3,"extensions":{"KHR_draco_mesh_compression":{"bufferView":3,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":16,"attributes":{"POSITION":17,"NORMAL":18,"TEXCOORD_0":19},"material":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]}],"nodes":[{"children":[1],"name":"tmpParent","translation":[0,0,0],"rotation":[0,0,0,1],"scale":[1,1,1]},{"name":"appleHalf","translation":[0,0,0],"rotation":[0,0,0,1],"scale":[1,1,1],"mesh":0}],"scenes":[{"nodes":[1]}],"scene":0,"extensionsRequired":["KHR_draco_mesh_compression"]} +{ + "extensionsUsed": ["KHR_materials_unlit", "KHR_draco_mesh_compression"], + "asset": { "generator": "UniGLTF-1.27", "version": "2.0" }, + "buffers": [ + { + "name": "buffer", + "byteLength": 1696, + "uri": "data:application/octet-stream;base64,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" + } + ], + "bufferViews": [ + { "buffer": 0, "byteOffset": 0, "byteLength": 733 }, + { "buffer": 0, "byteOffset": 736, "byteLength": 249 }, + { "buffer": 0, "byteOffset": 988, "byteLength": 303 }, + { "buffer": 0, "byteOffset": 1292, "byteLength": 216 }, + { "buffer": 0, "byteOffset": 1508, "byteLength": 188 } + ], + "accessors": [ + { "type": "SCALAR", "componentType": 5125, "count": 270, "min": [0], "max": [135] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 136, + "max": [0.09829112117938082, 0.15707400633348856, 0.09824317429100063], + "min": [-0.00009589377676037153, -0.00009589377676037153, -0.09824317429100064] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 136, + "min": [-1.007843137254902, -1.007843137254902, -0.9083239440824471], + "max": [0.9058823529411764, 1.007843137254902, 0.9112838990548078] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 136, + "min": [-3.872480570978666, -5.190146624750639], + "max": [3.868810683984095, 3.4346615669198286] + }, + { "type": "SCALAR", "componentType": 5125, "count": 30, "min": [0], "max": [19] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 20, + "max": [0.00963633247975553, 0.19077478181780055, 0.009620332180030559], + "min": [-0.000021366590864202948, 0.1469946371370487, -0.009630966188616297] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 20, + "min": [-1.0078249400737238, -0.10404930024170408, -1.0031846588733149], + "max": [1.003184658873315, 1.007092190227088, 1.0000000000000002] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 20, + "min": [-0.38604318408089766, -6.51924526003915], + "max": [0.3852044690039851, 1.386043184080898] + }, + { "type": "SCALAR", "componentType": 5125, "count": 78, "min": [0], "max": [23] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 24, + "max": [0.00007905138808456816, 0.1404482741236439, 0.08098814709264007], + "min": [-0.00007905138808456816, 0.016574748995125614, -0.08098814709264009] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 24, + "min": [-1.003921568627451, -0.00392156862745098, -0.00392156862745098], + "max": [-0.996078431372549, 0.00392156862745098, 0.00392156862745098] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 24, + "min": [-3.191625186308621, -4.532298156126736], + "max": [3.191625186308621, 0.35010993375806176] + }, + { "type": "SCALAR", "componentType": 5125, "count": 12, "min": [0], "max": [7] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 8, + "max": [0.00002426540176054298, 0.09019649050616613, 0.024859904103676285], + "min": [-0.00002426540176054298, 0.06954663360794405, -0.024859904103676285] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 8, + "min": [-1.003921568627451, -0.00392156862745098, -0.00392156862745098], + "max": [-0.996078431372549, 0.00392156862745098, 0.00392156862745098] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 8, + "min": [-0.9796926527778425, -2.552443459586314], + "max": [0.9796926527778425, -1.7361922152231166] + }, + { "type": "SCALAR", "componentType": 5125, "count": 6, "min": [0], "max": [5] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 6, + "max": [0.005384004925540091, 0.147021261545223, 0.00538663383419514], + "min": [-0.000005257817310097745, 0.1470107459106028, -0.00538663383419514] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 6, + "min": [-0.00392156862745098, 0.996078431372549, -0.00392156862745098], + "max": [0.00392156862745098, 1.003921568627451, 0.00392156862745098] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 6, + "min": [-0.38001393852345755, -6.511660094834492], + "max": [0.21416659508982017, -4.786348347090556] + } + ], + "materials": [ + { + "name": "red", + "pbrMetallicRoughness": { + "baseColorFactor": [0.9098039, 0.333333343, 0.3254902, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "brown", + "pbrMetallicRoughness": { + "baseColorFactor": [0.827451, 0.5647059, 0.403921574, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "brownLight", + "pbrMetallicRoughness": { + "baseColorFactor": [0.9764706, 0.772549033, 0.549019635, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "brownDark", + "pbrMetallicRoughness": { + "baseColorFactor": [0.6392157, 0.3882353, 0.2784314, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "_defaultMat", + "pbrMetallicRoughness": { "baseColorFactor": [1, 1, 1, 1], "metallicFactor": 1, "roughnessFactor": 1 }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + } + ], + "meshes": [ + { + "name": "Mesh appleHalf", + "primitives": [ + { + "mode": 4, + "indices": 0, + "attributes": { "POSITION": 1, "NORMAL": 2, "TEXCOORD_0": 3 }, + "material": 0, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 0, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 4, + "attributes": { "POSITION": 5, "NORMAL": 6, "TEXCOORD_0": 7 }, + "material": 1, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 1, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 8, + "attributes": { "POSITION": 9, "NORMAL": 10, "TEXCOORD_0": 11 }, + "material": 2, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 2, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 12, + "attributes": { "POSITION": 13, "NORMAL": 14, "TEXCOORD_0": 15 }, + "material": 3, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 3, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 16, + "attributes": { "POSITION": 17, "NORMAL": 18, "TEXCOORD_0": 19 }, + "material": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 4, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + } + ], + "nodes": [ + { "children": [1], "name": "tmpParent", "translation": [0, 0, 0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1] }, + { "name": "appleHalf", "translation": [0, 0, 0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1], "mesh": 0 } + ], + "scenes": [{ "nodes": [1] }], + "scene": 0, + "extensionsRequired": ["KHR_draco_mesh_compression"] +} diff --git a/example/public/bottle.gltf b/example/public/bottle.gltf index 0436ed4f43..aa118cb3e3 100644 --- a/example/public/bottle.gltf +++ b/example/public/bottle.gltf @@ -1 +1,123 @@ -{"extensionsUsed":["KHR_materials_unlit","KHR_draco_mesh_compression"],"asset":{"generator":"UniGLTF-1.27","version":"2.0"},"buffers":[{"name":"buffer","byteLength":1004,"uri":"data:application/octet-stream;base64,RFJBQ08CAgEBAAAAJDQCMwMCGQ8ZCwMQ79auW9NWVfEva0vXddGiAIACAHFkC4gpS5BuMmCDL1WAZAuIKUuQbjJggy9VgAP/AAEAAQABAQABAAkDAAACAQEJAwABAwEDCQIAAgIEAQEADAPJARPlCFUVHQeRE1UFDCNY15ilc8hSzX+8Xw48sQv+QBEc5E7EKhDg+xP/AYACUHwHAPgEAPgHADgKABwFAb5B8R8AngAOQQEoqgCQFRQAQBAAHFIAAPALsHPUBgQCYCUAELwBwMUCAIAbAAAAgDNtALBYAF1+ucTMJ4DFJwBGEgEAABcBNBEFAKgBwG0AAA63BNHgA4EaWQWKsQfEQgarA7/KggRAA0CIgAAAAAD/BwAA5dK4vQAAAADnD6C9uDkFPwsGAwEBBP8B4Sy5Cf///+9pCSHsJJGNFX1HBAI97/XOnNfjTSqhdGtLEH5V8IWKRsmHS4D/AAAAfwAAAP8CGEgIBQEBAAsDKQi9GUEBC+EBJQM5F6Ac4zcnvBmY1hE3kfWoH7ZVdyCtMA/1+1Uf6eVPgI6JnaMhYg6H8Bqi8K6h6DuH8BoiKQHAa4jCu4aigP+j6Ugk6pKmi9QCSJoOUQsgabpILYCk6SI8mo6oGXjhOhIYrl/ArpjyukrsIqSzxy6qdSXxYSOKe5EduyBeiJgSOyIRQErsiEQAKbGDDOB67CJK6nb0IiIUQEcvqnj0ggA0AAAAAQKCQwAAAAD/AwAAXsAvwPpQmcGLV7RBCgBEUkFDTwICAQEAAAAeKAIoAQEnCwEMX7tu7fK1bakWVS0t/wEiiAnoNmQvEM0Sa4CICeg2ZC8QzRJrgAP/AAEAAQABAQABAAkDAAACAQEJAwABAwEDCQIAAgIEAQEADAOJCA/NDEUEAzUTaQbNDAuvfqTVRnKEpXCJbjoGgLSQIGoADCfUlBoBPisAnj0CAJ8B8CwSQg0A4oQaACTQawXgAwkApGPUlgEAADxtAdgJ4DGAtQAA3AKwE7gA8LT1mCfwANgJ3AHAswPqHwA6wP4BAAqzA5uFTBxlBg5hgZ55gAAAAAAAAP8HAAAA1aq9mwUaPuPxk72E69E+CwYDAQEEAkE4wQcL0OIw5NWXSnUq+5b/AAAAfwAAAP8C3UQIBQEBAAsDhQ9VFekCA/gD+K0K8QG1CRbt1EYh/80XV9wKBm+OKvgrGjszv/+VFP3JQJIgRUpOlCQ6kZIUJYlyEABFSaIwUZLoREpSlCTKENIA2oD44ICKAmDin6IAoKIAkAioKAAm/ikKACoKvvkVEIguxiIrJgAAAAECf0IAAAAA/wMAAF0t0r/6gajBJXy6QQo="}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":571},{"buffer":0,"byteOffset":572,"byteLength":432}],"accessors":[{"type":"SCALAR","componentType":5125,"count":156,"min":[0],"max":[101]},{"type":"VEC3","componentType":5126,"count":102,"max":[0.09051262757649467,0.5206661997740596,0.07845129908718129],"min":[-0.09050023093870575,-0.00025423154285842753,-0.07840956285646851]},{"type":"VEC3","componentType":5126,"count":102,"min":[-0.8701851585332085,-1.0078100779477288,-1.0035950162831475],"max":[0.8714622238103082,0.38238379674799305,1.0035950162831475]},{"type":"VEC2","componentType":5126,"count":102,"min":[-2.768152080789456,-19.186575256601223],"max":[2.762863699408687,3.400242172494778]},{"type":"SCALAR","componentType":5125,"count":120,"min":[0],"max":[65]},{"type":"VEC3","componentType":5126,"count":66,"max":[0.0836303700134704,0.5606122827917177,0.07237291420137934],"min":[-0.0836143708616335,0.15021171506346873,-0.07243899915514775]},{"type":"VEC3","componentType":5126,"count":66,"min":[-0.8738685851003609,-1.007843137254902,-1.007843137254902],"max":[0.8751510227427763,1.007843137254902,1.007843137254902]},{"type":"VEC2","componentType":5126,"count":66,"min":[-1.6647959047981256,-21.086251645726776],"max":[1.6620370837134235,2.2699388558097837]}],"materials":[{"name":"brownDark","pbrMetallicRoughness":{"baseColorFactor":[0.6392157,0.3882353,0.2784314,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"red","pbrMetallicRoughness":{"baseColorFactor":[0.9098039,0.333333343,0.3254902,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]}],"meshes":[{"name":"Mesh sodaBottle","primitives":[{"mode":4,"indices":0,"attributes":{"POSITION":1,"NORMAL":2,"TEXCOORD_0":3},"material":0,"extensions":{"KHR_draco_mesh_compression":{"bufferView":0,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":4,"attributes":{"POSITION":5,"NORMAL":6,"TEXCOORD_0":7},"material":1,"extensions":{"KHR_draco_mesh_compression":{"bufferView":1,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]}],"nodes":[{"children":[1],"name":"tmpParent","translation":[0,0,0],"rotation":[0,0,0,1],"scale":[1,1,1]},{"name":"sodaBottle","translation":[0,0,0],"rotation":[0,0,0,1],"scale":[1,1,1],"mesh":0}],"scenes":[{"nodes":[1]}],"scene":0,"extensionsRequired":["KHR_draco_mesh_compression"]} +{ + "extensionsUsed": ["KHR_materials_unlit", "KHR_draco_mesh_compression"], + "asset": { "generator": "UniGLTF-1.27", "version": "2.0" }, + "buffers": [ + { + "name": "buffer", + "byteLength": 1004, + "uri": "data:application/octet-stream;base64,RFJBQ08CAgEBAAAAJDQCMwMCGQ8ZCwMQ79auW9NWVfEva0vXddGiAIACAHFkC4gpS5BuMmCDL1WAZAuIKUuQbjJggy9VgAP/AAEAAQABAQABAAkDAAACAQEJAwABAwEDCQIAAgIEAQEADAPJARPlCFUVHQeRE1UFDCNY15ilc8hSzX+8Xw48sQv+QBEc5E7EKhDg+xP/AYACUHwHAPgEAPgHADgKABwFAb5B8R8AngAOQQEoqgCQFRQAQBAAHFIAAPALsHPUBgQCYCUAELwBwMUCAIAbAAAAgDNtALBYAF1+ucTMJ4DFJwBGEgEAABcBNBEFAKgBwG0AAA63BNHgA4EaWQWKsQfEQgarA7/KggRAA0CIgAAAAAD/BwAA5dK4vQAAAADnD6C9uDkFPwsGAwEBBP8B4Sy5Cf///+9pCSHsJJGNFX1HBAI97/XOnNfjTSqhdGtLEH5V8IWKRsmHS4D/AAAAfwAAAP8CGEgIBQEBAAsDKQi9GUEBC+EBJQM5F6Ac4zcnvBmY1hE3kfWoH7ZVdyCtMA/1+1Uf6eVPgI6JnaMhYg6H8Bqi8K6h6DuH8BoiKQHAa4jCu4aigP+j6Ugk6pKmi9QCSJoOUQsgabpILYCk6SI8mo6oGXjhOhIYrl/ArpjyukrsIqSzxy6qdSXxYSOKe5EduyBeiJgSOyIRQErsiEQAKbGDDOB67CJK6nb0IiIUQEcvqnj0ggA0AAAAAQKCQwAAAAD/AwAAXsAvwPpQmcGLV7RBCgBEUkFDTwICAQEAAAAeKAIoAQEnCwEMX7tu7fK1bakWVS0t/wEiiAnoNmQvEM0Sa4CICeg2ZC8QzRJrgAP/AAEAAQABAQABAAkDAAACAQEJAwABAwEDCQIAAgIEAQEADAOJCA/NDEUEAzUTaQbNDAuvfqTVRnKEpXCJbjoGgLSQIGoADCfUlBoBPisAnj0CAJ8B8CwSQg0A4oQaACTQawXgAwkApGPUlgEAADxtAdgJ4DGAtQAA3AKwE7gA8LT1mCfwANgJ3AHAswPqHwA6wP4BAAqzA5uFTBxlBg5hgZ55gAAAAAAAAP8HAAAA1aq9mwUaPuPxk72E69E+CwYDAQEEAkE4wQcL0OIw5NWXSnUq+5b/AAAAfwAAAP8C3UQIBQEBAAsDhQ9VFekCA/gD+K0K8QG1CRbt1EYh/80XV9wKBm+OKvgrGjszv/+VFP3JQJIgRUpOlCQ6kZIUJYlyEABFSaIwUZLoREpSlCTKENIA2oD44ICKAmDin6IAoKIAkAioKAAm/ikKACoKvvkVEIguxiIrJgAAAAECf0IAAAAA/wMAAF0t0r/6gajBJXy6QQo=" + } + ], + "bufferViews": [ + { "buffer": 0, "byteOffset": 0, "byteLength": 571 }, + { "buffer": 0, "byteOffset": 572, "byteLength": 432 } + ], + "accessors": [ + { "type": "SCALAR", "componentType": 5125, "count": 156, "min": [0], "max": [101] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 102, + "max": [0.09051262757649467, 0.5206661997740596, 0.07845129908718129], + "min": [-0.09050023093870575, -0.00025423154285842753, -0.07840956285646851] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 102, + "min": [-0.8701851585332085, -1.0078100779477288, -1.0035950162831475], + "max": [0.8714622238103082, 0.38238379674799305, 1.0035950162831475] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 102, + "min": [-2.768152080789456, -19.186575256601223], + "max": [2.762863699408687, 3.400242172494778] + }, + { "type": "SCALAR", "componentType": 5125, "count": 120, "min": [0], "max": [65] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 66, + "max": [0.0836303700134704, 0.5606122827917177, 0.07237291420137934], + "min": [-0.0836143708616335, 0.15021171506346873, -0.07243899915514775] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 66, + "min": [-0.8738685851003609, -1.007843137254902, -1.007843137254902], + "max": [0.8751510227427763, 1.007843137254902, 1.007843137254902] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 66, + "min": [-1.6647959047981256, -21.086251645726776], + "max": [1.6620370837134235, 2.2699388558097837] + } + ], + "materials": [ + { + "name": "brownDark", + "pbrMetallicRoughness": { + "baseColorFactor": [0.6392157, 0.3882353, 0.2784314, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "red", + "pbrMetallicRoughness": { + "baseColorFactor": [0.9098039, 0.333333343, 0.3254902, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + } + ], + "meshes": [ + { + "name": "Mesh sodaBottle", + "primitives": [ + { + "mode": 4, + "indices": 0, + "attributes": { "POSITION": 1, "NORMAL": 2, "TEXCOORD_0": 3 }, + "material": 0, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 0, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 4, + "attributes": { "POSITION": 5, "NORMAL": 6, "TEXCOORD_0": 7 }, + "material": 1, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 1, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + } + ], + "nodes": [ + { "children": [1], "name": "tmpParent", "translation": [0, 0, 0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1] }, + { "name": "sodaBottle", "translation": [0, 0, 0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1], "mesh": 0 } + ], + "scenes": [{ "nodes": [1] }], + "scene": 0, + "extensionsRequired": ["KHR_draco_mesh_compression"] +} diff --git a/example/public/farm.gltf b/example/public/farm.gltf index 07b6c49e12..4ec221d59b 100644 --- a/example/public/farm.gltf +++ b/example/public/farm.gltf @@ -1 +1,352 @@ -{"asset":{"generator":"Khronos glTF Blender I/O v1.5.17","version":"2.0"},"scene":0,"scenes":[{"name":"Scene","nodes":[0,1,2,3,4,5,6,7,8]}],"nodes":[{"mesh":0,"name":"Circle","scale":[3.7607693672180176,3.7607693672180176,3.7607693672180176],"translation":[0.47165822982788086,0,-0.6066201329231262],"rotation":[0,0,0,1]},{"mesh":1,"name":"WindMill.001","scale":[0.4821113348007202,0.4821113348007202,0.4821113348007202],"translation":[1.263749599456787,1.900821566581726,0.1711728870868683],"rotation":[0,0,0,1]},{"mesh":2,"name":"Fence_White.013","rotation":[0,0.7071068286895752,0,0.7071068286895752],"scale":[0.09888678789138794,0.09888678789138794,0.09888678789138794],"translation":[1.3952089548110962,-0.005745698232203722,-2.4713940620422363]},{"mesh":3,"name":"Wooden Box","scale":[0.4007795751094818,0.4007795751094818,0.4007795751094818],"translation":[0.19056254625320435,0.05061200261116028,0.21082305908203125],"rotation":[0,0,0,1]},{"mesh":4,"name":"Plane","scale":[0.0304397102445364,0.0304397102445364,0.0304397102445364],"translation":[-0.16933752596378326,1.0484503507614136,0.31743738055229187],"rotation":[0,0,0,1]},{"mesh":5,"name":"Well","scale":[0.1421276479959488,0.12818977236747742,0.1421276479959488],"translation":[2.077780246734619,0.22757045924663544,-0.05814981460571289],"rotation":[0,0,0,1]},{"mesh":6,"name":"Trees","scale":[62.94956588745117,62.94956588745117,62.94956588745117],"translation":[0.37176066637039185,0.14777842164039612,-1.3625603914260864],"rotation":[0,0,0,1]},{"mesh":7,"name":"Barn_01","scale":[1.1511201858520508,1.1511201858520508,1.1511201858520508],"translation":[-0.17597436904907227,0.4125245213508606,-0.17850732803344727],"rotation":[0,0,0,1]},{"mesh":8,"name":"WindMill","scale":[0.4821113348007202,0.4821113348007202,0.4821113348007202],"translation":[1.2636184692382812,1.564571499824524,0.07810831815004349],"rotation":[0,0,0,1]}],"materials":[{"doubleSided":true,"name":"Farm_Pack_001","pbrMetallicRoughness":{"baseColorTexture":{"index":0,"texCoord":0},"metallicFactor":0,"roughnessFactor":0.9863636493682861,"baseColorFactor":[1,1,1,1]},"emissiveFactor":[0,0,0],"alphaMode":"OPAQUE"},{"name":"default","emissiveFactor":[0,0,0],"alphaMode":"OPAQUE","doubleSided":false}],"meshes":[{"name":"Circle","primitives":[{"attributes":{"POSITION":1,"NORMAL":2},"indices":0,"mode":4,"material":1,"extensions":{"KHR_draco_mesh_compression":{"bufferView":0,"attributes":{"POSITION":0,"NORMAL":1}}}}]},{"name":"Cube.029","primitives":[{"attributes":{"POSITION":4,"NORMAL":5,"TEXCOORD_0":6},"indices":3,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":1,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Cube.027","primitives":[{"attributes":{"POSITION":8,"NORMAL":9,"TEXCOORD_0":10},"indices":7,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":2,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Cube.005","primitives":[{"attributes":{"POSITION":12,"NORMAL":13,"TEXCOORD_0":14},"indices":11,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":3,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Plane.003","primitives":[{"attributes":{"POSITION":16,"NORMAL":17,"TEXCOORD_0":18},"indices":15,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Cylinder.001","primitives":[{"attributes":{"POSITION":20,"NORMAL":21,"TEXCOORD_0":22},"indices":19,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":5,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Plane.002","primitives":[{"attributes":{"POSITION":24,"NORMAL":25,"TEXCOORD_0":26},"indices":23,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":6,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Cube.002","primitives":[{"attributes":{"POSITION":28,"NORMAL":29,"TEXCOORD_0":30},"indices":27,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":7,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Cube","primitives":[{"attributes":{"POSITION":32,"NORMAL":33,"TEXCOORD_0":34},"indices":31,"material":0,"mode":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":8,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]}],"textures":[{"sampler":0,"source":0}],"images":[{"bufferView":9,"mimeType":"image/jpeg","name":"Diffuse_palette_noise"}],"accessors":[{"componentType":5123,"count":90,"type":"SCALAR"},{"componentType":5126,"count":32,"max":[0.8007816435886583,0.0007816316677292907,0.8007816435886583],"min":[-0.8007816435886582,-0.0007816316677292907,-0.8007816435886582],"type":"VEC3"},{"componentType":5126,"count":32,"type":"VEC3"},{"componentType":5123,"count":2076,"type":"SCALAR"},{"componentType":5126,"count":1322,"max":[0.8385503353814003,0.8385502161721108,0.05095415724360425],"min":[-0.8385503353814002,-0.8385504545906898,-0.1684030803183433],"type":"VEC3"},{"componentType":5126,"count":1322,"type":"VEC3"},{"componentType":5126,"count":1322,"type":"VEC2"},{"componentType":5123,"count":3060,"type":"SCALAR"},{"componentType":5126,"count":2000,"max":[0.10322994759563642,1.6502795766030693,2.2154936462014696],"min":[-39.21565765908245,-0.019190028951344522,-23.70925850441937],"type":"VEC3"},{"componentType":5126,"count":2000,"type":"VEC3"},{"componentType":5126,"count":2000,"type":"VEC2"},{"componentType":5123,"count":2292,"type":"SCALAR"},{"componentType":5126,"count":1694,"max":[0.18579399166423982,0.1461265524262385,0.14491311928442063],"min":[-0.14491329809835496,-0.1464015217702681,-0.9569067778270537],"type":"VEC3"},{"componentType":5126,"count":1694,"type":"VEC3"},{"componentType":5126,"count":1694,"type":"VEC2"},{"componentType":5123,"count":822,"type":"SCALAR"},{"componentType":5126,"count":624,"max":[4.812053583748002,0.0031038604833231176,0.24871478110741096],"min":[-5.050960444099564,-8.329193495399613,-0.3048462795087286],"type":"VEC3"},{"componentType":5126,"count":624,"type":"VEC3"},{"componentType":5126,"count":624,"type":"VEC2"},{"componentType":5123,"count":2370,"type":"SCALAR"},{"componentType":5126,"count":1493,"max":[1.5453098778265772,1.1136803437164486,0.867781436321033],"min":[-1.307572226612872,-1.810559492199725,-1.2458345700195492],"type":"VEC3"},{"componentType":5126,"count":1493,"type":"VEC3"},{"componentType":5126,"count":1493,"type":"VEC2"},{"componentType":5123,"count":768,"type":"SCALAR"},{"componentType":5126,"count":526,"max":[0.016896564860131663,0.017585191424480177,0.004240338889400612],"min":[-0.013106122959639949,-0.0036612214727812227,-0.01328685355582468],"type":"VEC3"},{"componentType":5126,"count":526,"type":"VEC3"},{"componentType":5126,"count":526,"type":"VEC2"},{"componentType":5123,"count":2226,"type":"SCALAR"},{"componentType":5126,"count":1338,"max":[0.32661417775988055,0.3417208139262784,0.47399327198237284],"min":[-0.3267274502870451,-0.36584189573496684,-0.44418025056094035],"type":"VEC3"},{"componentType":5126,"count":1338,"type":"VEC3"},{"componentType":5126,"count":1338,"type":"VEC2"},{"componentType":5123,"count":984,"type":"SCALAR"},{"componentType":5126,"count":638,"max":[0.7299346994293803,0.958772202963706,0.4743475615832653],"min":[-0.7322520222614961,-3.2909023966740327,-1.4544944968174653],"type":"VEC3"},{"componentType":5126,"count":638,"type":"VEC3"},{"componentType":5126,"count":638,"type":"VEC2"}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":251},{"buffer":0,"byteOffset":252,"byteLength":3939},{"buffer":0,"byteOffset":4192,"byteLength":2986},{"buffer":0,"byteOffset":7180,"byteLength":2912},{"buffer":0,"byteOffset":10092,"byteLength":1908},{"buffer":0,"byteOffset":12000,"byteLength":4237},{"buffer":0,"byteOffset":16240,"byteLength":1432},{"buffer":0,"byteOffset":17672,"byteLength":2925},{"buffer":0,"byteOffset":20600,"byteLength":1771},{"buffer":0,"byteOffset":22372,"byteLength":85348}],"samplers":[{"magFilter":9729,"minFilter":9987,"wrapS":10497,"wrapT":10497}],"buffers":[{"name":"buffer","byteLength":107720,"uri":"data:application/octet-stream;base64,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dG9tbG9uZwAAAAAAAAAMY3JvcFJlY3RMZWZ0bG9uZwAAAAAAAAANY3JvcFJlY3RSaWdodGxvbmcAAAAAAAAAC2Nyb3BSZWN0VG9wbG9uZwAAAAAAOEJJTQPtAAAAAAAQAEgAAAABAAEASAAAAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAThCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAA4QklNBAAAAAAAAAIAAjhCSU0EAgAAAAAABgAAAAAAADhCSU0EMAAAAAAAAwEBAQA4QklNBC0AAAAAAAYAAQAAAAU4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADcQAAAAYAAAAAAAAAAAAAAgAAAAIAAAAAHgBEAGkAZgBmAHUAcwBlAF8AcABhAGwAZQB0AHQAZQBfAG4AbwBpAHMAZQBfAGcAcgBhAGQAaQBlAG4AdAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAgAAAAAAUmdodGxvbmcAAAIAAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAA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IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA1LTE5VDE5OjMxOjQzKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0xNFQyMzoyNjowNiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0xNFQyMzoyNjowNiswMTowMCIgeG1wTU06RG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkY2RDcxMTkyMTcwRTgxMUFBRDVGQjRFNTZDOUNFOTQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgcGhvdG9zaG9wOkxlZ2FjeUlQVENEaWdlc3Q9IkQzQzk5RjRCM0Q4REVBMjg4NTQ4MzU2QTg0MTU5QzJCIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MEJDRjQ1REM2QjVDRTgxMUI3Q0RFOUIwMEI2NjFFNTAiIHN0RXZ0OndoZW49IjIwMTgtMDUtMjBUMjE6MjQ6NTYrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNzc3RjMxNDExNkZFODExQUNENjk5OEE5QzcwNzk5NSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xM1QxNDo1NjoyNSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9qcGVnIHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Mzg3N0YzMTQxMTZGRTgxMUFDRDY5OThBOUM3MDc5OTUiIHN0RXZ0OndoZW49IjIwMTgtMDYtMTNUMTQ6NTY6MjUrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRTZENzExOTIxNzBFODExQUFENUZCNEU1NkM5Q0U5NCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xNFQyMzoyNjowNiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvanBlZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkY2RDcxMTkyMTcwRTgxMUFBRDVGQjRFNTZDOUNFOTQiIHN0RXZ0OndoZW49IjIwMTgtMDYtMTRUMjM6MjY6MDYrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRTZENzExOTIxNzBFODExQUFENUZCNEU1NkM5Q0U5NCIgc3RSZWY6ZG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/uACFBZG9iZQBkQAAAAAEDABADAgMGAAAAAAAAAAAAAAAA/9sAhAACAgICAgICAgICAwICAgMEAwICAwQFBAQEBAQFBgUFBQUFBQYGBwcIBwcGCQkKCgkJDAwMDAwMDAwMDAwMDAwMAQMDAwUEBQkGBgkNCgkKDQ8ODg4ODw8MDAwMDA8PDAwMDAwMDwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wgARCAIAAgADAREAAhEBAxEB/8QBHgAAAgIDAQEBAQAAAAAAAAAAAQIABwMGCAkFBAoBAQACAwEBAQAAAAAAAAAAAAABBQIEBgMHCBAAAQMBBQYEBAYBBAMBAQAAAQARAgMSBAUGBxAgEzM0CCEyFBUxJRYXMCMkNRgJIiY2JzhBNyhAGREAAQIDBAQCDRIPDAkFAQEAAQARIQIDMUEEBVFhEgZxBxCBkaGx0SIy0hMzsxTBQpKyI3ODk9MkNHSEtBUlNRYg8OFSckNjZJSFlbUmNjdigqLCo0RU1GV1dhfxU6RFVUZWlnfDpWYnOMQYEgABAgEIBggEBAUEAQUAAAABAAIgMXGBscEycgMRkaHRsjMwQCFBgpJzBFFhEjTwIsKzEEJSg5NQ4dITYmCiI1Nj/9oADAMBAQIRAxEAAADViiSCiCjnoCevDH8xCECFP0Dzi5/oqS1dpBjIlh4dH79f0hh56trbBIQgTZ9rX3n11/l6vsEggSI+nseXlLzv3DQda0AgwUw60u+Cq901O6XTRBmSNBjq22+fWJbc9Wnl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"}],"extensionsRequired":["KHR_draco_mesh_compression"],"extensionsUsed":["KHR_draco_mesh_compression"]} +{ + "asset": { "generator": "Khronos glTF Blender I/O v1.5.17", "version": "2.0" }, + "scene": 0, + "scenes": [{ "name": "Scene", "nodes": [0, 1, 2, 3, 4, 5, 6, 7, 8] }], + "nodes": [ + { + "mesh": 0, + "name": "Circle", + "scale": [3.7607693672180176, 3.7607693672180176, 3.7607693672180176], + "translation": [0.47165822982788086, 0, -0.6066201329231262], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 1, + "name": "WindMill.001", + "scale": [0.4821113348007202, 0.4821113348007202, 0.4821113348007202], + "translation": [1.263749599456787, 1.900821566581726, 0.1711728870868683], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 2, + "name": "Fence_White.013", + "rotation": [0, 0.7071068286895752, 0, 0.7071068286895752], + "scale": [0.09888678789138794, 0.09888678789138794, 0.09888678789138794], + "translation": [1.3952089548110962, -0.005745698232203722, -2.4713940620422363] + }, + { + "mesh": 3, + "name": "Wooden Box", + "scale": [0.4007795751094818, 0.4007795751094818, 0.4007795751094818], + "translation": [0.19056254625320435, 0.05061200261116028, 0.21082305908203125], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 4, + "name": "Plane", + "scale": [0.0304397102445364, 0.0304397102445364, 0.0304397102445364], + "translation": [-0.16933752596378326, 1.0484503507614136, 0.31743738055229187], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 5, + "name": "Well", + "scale": [0.1421276479959488, 0.12818977236747742, 0.1421276479959488], + "translation": [2.077780246734619, 0.22757045924663544, -0.05814981460571289], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 6, + "name": "Trees", + "scale": [62.94956588745117, 62.94956588745117, 62.94956588745117], + "translation": [0.37176066637039185, 0.14777842164039612, -1.3625603914260864], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 7, + "name": "Barn_01", + "scale": [1.1511201858520508, 1.1511201858520508, 1.1511201858520508], + "translation": [-0.17597436904907227, 0.4125245213508606, -0.17850732803344727], + "rotation": [0, 0, 0, 1] + }, + { + "mesh": 8, + "name": "WindMill", + "scale": [0.4821113348007202, 0.4821113348007202, 0.4821113348007202], + "translation": [1.2636184692382812, 1.564571499824524, 0.07810831815004349], + "rotation": [0, 0, 0, 1] + } + ], + "materials": [ + { + "doubleSided": true, + "name": "Farm_Pack_001", + "pbrMetallicRoughness": { + "baseColorTexture": { "index": 0, "texCoord": 0 }, + "metallicFactor": 0, + "roughnessFactor": 0.9863636493682861, + "baseColorFactor": [1, 1, 1, 1] + }, + "emissiveFactor": [0, 0, 0], + "alphaMode": "OPAQUE" + }, + { "name": "default", "emissiveFactor": [0, 0, 0], "alphaMode": "OPAQUE", "doubleSided": false } + ], + "meshes": [ + { + "name": "Circle", + "primitives": [ + { + "attributes": { "POSITION": 1, "NORMAL": 2 }, + "indices": 0, + "mode": 4, + "material": 1, + "extensions": { + "KHR_draco_mesh_compression": { "bufferView": 0, "attributes": { "POSITION": 0, "NORMAL": 1 } } + } + } + ] + }, + { + "name": "Cube.029", + "primitives": [ + { + "attributes": { "POSITION": 4, "NORMAL": 5, "TEXCOORD_0": 6 }, + "indices": 3, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 1, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Cube.027", + "primitives": [ + { + "attributes": { "POSITION": 8, "NORMAL": 9, "TEXCOORD_0": 10 }, + "indices": 7, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 2, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Cube.005", + "primitives": [ + { + "attributes": { "POSITION": 12, "NORMAL": 13, "TEXCOORD_0": 14 }, + "indices": 11, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 3, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Plane.003", + "primitives": [ + { + "attributes": { "POSITION": 16, "NORMAL": 17, "TEXCOORD_0": 18 }, + "indices": 15, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 4, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Cylinder.001", + "primitives": [ + { + "attributes": { "POSITION": 20, "NORMAL": 21, "TEXCOORD_0": 22 }, + "indices": 19, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 5, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Plane.002", + "primitives": [ + { + "attributes": { "POSITION": 24, "NORMAL": 25, "TEXCOORD_0": 26 }, + "indices": 23, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 6, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Cube.002", + "primitives": [ + { + "attributes": { "POSITION": 28, "NORMAL": 29, "TEXCOORD_0": 30 }, + "indices": 27, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 7, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Cube", + "primitives": [ + { + "attributes": { "POSITION": 32, "NORMAL": 33, "TEXCOORD_0": 34 }, + "indices": 31, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 8, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + } + ], + "textures": [{ "sampler": 0, "source": 0 }], + "images": [{ "bufferView": 9, "mimeType": "image/jpeg", "name": "Diffuse_palette_noise" }], + "accessors": [ + { "componentType": 5123, "count": 90, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 32, + "max": [0.8007816435886583, 0.0007816316677292907, 0.8007816435886583], + "min": [-0.8007816435886582, -0.0007816316677292907, -0.8007816435886582], + "type": "VEC3" + }, + { "componentType": 5126, "count": 32, "type": "VEC3" }, + { "componentType": 5123, "count": 2076, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 1322, + "max": [0.8385503353814003, 0.8385502161721108, 0.05095415724360425], + "min": [-0.8385503353814002, -0.8385504545906898, -0.1684030803183433], + "type": "VEC3" + }, + { "componentType": 5126, "count": 1322, "type": "VEC3" }, + { "componentType": 5126, "count": 1322, "type": "VEC2" }, + { "componentType": 5123, "count": 3060, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 2000, + "max": [0.10322994759563642, 1.6502795766030693, 2.2154936462014696], + "min": [-39.21565765908245, -0.019190028951344522, -23.70925850441937], + "type": "VEC3" + }, + { "componentType": 5126, "count": 2000, "type": "VEC3" }, + { "componentType": 5126, "count": 2000, "type": "VEC2" }, + { "componentType": 5123, "count": 2292, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 1694, + "max": [0.18579399166423982, 0.1461265524262385, 0.14491311928442063], + "min": [-0.14491329809835496, -0.1464015217702681, -0.9569067778270537], + "type": "VEC3" + }, + { "componentType": 5126, "count": 1694, "type": "VEC3" }, + { "componentType": 5126, "count": 1694, "type": "VEC2" }, + { "componentType": 5123, "count": 822, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 624, + "max": [4.812053583748002, 0.0031038604833231176, 0.24871478110741096], + "min": [-5.050960444099564, -8.329193495399613, -0.3048462795087286], + "type": "VEC3" + }, + { "componentType": 5126, "count": 624, "type": "VEC3" }, + { "componentType": 5126, "count": 624, "type": "VEC2" }, + { "componentType": 5123, "count": 2370, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 1493, + "max": [1.5453098778265772, 1.1136803437164486, 0.867781436321033], + "min": [-1.307572226612872, -1.810559492199725, -1.2458345700195492], + "type": "VEC3" + }, + { "componentType": 5126, "count": 1493, "type": "VEC3" }, + { "componentType": 5126, "count": 1493, "type": "VEC2" }, + { "componentType": 5123, "count": 768, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 526, + "max": [0.016896564860131663, 0.017585191424480177, 0.004240338889400612], + "min": [-0.013106122959639949, -0.0036612214727812227, -0.01328685355582468], + "type": "VEC3" + }, + { "componentType": 5126, "count": 526, "type": "VEC3" }, + { "componentType": 5126, "count": 526, "type": "VEC2" }, + { "componentType": 5123, "count": 2226, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 1338, + "max": [0.32661417775988055, 0.3417208139262784, 0.47399327198237284], + "min": [-0.3267274502870451, -0.36584189573496684, -0.44418025056094035], + "type": "VEC3" + }, + { "componentType": 5126, "count": 1338, "type": "VEC3" }, + { "componentType": 5126, "count": 1338, "type": "VEC2" }, + { "componentType": 5123, "count": 984, "type": "SCALAR" }, + { + "componentType": 5126, + "count": 638, + "max": [0.7299346994293803, 0.958772202963706, 0.4743475615832653], + "min": [-0.7322520222614961, -3.2909023966740327, -1.4544944968174653], + "type": "VEC3" + }, + { "componentType": 5126, "count": 638, "type": "VEC3" }, + { "componentType": 5126, "count": 638, "type": "VEC2" } + ], + "bufferViews": [ + { "buffer": 0, "byteOffset": 0, "byteLength": 251 }, + { "buffer": 0, "byteOffset": 252, "byteLength": 3939 }, + { "buffer": 0, "byteOffset": 4192, "byteLength": 2986 }, + { "buffer": 0, "byteOffset": 7180, "byteLength": 2912 }, + { "buffer": 0, "byteOffset": 10092, "byteLength": 1908 }, + { "buffer": 0, "byteOffset": 12000, "byteLength": 4237 }, + { "buffer": 0, "byteOffset": 16240, "byteLength": 1432 }, + { "buffer": 0, "byteOffset": 17672, "byteLength": 2925 }, + { "buffer": 0, "byteOffset": 20600, "byteLength": 1771 }, + { "buffer": 0, "byteOffset": 22372, "byteLength": 85348 } + ], + "samplers": [{ "magFilter": 9729, "minFilter": 9987, "wrapS": 10497, "wrapT": 10497 }], + "buffers": [ + { + "name": "buffer", + "byteLength": 107720, + "uri": "data:application/octet-stream;base64,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dG9tbG9uZwAAAAAAAAAMY3JvcFJlY3RMZWZ0bG9uZwAAAAAAAAANY3JvcFJlY3RSaWdodGxvbmcAAAAAAAAAC2Nyb3BSZWN0VG9wbG9uZwAAAAAAOEJJTQPtAAAAAAAQAEgAAAABAAEASAAAAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAThCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAA4QklNBAAAAAAAAAIAAjhCSU0EAgAAAAAABgAAAAAAADhCSU0EMAAAAAAAAwEBAQA4QklNBC0AAAAAAAYAAQAAAAU4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADcQAAAAYAAAAAAAAAAAAAAgAAAAIAAAAAHgBEAGkAZgBmAHUAcwBlAF8AcABhAGwAZQB0AHQAZQBfAG4AbwBpAHMAZQBfAGcAcgBhAGQAaQBlAG4AdAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAgAAAAAAUmdodGxvbmcAAAIAAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAA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IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA1LTE5VDE5OjMxOjQzKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0xNFQyMzoyNjowNiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0xNFQyMzoyNjowNiswMTowMCIgeG1wTU06RG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkY2RDcxMTkyMTcwRTgxMUFBRDVGQjRFNTZDOUNFOTQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgcGhvdG9zaG9wOkxlZ2FjeUlQVENEaWdlc3Q9IkQzQzk5RjRCM0Q4REVBMjg4NTQ4MzU2QTg0MTU5QzJCIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MEJDRjQ1REM2QjVDRTgxMUI3Q0RFOUIwMEI2NjFFNTAiIHN0RXZ0OndoZW49IjIwMTgtMDUtMjBUMjE6MjQ6NTYrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNzc3RjMxNDExNkZFODExQUNENjk5OEE5QzcwNzk5NSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xM1QxNDo1NjoyNSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9qcGVnIHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Mzg3N0YzMTQxMTZGRTgxMUFDRDY5OThBOUM3MDc5OTUiIHN0RXZ0OndoZW49IjIwMTgtMDYtMTNUMTQ6NTY6MjUrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRTZENzExOTIxNzBFODExQUFENUZCNEU1NkM5Q0U5NCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xNFQyMzoyNjowNiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvanBlZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RkY2RDcxMTkyMTcwRTgxMUFBRDVGQjRFNTZDOUNFOTQiIHN0RXZ0OndoZW49IjIwMTgtMDYtMTRUMjM6MjY6MDYrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRTZENzExOTIxNzBFODExQUFENUZCNEU1NkM5Q0U5NCIgc3RSZWY6ZG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0iRDIyRjk4N0IyQjFDNUE5MEI4MUFDNzhBNkZDMjAxQjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/uACFBZG9iZQBkQAAAAAEDABADAgMGAAAAAAAAAAAAAAAA/9sAhAACAgICAgICAgICAwICAgMEAwICAwQFBAQEBAQFBgUFBQUFBQYGBwcIBwcGCQkKCgkJDAwMDAwMDAwMDAwMDAwMAQMDAwUEBQkGBgkNCgkKDQ8ODg4ODw8MDAwMDA8PDAwMDAwMDwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wgARCAIAAgADAREAAhEBAxEB/8QBHgAAAgIDAQEBAQAAAAAAAAAAAQIABwMGCAkFBAoBAQACAwEBAQAAAAAAAAAAAAABBQIEBgMHCBAAAQMBBQYEBAYBBAMBAQAAAQARAgMSBAUGBxAgEzM0CCEyFBUxJRYXMCMkNRgJIiY2JzhBNyhAGREAAQIDBAQCDRIPDAkFAQEAAQARIQIDMUEEBVFhEgZxBxCBkaGx0SIy0hMzsxTBQpKyI3ODk9MkNHSEtBUlNRYg8OFSckNjZJSFlbUmNjdigqLCo0RU1GV1dhfxU6RFVUZWlnfDpWYnOMQYEgABAgEIBggEBAUEAQUAAAABAAIgMXGBscEycgMRkaHRsjMwQCFBgpJzBFFhEjTwIsKzEEJSg5NQ4dITYmCiI1Nj/9oADAMBAQIRAxEAAADViiSCiCjnoCevDH8xCECFP0Dzi5/oqS1dpBjIlh4dH79f0hh56trbBIQgTZ9rX3n11/l6vsEggSI+nseXlLzv3DQda0AgwUw60u+Cq901O6XTRBmSNBjq22+fWJbc9Wnl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" + } + ], + "extensionsRequired": ["KHR_draco_mesh_compression"], + "extensionsUsed": ["KHR_draco_mesh_compression"] +} diff --git a/example/public/lightning.gltf b/example/public/lightning.gltf index 2485245b22..ffab425bd5 100644 --- a/example/public/lightning.gltf +++ b/example/public/lightning.gltf @@ -1,123 +1,103 @@ { - "asset" : { - "generator" : "Khronos glTF Blender I/O v1.5.17", - "version" : "2.0" - }, - "scene" : 0, - "scenes" : [ - { - "name" : "Scene", - "nodes" : [ - 0 - ] - } - ], - "nodes" : [ - { - "mesh" : 0, - "name" : "lightning", - "rotation" : [ - 0.7071068286895752, - 0, - 0, - 0.7071067094802856 - ] - } - ], - "materials" : [ - { - "doubleSided" : true, - "name" : "Yellow.026", - "pbrMetallicRoughness" : { - "baseColorFactor" : [ - 1, - 0.5052202939987183, - 0.017695415765047073, - 1 - ], - "metallicFactor" : 0, - "roughnessFactor" : 0.20000000298023224 - } - } - ], - "meshes" : [ + "asset": { + "generator": "Khronos glTF Blender I/O v1.5.17", + "version": "2.0" + }, + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [0] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "lightning", + "rotation": [0.7071068286895752, 0, 0, 0.7071067094802856] + } + ], + "materials": [ + { + "doubleSided": true, + "name": "Yellow.026", + "pbrMetallicRoughness": { + "baseColorFactor": [1, 0.5052202939987183, 0.017695415765047073, 1], + "metallicFactor": 0, + "roughnessFactor": 0.20000000298023224 + } + } + ], + "meshes": [ + { + "name": "Cube.1372", + "primitives": [ { - "name" : "Cube.1372", - "primitives" : [ - { - "attributes" : { - "POSITION" : 0, - "NORMAL" : 1, - "TEXCOORD_0" : 2 - }, - "indices" : 3, - "material" : 0 - } - ] + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 } - ], - "accessors" : [ - { - "bufferView" : 0, - "componentType" : 5126, - "count" : 206, - "max" : [ - 0.3984317481517792, - 0.1398487091064453, - 0.6621757745742798 - ], - "min" : [ - -0.4041382372379303, - -0.1398487091064453, - -0.5749139785766602 - ], - "type" : "VEC3" - }, - { - "bufferView" : 1, - "componentType" : 5126, - "count" : 206, - "type" : "VEC3" - }, - { - "bufferView" : 2, - "componentType" : 5126, - "count" : 206, - "type" : "VEC2" - }, - { - "bufferView" : 3, - "componentType" : 5123, - "count" : 684, - "type" : "SCALAR" - } - ], - "bufferViews" : [ - { - "buffer" : 0, - "byteLength" : 2472, - "byteOffset" : 0 - }, - { - "buffer" : 0, - "byteLength" : 2472, - "byteOffset" : 2472 - }, - { - "buffer" : 0, - "byteLength" : 1648, - "byteOffset" : 4944 - }, - { - "buffer" : 0, - "byteLength" : 1368, - "byteOffset" : 6592 - } - ], - "buffers" : [ - { - "byteLength" : 7960, - "uri" : "data:application/octet-stream;base64,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mQCdAKQAnQCoAJwAowCnAKkArgCxAKkAsQCvAK4AswC0AK4AtACxAKoAsgC0AKoAtACzALIAuAC7ALIAuwC0AK0AtwC7AK0AuwC6ALcAsACxALcAsQC7ALEAtAC7AL4AwgDGAL4AxgDFAMEAyADJAMEAyQDGAL8AxwDJAL8AyQDIAMcAzADNAMcAzQDJAMAAygDNAMAAzQDMAMsAxQDGAMsAxgDNAMYAyQDNAIYAdAB6AIYAegCJAIkAegCAAIkAgACIAIgAgAB3AIgAdwCFAFEAhgCJAFEAiQBUAFQAiQCHAFQAhwBSAFIAhwCEAFIAhABPAGcASQBMAGcATABsAGwATABNAGwATQBoAGkATgBKAGkASgBlAFAAbQBwAFAAcABTAFMAcABzAFMAcwBVAFQAcgBvAFQAbwBRAJUAigCNAJUAjQClAKUAjQCRAKUAkQCbAJoAkACMAJoAjACTADoAlACfADoAnwA/AD8AnwCWAD8AlgA7ADwAlwCSADwAkgA4ADkAVwBbADkAWwA9AD0AWwBcAD0AXAA+AD8AXQBYAD8AWAA6AF8AQQBFAF8ARQBjAGMARQBHAGMARwBiAGEARgBCAGEAQgBeAIoAQgBGAIoARgCNAI0ARgBEAI0ARACOAI8AQwBAAI8AQACLAHUASgBOAHUATgB8AHwATgBLAHwASwCBAIEASwBIAIEASAB2AKsAZgBrAKsAawC2ALUAagBpALUAaQCvAK8AaQBlAK8AZQCpAMAAWABdAMAAXQDKAMoAXQBZAMoAWQDDAMQAWgBWAMQAVgC8AF4AvwDIAF4AyABhAGEAyADBAGEAwQBkAGQAwQC9AGQAvQBgAG4ArAC5AG4AuQBxAHEAuQCyAHEAsgByAHIAsgCqAHIAqgBvAL8AlQCmAL8ApgDHAMcApgCeAMcAngDMAMwAngCUAMwAlADAAHQAqgCzAHQAswB4AHgAswCuAHgArgB9AH0ArgCpAH0AqQB1ADgAkgAqADgAKgACAA==" - } - ] + ] + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 206, + "max": [0.3984317481517792, 0.1398487091064453, 0.6621757745742798], + "min": [-0.4041382372379303, -0.1398487091064453, -0.5749139785766602], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 206, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 206, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 684, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 2472, + "byteOffset": 0 + }, + { + "buffer": 0, + "byteLength": 2472, + "byteOffset": 2472 + }, + { + "buffer": 0, + "byteLength": 1648, + "byteOffset": 4944 + }, + { + "buffer": 0, + "byteLength": 1368, + "byteOffset": 6592 + } + ], + "buffers": [ + { + "byteLength": 7960, + "uri": "data:application/octet-stream;base64,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mQCdAKQAnQCoAJwAowCnAKkArgCxAKkAsQCvAK4AswC0AK4AtACxAKoAsgC0AKoAtACzALIAuAC7ALIAuwC0AK0AtwC7AK0AuwC6ALcAsACxALcAsQC7ALEAtAC7AL4AwgDGAL4AxgDFAMEAyADJAMEAyQDGAL8AxwDJAL8AyQDIAMcAzADNAMcAzQDJAMAAygDNAMAAzQDMAMsAxQDGAMsAxgDNAMYAyQDNAIYAdAB6AIYAegCJAIkAegCAAIkAgACIAIgAgAB3AIgAdwCFAFEAhgCJAFEAiQBUAFQAiQCHAFQAhwBSAFIAhwCEAFIAhABPAGcASQBMAGcATABsAGwATABNAGwATQBoAGkATgBKAGkASgBlAFAAbQBwAFAAcABTAFMAcABzAFMAcwBVAFQAcgBvAFQAbwBRAJUAigCNAJUAjQClAKUAjQCRAKUAkQCbAJoAkACMAJoAjACTADoAlACfADoAnwA/AD8AnwCWAD8AlgA7ADwAlwCSADwAkgA4ADkAVwBbADkAWwA9AD0AWwBcAD0AXAA+AD8AXQBYAD8AWAA6AF8AQQBFAF8ARQBjAGMARQBHAGMARwBiAGEARgBCAGEAQgBeAIoAQgBGAIoARgCNAI0ARgBEAI0ARACOAI8AQwBAAI8AQACLAHUASgBOAHUATgB8AHwATgBLAHwASwCBAIEASwBIAIEASAB2AKsAZgBrAKsAawC2ALUAagBpALUAaQCvAK8AaQBlAK8AZQCpAMAAWABdAMAAXQDKAMoAXQBZAMoAWQDDAMQAWgBWAMQAVgC8AF4AvwDIAF4AyABhAGEAyADBAGEAwQBkAGQAwQC9AGQAvQBgAG4ArAC5AG4AuQBxAHEAuQCyAHEAsgByAHIAsgCqAHIAqgBvAL8AlQCmAL8ApgDHAMcApgCeAMcAngDMAMwAngCUAMwAlADAAHQAqgCzAHQAswB4AHgAswCuAHgArgB9AH0ArgCpAH0AqQB1ADgAkgAqADgAKgACAA==" + } + ] } diff --git a/example/public/ramen.gltf b/example/public/ramen.gltf index 9b44a9aa0d..b9a3ee80d6 100644 --- a/example/public/ramen.gltf +++ b/example/public/ramen.gltf @@ -1 +1,364 @@ -{"extensionsUsed":["KHR_materials_unlit","KHR_draco_mesh_compression"],"asset":{"generator":"UniGLTF-1.27","version":"2.0"},"buffers":[{"name":"buffer","byteLength":2576,"uri":"data:application/octet-stream;base64,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"}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":716},{"buffer":0,"byteOffset":716,"byteLength":240},{"buffer":0,"byteOffset":956,"byteLength":329},{"buffer":0,"byteOffset":1288,"byteLength":372},{"buffer":0,"byteOffset":1660,"byteLength":332},{"buffer":0,"byteOffset":1992,"byteLength":377},{"buffer":0,"byteOffset":2372,"byteLength":201}],"accessors":[{"type":"SCALAR","componentType":5125,"count":192,"min":[0],"max":[157]},{"type":"VEC3","componentType":5126,"count":158,"max":[0.2703543085118999,0.23026423868925677,0.31204459330309997],"min":[-0.2702793206857598,-0.0003045823263085407,-0.3120445933030999]},{"type":"VEC3","componentType":5126,"count":158,"min":[-0.9165827636625252,-1.007843137254902,-0.794834673872181],"max":[0.9187113539845335,1.007843137254902,0.797322188872917]},{"type":"VEC2","componentType":5126,"count":158,"min":[-6.149720065638,-8.065039985224182],"max":[6.143466845518915,5.368346564814026]},{"type":"SCALAR","componentType":5125,"count":36,"min":[0],"max":[23]},{"type":"VEC3","componentType":5126,"count":24,"max":[0.2703543085118999,0.2302325277224831,0.31204459330309997],"min":[-0.2702793206857598,0.15743735173474188,-0.3120445933030999]},{"type":"VEC3","componentType":5126,"count":24,"min":[-1.007843137254902,-0.00784313725490196,-0.8738685851003609],"max":[1.007843137254902,0.00784313725490196,0.8751510227427763]},{"type":"VEC2","componentType":5126,"count":24,"min":[-6.14861161361575,-8.063931533201933],"max":[6.148611613615751,-5.196578995340148]},{"type":"SCALAR","componentType":5125,"count":72,"min":[0],"max":[33]},{"type":"VEC3","componentType":5126,"count":34,"max":[0.21549624639222492,0.22689459351690794,0.24872712232627459],"min":[-0.2154365424112279,0.1919344123407405,-0.24872712232627459]},{"type":"VEC3","componentType":5126,"count":34,"min":[-1.007843137254902,-0.00784313725490196,-1.007843137254902],"max":[1.007843137254902,1.011764705882353,1.007843137254902]},{"type":"VEC2","componentType":5126,"count":34,"min":[-8.491321428546923,-8.801974161396044],"max":[8.492391850125639,10.801974161396046]},{"type":"SCALAR","componentType":5125,"count":66,"min":[0],"max":[41]},{"type":"VEC3","componentType":5126,"count":42,"max":[0.13901636096715753,0.23425834950625635,0.1509711552151075],"min":[0.02081975380698529,0.19204527552048054,-0.11932443415006312]},{"type":"VEC3","componentType":5126,"count":42,"min":[-0.9195546440049713,0.4021469720438415,-0.7973163656159943],"max":[0.9195546440049713,1.0104126898681416,0.7984866352642284]},{"type":"VEC2","componentType":5126,"count":42,"min":[-5.983753844789746,-8.90267436175752],"max":[5.98749032957463,6.097967788271191]},{"type":"SCALAR","componentType":5125,"count":102,"min":[0],"max":[27]},{"type":"VEC3","componentType":5126,"count":28,"max":[0.17486788937389763,0.19237419829667926,0.20183358953298447],"min":[-0.17481939361394763,0.19198018445669293,-0.2018335895329845]},{"type":"VEC3","componentType":5126,"count":28,"min":[-0.00392156862745098,0.996078431372549,-0.00392156862745098],"max":[0.00392156862745098,1.003921568627451,0.00392156862745098]},{"type":"VEC2","componentType":5126,"count":28,"min":[-6.890417417356579,-6.9539678896161],"max":[6.891286945529464,8.9539678896161]},{"type":"SCALAR","componentType":5125,"count":108,"min":[0],"max":[59]},{"type":"VEC3","componentType":5126,"count":60,"max":[0.12390678747578487,0.13753989200564087,0.000066826357513039],"min":[-0.00006715815039337933,-0.00006715815039337933,-0.13411515812845887]},{"type":"VEC3","componentType":5126,"count":60,"min":[-0.7602580790426217,-0.7602580790426217,-1.007843137254902],"max":[0.7613105484083587,0.7613105484083587,1.007843137254902]},{"type":"VEC2","componentType":5126,"count":60,"min":[-4.006472232404692,-2.4216574454936812],"max":[0.003912570539458038,1.0057543470712704]},{"type":"SCALAR","componentType":5125,"count":12,"min":[0],"max":[5]},{"type":"VEC3","componentType":5126,"count":6,"max":[0.06386241567984013,0.08609991803816254,-0.03234913807251305],"min":[0.011097060068331669,0.025854675582431267,-0.10169885818026214]},{"type":"VEC3","componentType":5126,"count":6,"min":[-0.7563365104151707,0.6547679302739162,-0.00392156862745098],"max":[-0.7484933731602688,0.6626110675288182,0.00392156862745098]},{"type":"VEC2","componentType":5126,"count":6,"min":[-4.0056384558318765,-3.208225106680265],"max":[-1.2716694134537891,-0.052461290872225064]}],"materials":[{"name":"_defaultMat","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"purple","pbrMetallicRoughness":{"baseColorFactor":[0.623529434,0.5568628,0.9098039,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"brown","pbrMetallicRoughness":{"baseColorFactor":[0.827451,0.5647059,0.403921574,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"green","pbrMetallicRoughness":{"baseColorFactor":[0.34117648,0.7372549,0.5921569,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"brownLight","pbrMetallicRoughness":{"baseColorFactor":[0.9764706,0.772549033,0.549019635,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]},{"name":"yellow","pbrMetallicRoughness":{"baseColorFactor":[0.9607843,0.7254902,0.258823544,1],"metallicFactor":1,"roughnessFactor":1},"doubleSided":false,"alphaMode":"OPAQUE","emissiveFactor":[0,0,0]}],"meshes":[{"name":"Mesh bowlBroth","primitives":[{"mode":4,"indices":0,"attributes":{"POSITION":1,"NORMAL":2,"TEXCOORD_0":3},"material":0,"extensions":{"KHR_draco_mesh_compression":{"bufferView":0,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":4,"attributes":{"POSITION":5,"NORMAL":6,"TEXCOORD_0":7},"material":1,"extensions":{"KHR_draco_mesh_compression":{"bufferView":1,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":8,"attributes":{"POSITION":9,"NORMAL":10,"TEXCOORD_0":11},"material":2,"extensions":{"KHR_draco_mesh_compression":{"bufferView":2,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":12,"attributes":{"POSITION":13,"NORMAL":14,"TEXCOORD_0":15},"material":3,"extensions":{"KHR_draco_mesh_compression":{"bufferView":3,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":16,"attributes":{"POSITION":17,"NORMAL":18,"TEXCOORD_0":19},"material":4,"extensions":{"KHR_draco_mesh_compression":{"bufferView":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]},{"name":"Mesh Group 495","primitives":[{"mode":4,"indices":20,"attributes":{"POSITION":21,"NORMAL":22,"TEXCOORD_0":23},"material":0,"extensions":{"KHR_draco_mesh_compression":{"bufferView":5,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}},{"mode":4,"indices":24,"attributes":{"POSITION":25,"NORMAL":26,"TEXCOORD_0":27},"material":5,"extensions":{"KHR_draco_mesh_compression":{"bufferView":6,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2}}}}]}],"nodes":[{"children":[1],"name":"tmpParent","translation":[0,0,0],"rotation":[0,0,0,1],"scale":[1,1,1]},{"children":[2,3],"name":"bowlBroth","translation":[0,0,0],"rotation":[0,0,0,1],"scale":[0.93,0.93,0.93],"mesh":0},{"name":"Group","translation":[0.143740281,0.164340109,-0.104827814],"rotation":[0,0.49999997,0,0.866025448],"scale":[1.07526886,1.07526886,1.07526886],"mesh":1},{"name":"Group","translation":[0.1626537,0.164340109,0.07206881],"rotation":[0,0,0,1],"scale":[1.07526886,1.07526886,1.07526886],"mesh":1}],"scenes":[{"nodes":[1]}],"scene":0,"extensionsRequired":["KHR_draco_mesh_compression"]} +{ + "extensionsUsed": ["KHR_materials_unlit", "KHR_draco_mesh_compression"], + "asset": { "generator": "UniGLTF-1.27", "version": "2.0" }, + "buffers": [ + { + "name": "buffer", + "byteLength": 2576, + "uri": "data:application/octet-stream;base64,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" + } + ], + "bufferViews": [ + { "buffer": 0, "byteOffset": 0, "byteLength": 716 }, + { "buffer": 0, "byteOffset": 716, "byteLength": 240 }, + { "buffer": 0, "byteOffset": 956, "byteLength": 329 }, + { "buffer": 0, "byteOffset": 1288, "byteLength": 372 }, + { "buffer": 0, "byteOffset": 1660, "byteLength": 332 }, + { "buffer": 0, "byteOffset": 1992, "byteLength": 377 }, + { "buffer": 0, "byteOffset": 2372, "byteLength": 201 } + ], + "accessors": [ + { "type": "SCALAR", "componentType": 5125, "count": 192, "min": [0], "max": [157] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 158, + "max": [0.2703543085118999, 0.23026423868925677, 0.31204459330309997], + "min": [-0.2702793206857598, -0.0003045823263085407, -0.3120445933030999] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 158, + "min": [-0.9165827636625252, -1.007843137254902, -0.794834673872181], + "max": [0.9187113539845335, 1.007843137254902, 0.797322188872917] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 158, + "min": [-6.149720065638, -8.065039985224182], + "max": [6.143466845518915, 5.368346564814026] + }, + { "type": "SCALAR", "componentType": 5125, "count": 36, "min": [0], "max": [23] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 24, + "max": [0.2703543085118999, 0.2302325277224831, 0.31204459330309997], + "min": [-0.2702793206857598, 0.15743735173474188, -0.3120445933030999] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 24, + "min": [-1.007843137254902, -0.00784313725490196, -0.8738685851003609], + "max": [1.007843137254902, 0.00784313725490196, 0.8751510227427763] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 24, + "min": [-6.14861161361575, -8.063931533201933], + "max": [6.148611613615751, -5.196578995340148] + }, + { "type": "SCALAR", "componentType": 5125, "count": 72, "min": [0], "max": [33] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 34, + "max": [0.21549624639222492, 0.22689459351690794, 0.24872712232627459], + "min": [-0.2154365424112279, 0.1919344123407405, -0.24872712232627459] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 34, + "min": [-1.007843137254902, -0.00784313725490196, -1.007843137254902], + "max": [1.007843137254902, 1.011764705882353, 1.007843137254902] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 34, + "min": [-8.491321428546923, -8.801974161396044], + "max": [8.492391850125639, 10.801974161396046] + }, + { "type": "SCALAR", "componentType": 5125, "count": 66, "min": [0], "max": [41] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 42, + "max": [0.13901636096715753, 0.23425834950625635, 0.1509711552151075], + "min": [0.02081975380698529, 0.19204527552048054, -0.11932443415006312] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 42, + "min": [-0.9195546440049713, 0.4021469720438415, -0.7973163656159943], + "max": [0.9195546440049713, 1.0104126898681416, 0.7984866352642284] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 42, + "min": [-5.983753844789746, -8.90267436175752], + "max": [5.98749032957463, 6.097967788271191] + }, + { "type": "SCALAR", "componentType": 5125, "count": 102, "min": [0], "max": [27] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 28, + "max": [0.17486788937389763, 0.19237419829667926, 0.20183358953298447], + "min": [-0.17481939361394763, 0.19198018445669293, -0.2018335895329845] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 28, + "min": [-0.00392156862745098, 0.996078431372549, -0.00392156862745098], + "max": [0.00392156862745098, 1.003921568627451, 0.00392156862745098] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 28, + "min": [-6.890417417356579, -6.9539678896161], + "max": [6.891286945529464, 8.9539678896161] + }, + { "type": "SCALAR", "componentType": 5125, "count": 108, "min": [0], "max": [59] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 60, + "max": [0.12390678747578487, 0.13753989200564087, 0.000066826357513039], + "min": [-0.00006715815039337933, -0.00006715815039337933, -0.13411515812845887] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 60, + "min": [-0.7602580790426217, -0.7602580790426217, -1.007843137254902], + "max": [0.7613105484083587, 0.7613105484083587, 1.007843137254902] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 60, + "min": [-4.006472232404692, -2.4216574454936812], + "max": [0.003912570539458038, 1.0057543470712704] + }, + { "type": "SCALAR", "componentType": 5125, "count": 12, "min": [0], "max": [5] }, + { + "type": "VEC3", + "componentType": 5126, + "count": 6, + "max": [0.06386241567984013, 0.08609991803816254, -0.03234913807251305], + "min": [0.011097060068331669, 0.025854675582431267, -0.10169885818026214] + }, + { + "type": "VEC3", + "componentType": 5126, + "count": 6, + "min": [-0.7563365104151707, 0.6547679302739162, -0.00392156862745098], + "max": [-0.7484933731602688, 0.6626110675288182, 0.00392156862745098] + }, + { + "type": "VEC2", + "componentType": 5126, + "count": 6, + "min": [-4.0056384558318765, -3.208225106680265], + "max": [-1.2716694134537891, -0.052461290872225064] + } + ], + "materials": [ + { + "name": "_defaultMat", + "pbrMetallicRoughness": { "baseColorFactor": [1, 1, 1, 1], "metallicFactor": 1, "roughnessFactor": 1 }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "purple", + "pbrMetallicRoughness": { + "baseColorFactor": [0.623529434, 0.5568628, 0.9098039, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "brown", + "pbrMetallicRoughness": { + "baseColorFactor": [0.827451, 0.5647059, 0.403921574, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "green", + "pbrMetallicRoughness": { + "baseColorFactor": [0.34117648, 0.7372549, 0.5921569, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "brownLight", + "pbrMetallicRoughness": { + "baseColorFactor": [0.9764706, 0.772549033, 0.549019635, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + }, + { + "name": "yellow", + "pbrMetallicRoughness": { + "baseColorFactor": [0.9607843, 0.7254902, 0.258823544, 1], + "metallicFactor": 1, + "roughnessFactor": 1 + }, + "doubleSided": false, + "alphaMode": "OPAQUE", + "emissiveFactor": [0, 0, 0] + } + ], + "meshes": [ + { + "name": "Mesh bowlBroth", + "primitives": [ + { + "mode": 4, + "indices": 0, + "attributes": { "POSITION": 1, "NORMAL": 2, "TEXCOORD_0": 3 }, + "material": 0, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 0, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 4, + "attributes": { "POSITION": 5, "NORMAL": 6, "TEXCOORD_0": 7 }, + "material": 1, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 1, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 8, + "attributes": { "POSITION": 9, "NORMAL": 10, "TEXCOORD_0": 11 }, + "material": 2, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 2, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 12, + "attributes": { "POSITION": 13, "NORMAL": 14, "TEXCOORD_0": 15 }, + "material": 3, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 3, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 16, + "attributes": { "POSITION": 17, "NORMAL": 18, "TEXCOORD_0": 19 }, + "material": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 4, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + }, + { + "name": "Mesh Group 495", + "primitives": [ + { + "mode": 4, + "indices": 20, + "attributes": { "POSITION": 21, "NORMAL": 22, "TEXCOORD_0": 23 }, + "material": 0, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 5, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + }, + { + "mode": 4, + "indices": 24, + "attributes": { "POSITION": 25, "NORMAL": 26, "TEXCOORD_0": 27 }, + "material": 5, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 6, + "attributes": { "POSITION": 0, "NORMAL": 1, "TEXCOORD_0": 2 } + } + } + } + ] + } + ], + "nodes": [ + { "children": [1], "name": "tmpParent", "translation": [0, 0, 0], "rotation": [0, 0, 0, 1], "scale": [1, 1, 1] }, + { + "children": [2, 3], + "name": "bowlBroth", + "translation": [0, 0, 0], + "rotation": [0, 0, 0, 1], + "scale": [0.93, 0.93, 0.93], + "mesh": 0 + }, + { + "name": "Group", + "translation": [0.143740281, 0.164340109, -0.104827814], + "rotation": [0, 0.49999997, 0, 0.866025448], + "scale": [1.07526886, 1.07526886, 1.07526886], + "mesh": 1 + }, + { + "name": "Group", + "translation": [0.1626537, 0.164340109, 0.07206881], + "rotation": [0, 0, 0, 1], + "scale": [1.07526886, 1.07526886, 1.07526886], + "mesh": 1 + } + ], + "scenes": [{ "nodes": [1] }], + "scene": 0, + "extensionsRequired": ["KHR_draco_mesh_compression"] +} diff --git a/example/src/App.tsx b/example/src/App.tsx index e70dc1a95d..41858d7aa5 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -2,7 +2,8 @@ import * as React from 'react' import { useErrorBoundary } from 'use-error-boundary' import { Route, useRoute, Redirect } from 'wouter' -import { Global, Loading, Page, DemoPanel, Dot, Error } from './styles' +import { Loading, Page, DemoPanel, Dot, Error } from './components' +import './styles.css' import * as demos from './demos' @@ -47,17 +48,14 @@ export default function App() { const dev = new URLSearchParams(location.search).get('dev') return ( - <> - - - }> - } /> - - - - - {dev === null && } - - + + }> + } /> + + + + + {dev === null && } + ) } diff --git a/example/src/components.tsx b/example/src/components.tsx new file mode 100644 index 0000000000..b5775242ca --- /dev/null +++ b/example/src/components.tsx @@ -0,0 +1,20 @@ +import * as React from 'react' +import { type LinkProps, Link } from 'wouter' + +export const Page = (props: { children?: React.ReactNode }) =>
+ +export const DemoPanel = (props: { children?: React.ReactNode }) =>
+ +export const Dot = (props: React.PropsWithChildren) => + +export const Loading = () => { + return ( +
+
Loading.
+
+ ) +} + +export const Error = ({ children }: { children?: React.ReactNode }) => { + return
{children}
+} diff --git a/example/src/demos/Lines.tsx b/example/src/demos/Lines.tsx index 2ea176b747..9b42f44c67 100644 --- a/example/src/demos/Lines.tsx +++ b/example/src/demos/Lines.tsx @@ -1,6 +1,13 @@ import React, { useRef, useEffect, useState, useCallback, useContext, useMemo } from 'react' -import { extend, Canvas, useThree, ReactThreeFiber, ThreeEvent } from '@react-three/fiber' +import { ThreeElement, extend, Canvas, useThree, ThreeEvent } from '@react-three/fiber' import { OrbitControls } from 'three-stdlib' + +declare module '@react-three/fiber' { + interface ThreeElements { + orbitControls: ThreeElement + } +} + extend({ OrbitControls }) function useHover(stopPropagation = true) { @@ -82,7 +89,7 @@ function Line({ defaultStart, defaultEnd }: any) { <> - + diff --git a/example/src/demos/Pointcloud.tsx b/example/src/demos/Pointcloud.tsx index ef8927cb6a..238c4d56f9 100644 --- a/example/src/demos/Pointcloud.tsx +++ b/example/src/demos/Pointcloud.tsx @@ -1,8 +1,6 @@ -import React, { useRef, useEffect, useState, useCallback, useContext, useMemo } from 'react' -import { extend, Canvas, useThree, ReactThreeFiber } from '@react-three/fiber' +import React, { useRef, useCallback, useMemo } from 'react' +import { type ThreeElement, extend, Canvas, ThreeEvent } from '@react-three/fiber' import * as THREE from 'three' -import { OrbitControls } from 'three-stdlib' -extend({ OrbitControls }) export class DotMaterial extends THREE.ShaderMaterial { constructor() { @@ -19,6 +17,12 @@ export class DotMaterial extends THREE.ShaderMaterial { } } +declare module '@react-three/fiber' { + interface ThreeElements { + dotMaterial: ThreeElement + } +} + extend({ DotMaterial }) const white = new THREE.Color('white') @@ -31,22 +35,22 @@ function Particles({ pointCount }: any) { }, [pointCount]) const points = useRef(null!) - const hover = useCallback((e) => { + const hover = useCallback((e: ThreeEvent) => { e.stopPropagation() - white.toArray(points.current.geometry.attributes.color.array, e.index * 3) + white.toArray(points.current.geometry.attributes.color.array, e.index! * 3) points.current.geometry.attributes.color.needsUpdate = true }, []) - const unhover = useCallback((e) => { - hotpink.toArray(points.current.geometry.attributes.color.array, e.index * 3) + const unhover = useCallback((e: ThreeEvent) => { + hotpink.toArray(points.current.geometry.attributes.color.array, e.index! * 3) points.current.geometry.attributes.color.needsUpdate = true }, []) return ( - - + + diff --git a/example/src/demos/SVGRenderer.tsx b/example/src/demos/SVGRenderer.tsx index dc632ab11e..4d7a214ea9 100644 --- a/example/src/demos/SVGRenderer.tsx +++ b/example/src/demos/SVGRenderer.tsx @@ -1,15 +1,6 @@ import * as THREE from 'three' -import React, { useRef, useState } from 'react' -import { - RenderProps, - extend, - createRoot, - unmountComponentAtNode, - useFrame, - events, - ReconcilerRoot, -} from '@react-three/fiber' -import { useMeasure, Options as ResizeOptions } from '../../../packages/fiber/src/web/use-measure' +import React, { useEffect, useRef, useState } from 'react' +import { useFrame, Canvas } from '@react-three/fiber' import { SVGRenderer } from 'three-stdlib' function TorusKnot() { @@ -27,49 +18,21 @@ function TorusKnot() { ) } +const gl = new SVGRenderer() +gl.domElement.style.position = 'absolute' +gl.domElement.style.top = '0' +gl.domElement.style.left = '0' + export default function () { + useEffect(() => { + document.body.appendChild(gl.domElement) + return () => void document.body.removeChild(gl.domElement) + }, []) + return ( - + ) } - -interface Props extends Omit, 'size' | 'gl'>, React.HTMLAttributes { - children: React.ReactNode - resize?: ResizeOptions -} - -function Canvas({ children, resize, style, className, ...props }: Props) { - React.useMemo(() => extend(THREE), []) - - const [bind, size] = useMeasure({ scroll: true, debounce: { scroll: 50, resize: 0 }, ...resize }) - const ref = React.useRef(null!) - React.useImperativeHandle(bind, () => ref.current, []) - const [gl] = useState(() => new SVGRenderer() as unknown as THREE.WebGLRenderer) - const root = React.useRef>(null!) - - if (size.width > 0 && size.height > 0) { - if (!root.current) root.current = createRoot(ref.current) - root.current.configure({ ...props, size, events, gl }) - root.current.render(children) - } - - React.useEffect(() => { - const container = ref.current - container.appendChild(gl.domElement) - return () => { - container.removeChild(gl.domElement) - unmountComponentAtNode(container) - } - }, []) - - return ( -
- ) -} diff --git a/example/src/styles.css b/example/src/styles.css new file mode 100644 index 0000000000..9a813beab0 --- /dev/null +++ b/example/src/styles.css @@ -0,0 +1,189 @@ +/* @import url('@pmndrs/branding/styles.css'); */ +@import url('https://rsms.me/inter/inter.css'); + +.pmndrs-menu { + font-family: 'Inter var', sans-serif; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + color: #808080; + padding: 40px; + pointer-events: none; + justify-content: flex-start; + align-items: flex-end; + flex-direction: row; + font-size: 10px; + line-height: 1.5em; +} + +.pmndrs-menu > div { + word-wrap: none; + word-break: none; + white-space: pre; + padding-left: 25px; + padding-right: 25px; + display: flex; + justify-content: flex-start; + align-items: flex-start; + flex-direction: column; +} + +.pmndrs-menu > div b { + font-weight: 600; + color: #b0b0b0; +} + +.pmndrs-menu a { + pointer-events: all; + cursor: pointer; + color: inherit; + text-decoration: none; +} + +.pmndrs-menu a:hover { + text-decoration: underline; + color: inherit; +} + +* { + box-sizing: border-box; +} + +html, +body, +#root { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; +} + +#root { + overflow: auto; +} + +body { + position: fixed; + overflow: hidden; + overscroll-behavior-y: none; + font-family: 'Inter var', sans-serif; + color: black; + background: #dedddf !important; +} + +canvas { + touch-action: none; +} + +.container { + position: relative; + width: 100%; + height: 100%; +} + +.text { + line-height: 1em; + text-align: left; + font-size: 8em; + word-break: break-word; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.Page { + position: relative; + width: 100%; + height: 100vh; + + & > h1 { + font-family: 'Roboto', sans-serif; + font-weight: 900; + font-size: 8em; + margin: 0; + color: white; + line-height: 0.59em; + letter-spacing: -2px; + } + + & > h1 { + position: absolute; + top: 70px; + left: 60px; + } + + & > span { + position: absolute; + bottom: 60px; + right: 60px; + } + + @media only screen and (max-width: 1000px) { + & > h1 { + font-size: 5em; + letter-spacing: -1px; + } + } + + & > a { + margin: 0; + color: white; + text-decoration: none; + } +} + +.DemoPanel { + z-index: 1000; + position: absolute; + bottom: 50px; + left: 50px; + max-width: 250px; +} + +.Dot { + display: inline-block; + width: 20px; + height: 20px; + border-radius: 50%; + margin: 8px; +} + +.LoadingContainer { + position: fixed; + inset: 0; + z-index: 100; + display: flex; + align-items: center; + justify-content: center; + + background-color: #dedddf; + color: white; +} + +.LoadingMessage { + font-family: 'Inter', Helvetica, sans-serif; +} + +.Error { + position: absolute; + padding: 10px 20px; + bottom: unset; + right: unset; + top: 60px; + left: 60px; + max-width: 380px; + border: 2px solid #ff5050; + color: #ff5050; +} diff --git a/example/src/styles.tsx b/example/src/styles.tsx deleted file mode 100644 index db509b6ed9..0000000000 --- a/example/src/styles.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import * as React from 'react' -import styled, { createGlobalStyle } from 'styled-components' -import { Link } from 'wouter' - -const Page = styled.div` - position: relative; - width: 100%; - height: 100vh; - - & > h1 { - font-family: 'Roboto', sans-serif; - font-weight: 900; - font-size: 8em; - margin: 0; - color: white; - line-height: 0.59em; - letter-spacing: -2px; - } - - & > h1 { - position: absolute; - top: 70px; - left: 60px; - } - - & > span { - position: absolute; - bottom: 60px; - right: 60px; - } - - @media only screen and (max-width: 1000px) { - & > h1 { - font-size: 5em; - letter-spacing: -1px; - } - } - - & > a { - margin: 0; - color: white; - text-decoration: none; - } -` - -const Global = createGlobalStyle` - @import url('@pmndrs/branding/styles.css'); - - * { - box-sizing: border-box; - } - - html, - body, - #root { - width: 100%; - height: 100%; - margin: 0; - padding: 0; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - overflow: hidden; - } - - #root { - overflow: auto; - } - - body { - position: fixed; - overflow: hidden; - overscroll-behavior-y: none; - font-family: 'Inter var', sans-serif; - color: black; - background: #dedddf !important; - } - - canvas { - touch-action: none; - } - - .container { - position: relative; - width: 100%; - height: 100%; - } - - .text { - line-height: 1em; - text-align: left; - font-size: 8em; - word-break: break-word; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } -` -export const DemoPanel = styled.div` - z-index: 1000; - position: absolute; - bottom: 50px; - left: 50px; - max-width: 250px; -` - -export const Dot = styled(Link)` - display: inline-block; - width: 20px; - height: 20px; - border-radius: 50%; - margin: 8px; -` - -const LoadingContainer = styled.div` - position: fixed; - inset: 0; - z-index: 100; - display: flex; - align-items: center; - justify-content: center; - - background-color: #dedddf; - color: white; -` - -const LoadingMessage = styled.div` - font-family: 'Inter', Helvetica, sans-serif; -` - -export const Loading = () => { - return ( - - Loading. - - ) -} - -const StyledError = styled.div` - position: absolute; - padding: 10px 20px; - bottom: unset; - right: unset; - top: 60px; - left: 60px; - max-width: 380px; - border: 2px solid #ff5050; - color: #ff5050; -` - -export const Error = ({ children }: React.PropsWithChildren<{}>) => { - return {children} -} - -export { Global, Page } diff --git a/example/typings/global.d.ts b/example/typings/global.d.ts deleted file mode 100644 index 38d720c32c..0000000000 --- a/example/typings/global.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ReactThreeFiber } from '@react-three/fiber' -import { OrbitControls } from 'three-stdlib' - -import { DotMaterial } from '../src/demos/Pointcloud' - -declare module '@react-three/fiber' { - interface ThreeElements { - orbitControls: ReactThreeFiber.Node - dotMaterial: ReactThreeFiber.MaterialNode - } -} diff --git a/jest.config.js b/jest.config.js index 6c7a0801c1..0b869d192f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -14,5 +14,5 @@ module.exports = { moduleFileExtensions: ['js', 'ts', 'tsx'], verbose: false, testTimeout: 30000, - setupFilesAfterEnv: ['/packages/shared/setupTests.ts', '/packages/fiber/tests/setupTests.ts'], + setupFilesAfterEnv: ['/packages/shared/setupTests.ts'], } diff --git a/package.json b/package.json index 2fbd6e9788..ba05629043 100644 --- a/package.json +++ b/package.json @@ -51,17 +51,17 @@ "@changesets/changelog-git": "^0.1.11", "@changesets/cli": "^2.22.0", "@preconstruct/cli": "^2.1.5", - "@testing-library/react": "^13.0.0-alpha.5", + "@testing-library/react": "^15.0.2", "@types/jest": "^29.2.5", - "@types/react": "^18.0.5", - "@types/react-dom": "^18.0.1", - "@types/react-native": "0.67.4", - "@types/react-test-renderer": "^17.0.1", - "@types/scheduler": "^0.16.2", - "@types/three": "^0.139.0", - "@typescript-eslint/eslint-plugin": "^5.48.1", - "@typescript-eslint/parser": "^5.48.1", - "eslint": "^8.32.0", + "@types/react": "npm:types-react@beta", + "@types/react-dom": "npm:types-react-dom@beta", + "@types/react-native": "0.69.5", + "@types/react-test-renderer": "18.0.7", + "@types/scheduler": "0.23.0", + "@types/three": "^0.141.0", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-import": "^2.25.4", @@ -69,24 +69,26 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.29.4", "eslint-plugin-react-hooks": "^4.4.0", - "expo-asset": "^8.4.6", + "expo-asset": "^8.6.0", "expo-file-system": "^15.4.3", - "expo-gl": "^11.1.2", + "expo-gl": "^11.4.0", "husky": "^7.0.4", - "jest": "^29.3.1", + "jest": "^29.7.0", "jest-cli": "^27.5.1", "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-native": "0.67.4", - "react-test-renderer": "^18.0.0", - "regenerator-runtime": "^0.13.9", - "three": "^0.139.0", - "three-stdlib": "^2.8.11", - "ts-jest": "^27.1.4", + "react": "19.0.0-rc.0", + "react-dom": "19.0.0-rc.0", + "react-native": "0.69.3", + "react-test-renderer": "19.0.0-rc.0", + "three": "^0.141.0", + "three-stdlib": "^2.13.0", + "ts-jest": "^29.1.2", "typescript": "^4.6.3" }, - "dependencies": {} + "overrides": { + "@types/react": "npm:types-react@beta", + "@types/react-dom": "npm:types-react-dom@beta" + } } diff --git a/packages/fiber/__mocks__/expo-gl.ts b/packages/fiber/__mocks__/expo-gl.ts index 746b162811..7915694131 100644 --- a/packages/fiber/__mocks__/expo-gl.ts +++ b/packages/fiber/__mocks__/expo-gl.ts @@ -1,10 +1,12 @@ import * as React from 'react' +import type { GLViewProps } from 'expo-gl' import { WebGL2RenderingContext } from '@react-three/test-renderer/src/WebGL2RenderingContext' -export const GLView = ({ onContextCreate }: { onContextCreate: (gl: any) => void }) => { +export function GLView({ onContextCreate }: GLViewProps) { React.useLayoutEffect(() => { const gl = new WebGL2RenderingContext({ width: 1280, height: 800 } as HTMLCanvasElement) - onContextCreate(gl) + gl.endFrameEXP = () => {} + onContextCreate(gl as any) }, []) return null diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 25330f55a5..c242b2838e 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -1,6 +1,6 @@ { "name": "@react-three/fiber", - "version": "8.17.10", + "version": "9.0.0-rc.0", "description": "A React renderer for Threejs", "keywords": [ "react", @@ -44,26 +44,26 @@ "dependencies": { "@babel/runtime": "^7.17.8", "@types/debounce": "^1.2.1", - "@types/react-reconciler": "^0.26.7", + "@types/react-reconciler": "^0.28.8", "@types/webxr": "*", "base64-js": "^1.5.1", "buffer": "^6.0.3", "debounce": "^1.2.1", - "its-fine": "^1.0.6", - "react-reconciler": "^0.27.0", - "scheduler": "^0.21.0", + "its-fine": "^1.2.5", + "react-reconciler": "0.31.0-rc.0", + "scheduler": "0.25.0-rc.0", "suspend-react": "^0.1.3", - "zustand": "^3.7.1" + "zustand": "^4.1.2" }, "peerDependencies": { "expo": ">=43.0", "expo-asset": ">=8.4", "expo-gl": ">=11.0", "expo-file-system": ">=11.0", - "react": ">=18.0", - "react-dom": ">=18.0", - "react-native": ">=0.64", - "three": ">=0.133" + "react": ">=19.0", + "react-dom": ">=19.0", + "react-native": ">=0.69", + "three": ">=0.141" }, "peerDependenciesMeta": { "react-dom": { diff --git a/packages/fiber/src/core/events.ts b/packages/fiber/src/core/events.ts index 68a8511dbd..f7e2a767a3 100644 --- a/packages/fiber/src/core/events.ts +++ b/packages/fiber/src/core/events.ts @@ -1,10 +1,7 @@ import * as THREE from 'three' -import { ContinuousEventPriority, DiscreteEventPriority, DefaultEventPriority } from 'react-reconciler/constants' -import { getRootState } from './utils' -import type { UseBoundStore } from 'zustand' -import type { Instance } from './renderer' -import type { RootState } from './store' -import type { Properties } from '../three-types' +import { type Properties, getRootState } from './utils' +import type { Instance } from './reconciler' +import type { RootState, RootStore } from './store' export interface Intersection extends THREE.Intersection { /** The event source (the object which registered the handler) */ @@ -38,7 +35,7 @@ export type Camera = THREE.OrthographicCamera | THREE.PerspectiveCamera export type ThreeEvent = IntersectionEvent & Properties export type DomEvent = PointerEvent | MouseEvent | WheelEvent -export type Events = { +export interface Events { onClick: EventListener onContextMenu: EventListener onDoubleClick: EventListener @@ -51,7 +48,7 @@ export type Events = { onLostPointerCapture: EventListener } -export type EventHandlers = { +export interface EventHandlers { onClick?: (event: ThreeEvent) => void onContextMenu?: (event: ThreeEvent) => void onDoubleClick?: (event: ThreeEvent) => void @@ -102,35 +99,6 @@ function makeId(event: Intersection) { return (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId } -// https://github.com/facebook/react/tree/main/packages/react-reconciler#getcurrenteventpriority -// Gives React a clue as to how import the current interaction is -export function getEventPriority() { - // Get a handle to the current global scope in window and worker contexts if able - // https://github.com/pmndrs/react-three-fiber/pull/2493 - const globalScope = (typeof self !== 'undefined' && self) || (typeof window !== 'undefined' && window) - if (!globalScope) return DefaultEventPriority - - const name = globalScope.event?.type - switch (name) { - case 'click': - case 'contextmenu': - case 'dblclick': - case 'pointercancel': - case 'pointerdown': - case 'pointerup': - return DiscreteEventPriority - case 'pointermove': - case 'pointerout': - case 'pointerover': - case 'pointerenter': - case 'pointerleave': - case 'wheel': - return ContinuousEventPriority - default: - return DefaultEventPriority - } -} - /** * Release pointer captures. * This is called by releasePointerCapture in the API, and when an object is removed. @@ -152,7 +120,7 @@ function releaseInternalPointerCapture( } } -export function removeInteractivity(store: UseBoundStore, object: THREE.Object3D) { +export function removeInteractivity(store: RootStore, object: THREE.Object3D) { const { internal } = store.getState() // Removes every trace of an object from the data store internal.interaction = internal.interaction.filter((o) => o !== object) @@ -168,7 +136,7 @@ export function removeInteractivity(store: UseBoundStore, object: THR }) } -export function createEvents(store: UseBoundStore) { +export function createEvents(store: RootStore) { /** Calculates delta */ function calculateDistance(event: DomEvent) { const { internal } = store.getState() @@ -181,7 +149,8 @@ export function createEvents(store: UseBoundStore) { function filterPointerEvents(objects: THREE.Object3D[]) { return objects.filter((obj) => ['Move', 'Over', 'Enter', 'Out', 'Leave'].some( - (name) => (obj as unknown as Instance).__r3f?.handlers[('onPointer' + name) as keyof EventHandlers], + (name) => + (obj as Instance['object']).__r3f?.handlers[('onPointer' + name) as keyof EventHandlers], ), ) } @@ -249,7 +218,8 @@ export function createEvents(store: UseBoundStore) { let eventObject: THREE.Object3D | null = hit.object // Bubble event up while (eventObject) { - if ((eventObject as unknown as Instance).__r3f?.eventCount) intersections.push({ ...hit, eventObject }) + if ((eventObject as Instance['object']).__r3f?.eventCount) + intersections.push({ ...hit, eventObject }) eventObject = eventObject.parent } } @@ -270,96 +240,97 @@ export function createEvents(store: UseBoundStore) { delta: number, callback: (event: ThreeEvent) => void, ) { - const rootState = store.getState() - // If anything has been found, forward it to the event listeners if (intersections.length) { const localState = { stopped: false } for (const hit of intersections) { - const state = getRootState(hit.object) || rootState - const { raycaster, pointer, camera, internal } = state - const unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera) - const hasPointerCapture = (id: number) => internal.capturedMap.get(id)?.has(hit.eventObject) ?? false - - const setPointerCapture = (id: number) => { - const captureData = { intersection: hit, target: event.target as Element } - if (internal.capturedMap.has(id)) { - // if the pointerId was previously captured, we add the hit to the - // event capturedMap. - internal.capturedMap.get(id)!.set(hit.eventObject, captureData) - } else { - // if the pointerId was not previously captured, we create a map - // containing the hitObject, and the hit. hitObject is used for - // faster access. - internal.capturedMap.set(id, new Map([[hit.eventObject, captureData]])) + const state = getRootState(hit.object) + if (state) { + const { raycaster, pointer, camera, internal } = state + const unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera) + + const hasPointerCapture = (id: number) => internal.capturedMap.get(id)?.has(hit.eventObject) ?? false + + const setPointerCapture = (id: number) => { + const captureData = { intersection: hit, target: event.target as Element } + if (internal.capturedMap.has(id)) { + // if the pointerId was previously captured, we add the hit to the + // event capturedMap. + internal.capturedMap.get(id)!.set(hit.eventObject, captureData) + } else { + // if the pointerId was not previously captured, we create a map + // containing the hitObject, and the hit. hitObject is used for + // faster access. + internal.capturedMap.set(id, new Map([[hit.eventObject, captureData]])) + } + // Call the original event now + ;(event.target as Element).setPointerCapture(id) } - // Call the original event now - ;(event.target as Element).setPointerCapture(id) - } - const releasePointerCapture = (id: number) => { - const captures = internal.capturedMap.get(id) - if (captures) { - releaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id) + const releasePointerCapture = (id: number) => { + const captures = internal.capturedMap.get(id) + if (captures) { + releaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id) + } } - } - // Add native event props - let extractEventProps: any = {} - // This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return "own" properties; nor Object.getPrototypeOf(event) as that *doesn't* return "own" properties, only inherited ones. - for (let prop in event) { - let property = event[prop as keyof DomEvent] - // Only copy over atomics, leave functions alone as these should be - // called as event.nativeEvent.fn() - if (typeof property !== 'function') extractEventProps[prop] = property - } + // Add native event props + let extractEventProps: any = {} + // This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return "own" properties; nor Object.getPrototypeOf(event) as that *doesn't* return "own" properties, only inherited ones. + for (let prop in event) { + let property = event[prop as keyof DomEvent] + // Only copy over atomics, leave functions alone as these should be + // called as event.nativeEvent.fn() + if (typeof property !== 'function') extractEventProps[prop] = property + } - let raycastEvent: ThreeEvent = { - ...hit, - ...extractEventProps, - pointer, - intersections, - stopped: localState.stopped, - delta, - unprojectedPoint, - ray: raycaster.ray, - camera: camera, - // Hijack stopPropagation, which just sets a flag - stopPropagation() { - // https://github.com/pmndrs/react-three-fiber/issues/596 - // Events are not allowed to stop propagation if the pointer has been captured - const capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId) - - // We only authorize stopPropagation... - if ( - // ...if this pointer hasn't been captured - !capturesForPointer || - // ... or if the hit object is capturing the pointer - capturesForPointer.has(hit.eventObject) - ) { - raycastEvent.stopped = localState.stopped = true - // Propagation is stopped, remove all other hover records - // An event handler is only allowed to flush other handlers if it is hovered itself + let raycastEvent: ThreeEvent = { + ...hit, + ...extractEventProps, + pointer, + intersections, + stopped: localState.stopped, + delta, + unprojectedPoint, + ray: raycaster.ray, + camera: camera, + // Hijack stopPropagation, which just sets a flag + stopPropagation() { + // https://github.com/pmndrs/react-three-fiber/issues/596 + // Events are not allowed to stop propagation if the pointer has been captured + const capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId) + + // We only authorize stopPropagation... if ( - internal.hovered.size && - Array.from(internal.hovered.values()).find((i) => i.eventObject === hit.eventObject) + // ...if this pointer hasn't been captured + !capturesForPointer || + // ... or if the hit object is capturing the pointer + capturesForPointer.has(hit.eventObject) ) { - // Objects cannot flush out higher up objects that have already caught the event - const higher = intersections.slice(0, intersections.indexOf(hit)) - cancelPointer([...higher, hit]) + raycastEvent.stopped = localState.stopped = true + // Propagation is stopped, remove all other hover records + // An event handler is only allowed to flush other handlers if it is hovered itself + if ( + internal.hovered.size && + Array.from(internal.hovered.values()).find((i) => i.eventObject === hit.eventObject) + ) { + // Objects cannot flush out higher up objects that have already caught the event + const higher = intersections.slice(0, intersections.indexOf(hit)) + cancelPointer([...higher, hit]) + } } - } - }, - // there should be a distinction between target and currentTarget - target: { hasPointerCapture, setPointerCapture, releasePointerCapture }, - currentTarget: { hasPointerCapture, setPointerCapture, releasePointerCapture }, - nativeEvent: event, - } + }, + // there should be a distinction between target and currentTarget + target: { hasPointerCapture, setPointerCapture, releasePointerCapture }, + currentTarget: { hasPointerCapture, setPointerCapture, releasePointerCapture }, + nativeEvent: event, + } - // Call subscribers - callback(raycastEvent) - // Event bubbling may be interrupted by stopPropagation - if (localState.stopped === true) break + // Call subscribers + callback(raycastEvent) + // Event bubbling may be interrupted by stopPropagation + if (localState.stopped === true) break + } } } return intersections @@ -380,10 +351,10 @@ export function createEvents(store: UseBoundStore) { ) ) { const eventObject = hoveredObj.eventObject - const instance = (eventObject as unknown as Instance).__r3f - const handlers = instance?.handlers + const instance = (eventObject as Instance['object']).__r3f internal.hovered.delete(makeId(hoveredObj)) if (instance?.eventCount) { + const handlers = instance.handlers // Clear out intersects, they are outdated by now const data = { ...hoveredObj, intersections } handlers.onPointerOut?.(data as ThreeEvent) @@ -395,7 +366,7 @@ export function createEvents(store: UseBoundStore) { function pointerMissed(event: MouseEvent, objects: THREE.Object3D[]) { for (let i = 0; i < objects.length; i++) { - const instance = (objects[i] as unknown as Instance).__r3f + const instance = (objects[i] as Instance['object']).__r3f instance?.handlers.onPointerMissed?.(event) } } @@ -459,11 +430,11 @@ export function createEvents(store: UseBoundStore) { function onIntersect(data: ThreeEvent) { const eventObject = data.eventObject - const instance = (eventObject as unknown as Instance).__r3f - const handlers = instance?.handlers + const instance = (eventObject as Instance['object']).__r3f // Check presence of handlers if (!instance?.eventCount) return + const handlers = instance.handlers /* MAYBE TODO, DELETE IF NOT: diff --git a/packages/fiber/src/core/hooks.tsx b/packages/fiber/src/core/hooks.tsx index a37090299f..bada964a2d 100644 --- a/packages/fiber/src/core/hooks.tsx +++ b/packages/fiber/src/core/hooks.tsx @@ -1,44 +1,27 @@ import * as THREE from 'three' import * as React from 'react' -import { StateSelector, EqualityChecker } from 'zustand' import { suspend, preload, clear } from 'suspend-react' -import { context, RootState, RenderCallback } from './store' -import { buildGraph, ObjectMap, is, useMutableCallback, useIsomorphicLayoutEffect } from './utils' -import { LocalState, Instance } from './renderer' - -export interface Loader extends THREE.Loader { - load( - url: string, - onLoad?: (result: T) => void, - onProgress?: (event: ProgressEvent) => void, - onError?: (event: unknown) => void, - ): unknown - loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise -} - -export type LoaderProto = new (...args: any) => Loader -export type LoaderReturnType> = T extends unknown - ? Awaited['loadAsync']>> - : T -// TODO: this isn't used anywhere, remove in v9 -export type LoaderResult = T extends any[] ? Loader : Loader -export type Extensions }> = (loader: T['prototype']) => void -export type ConditionalType = Child extends Parent ? Truthy : Falsy -export type BranchingReturn = ConditionalType +import { context, RootState, RenderCallback, RootStore } from './store' +import { buildGraph, ObjectMap, is, useMutableCallback, useIsomorphicLayoutEffect, isObject3D } from './utils' +import type { Instance } from './reconciler' /** - * Exposes an object's {@link LocalState}. - * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle + * Exposes an object's {@link Instance}. + * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useinstancehandle * * **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions. */ -export function useInstanceHandle(ref: React.MutableRefObject): React.MutableRefObject { - const instance = React.useRef(null!) - useIsomorphicLayoutEffect(() => void (instance.current = (ref.current as unknown as Instance).__r3f), [ref]) +export function useInstanceHandle(ref: React.RefObject): React.RefObject> { + const instance = React.useRef(null!) + React.useImperativeHandle(instance, () => (ref.current as unknown as Instance['object']).__r3f!, [ref]) return instance } -export function useStore() { +/** + * Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes). + * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore + */ +export function useStore(): RootStore { const store = React.useContext(context) if (!store) throw new Error('R3F: Hooks can only be used within the Canvas component!') return store @@ -49,9 +32,9 @@ export function useStore() { * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree */ export function useThree( - selector: StateSelector = (state) => state as unknown as T, - equalityFn?: EqualityChecker, -) { + selector: (state: RootState) => T = (state) => state as unknown as T, + equalityFn?: (state: T, newState: T) => boolean, +): T { return useStore()(selector, equalityFn) } @@ -74,36 +57,54 @@ export function useFrame(callback: RenderCallback, renderPriority: number = 0): * Returns a node graph of an object with named nodes & materials. * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph */ -export function useGraph(object: THREE.Object3D) { +export function useGraph(object: THREE.Object3D): ObjectMap { return React.useMemo(() => buildGraph(object), [object]) } +export interface Loader extends THREE.Loader { + load( + url: string | string[] | string[][], + onLoad?: (result: T, ...args: any[]) => void, + onProgress?: (event: ProgressEvent) => void, + onError?: (event: unknown) => void, + ): unknown +} + +export type LoaderProto = new (...args: any[]) => Loader +export type LoaderResult = T extends { scene: THREE.Object3D } ? T & ObjectMap : T +export type Extensions = (loader: Loader) => void + const memoizedLoaders = new WeakMap, Loader>() -function loadingFn>( - extensions?: Extensions, - onProgress?: (event: ProgressEvent) => void, -) { - return function (Proto: L, ...input: string[]) { - // Construct new loader and run extensions - let loader = memoizedLoaders.get(Proto)! - if (!loader) { - loader = new Proto() - memoizedLoaders.set(Proto, loader) +const isConstructor = (value: unknown): value is LoaderProto => + typeof value === 'function' && value?.prototype?.constructor === value + +function loadingFn(extensions?: Extensions, onProgress?: (event: ProgressEvent) => void) { + return async function (Proto: Loader | LoaderProto, ...input: string[]) { + let loader: Loader + + // Construct and cache loader if constructor was passed + if (isConstructor(Proto)) { + loader = memoizedLoaders.get(Proto)! + if (!loader) { + loader = new Proto() + memoizedLoaders.set(Proto, loader) + } + } else { + loader = Proto } + // Apply loader extensions if (extensions) extensions(loader) + // Go through the urls and load them return Promise.all( input.map( (input) => - new Promise((res, reject) => + new Promise>((res, reject) => loader.load( input, - (data) => { - if (data.scene) Object.assign(data, buildGraph(data.scene)) - res(data) - }, + (data) => res(isObject3D(data?.scene) ? Object.assign(data, buildGraph(data.scene)) : data), onProgress, (error) => reject(new Error(`Could not load ${input}: ${(error as ErrorEvent)?.message}`)), ), @@ -113,45 +114,46 @@ function loadingFn>( } } -type GLTFLike = { scene: THREE.Object3D } - /** * Synchronously loads and caches assets with a three loader. * * Note: this hook's caller must be wrapped with `React.Suspense` * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader */ -export function useLoader, R = LoaderReturnType>( - Proto: L, +export function useLoader( + loader: Loader | LoaderProto, input: U, - extensions?: Extensions, - onProgress?: (event: ProgressEvent) => void, -): U extends any[] ? BranchingReturn[] : BranchingReturn { + extensions?: Extensions, + onProgress?: (event: ProgressEvent) => void, +) { // Use suspense to load async assets const keys = (Array.isArray(input) ? input : [input]) as string[] - const results = suspend(loadingFn(extensions, onProgress), [Proto, ...keys], { equal: is.equ }) - // Return the object/s - return (Array.isArray(input) ? results : results[0]) as U extends any[] - ? BranchingReturn[] - : BranchingReturn + const results = suspend(loadingFn(extensions, onProgress), [loader, ...keys], { equal: is.equ }) + // Return the object(s) + return (Array.isArray(input) ? results : results[0]) as unknown as U extends any[] + ? LoaderResult[] + : LoaderResult } /** * Preloads an asset into cache as a side-effect. */ -useLoader.preload = function >( - Proto: L, +useLoader.preload = function ( + loader: Loader | LoaderProto, input: U, - extensions?: Extensions, -) { + extensions?: Extensions, +): void { const keys = (Array.isArray(input) ? input : [input]) as string[] - return preload(loadingFn(extensions), [Proto, ...keys]) + return preload(loadingFn(extensions), [loader, ...keys]) } /** * Removes a loaded asset from cache. */ -useLoader.clear = function >(Proto: L, input: U) { +useLoader.clear = function ( + loader: Loader | LoaderProto, + input: U, +): void { const keys = (Array.isArray(input) ? input : [input]) as string[] - return clear([Proto, ...keys]) + return clear([loader, ...keys]) } diff --git a/packages/fiber/src/core/index.tsx b/packages/fiber/src/core/index.tsx index ebf8c91fb3..3708548008 100644 --- a/packages/fiber/src/core/index.tsx +++ b/packages/fiber/src/core/index.tsx @@ -1,641 +1,42 @@ -import * as THREE from 'three' -import * as React from 'react' -import { ConcurrentRoot } from 'react-reconciler/constants' -import create, { UseBoundStore } from 'zustand' - -import * as ReactThreeFiber from '../three-types' -import { - Renderer, - createStore, - isRenderer, - context, - RootState, - Size, +export type { + Intersection, + ThreeEvent, + DomEvent, + Events, + EventHandlers, + FilterFunction, + ComputeFunction, + EventManager, +} from './events' +export { createEvents } from './events' +export * from './hooks' +export type { GlobalRenderCallback, GlobalEffectType } from './loop' +export { flushGlobalEffects, addEffect, addAfterEffect, addTail, invalidate, advance } from './loop' +export type { + AttachFnType, + AttachType, + ConstructorRepresentation, + Catalogue, + Args, + InstanceProps, + Instance, +} from './reconciler' +export { extend, reconciler } from './reconciler' +export type { ReconcilerRoot, GLProps, CameraProps, RenderProps, InjectState } from './renderer' +export { _roots, render, createRoot, unmountComponentAtNode, createPortal } from './renderer' +export type { + Subscription, Dpr, + Size, + Viewport, + RenderCallback, + Frameloop, Performance, - PrivateKeys, - privateKeys, + Renderer, + XRManager, + RootState, + RootStore, } from './store' -import { createRenderer, extend, prepare, Root } from './renderer' -import { createLoop, addEffect, addAfterEffect, addTail, flushGlobalEffects, Invalidate, Advance } from './loop' -import { getEventPriority, EventManager, ComputeFunction } from './events' -import { - is, - dispose, - calculateDpr, - EquConfig, - getRootState, - useIsomorphicLayoutEffect, - Camera, - updateCamera, - getColorManagement, - buildGraph, - _XRFrame, -} from './utils' -import { useStore } from './hooks' -import type { Properties } from '../three-types' - -type Canvas = HTMLCanvasElement | OffscreenCanvas - -const roots = new Map() -const { invalidate, advance }: { invalidate: Invalidate; advance: Advance } = createLoop(roots) -const { reconciler, applyProps } = createRenderer(roots, getEventPriority) -const shallowLoose = { objects: 'shallow', strict: false } as EquConfig - -type GLProps = - | Renderer - | ((canvas: Canvas) => Renderer) - | Partial | THREE.WebGLRendererParameters> - | undefined - -export type RenderProps = { - /** A threejs renderer instance or props that go into the default renderer */ - gl?: GLProps - /** Dimensions to fit the renderer to. Will measure canvas dimensions if omitted */ - size?: Size - /** - * Enables shadows (by default PCFsoft). Can accept `gl.shadowMap` options for fine-tuning, - * but also strings: 'basic' | 'percentage' | 'soft' | 'variance'. - * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap - */ - shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial - /** - * Disables three r139 color management. - * @see https://threejs.org/docs/#manual/en/introduction/Color-management - */ - legacy?: boolean - /** Switch off automatic sRGB color space and gamma correction */ - linear?: boolean - /** Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` */ - flat?: boolean - /** Creates an orthographic camera */ - orthographic?: boolean - /** - * R3F's render mode. Set to `demand` to only render on state change or `never` to take control. - * @see https://docs.pmnd.rs/react-three-fiber/advanced/scaling-performance#on-demand-rendering - */ - frameloop?: 'always' | 'demand' | 'never' - /** - * R3F performance options for adaptive performance. - * @see https://docs.pmnd.rs/react-three-fiber/advanced/scaling-performance#movement-regression - */ - performance?: Partial> - /** Target pixel ratio. Can clamp between a range: `[min, max]` */ - dpr?: Dpr - /** Props that go into the default raycaster */ - raycaster?: Partial - /** A `THREE.Scene` instance or props that go into the default scene */ - scene?: THREE.Scene | Partial> - /** A `THREE.Camera` instance or props that go into the default camera */ - camera?: ( - | Camera - | Partial< - ReactThreeFiber.Object3DNode & - ReactThreeFiber.Object3DNode & - ReactThreeFiber.Object3DNode - > - ) & { - /** Flags the camera as manual, putting projection into your own hands */ - manual?: boolean - } - /** An R3F event manager to manage elements' pointer events */ - events?: (store: UseBoundStore) => EventManager - /** Callback after the canvas has rendered (but not yet committed) */ - onCreated?: (state: RootState) => void - /** Response for pointer clicks that have missed any target */ - onPointerMissed?: (event: MouseEvent) => void -} - -const createRendererInstance = (gl: GLProps, canvas: TCanvas): THREE.WebGLRenderer => { - const customRenderer = (typeof gl === 'function' ? gl(canvas as unknown as Canvas) : gl) as THREE.WebGLRenderer - if (isRenderer(customRenderer)) return customRenderer - else - return new THREE.WebGLRenderer({ - powerPreference: 'high-performance', - canvas: canvas, - antialias: true, - alpha: true, - ...gl, - }) -} - -export type ReconcilerRoot = { - configure: (config?: RenderProps) => ReconcilerRoot - render: (element: React.ReactNode) => UseBoundStore - unmount: () => void -} - -function computeInitialSize(canvas: Canvas, defaultSize?: Size): Size { - const defaultStyle = typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement - - if (defaultSize) { - const { width, height, top, left, updateStyle = defaultStyle } = defaultSize - return { width, height, top, left, updateStyle } - } else if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement && canvas.parentElement) { - const { width, height, top, left } = canvas.parentElement.getBoundingClientRect() - return { width, height, top, left, updateStyle: defaultStyle } - } else if (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) { - return { - width: canvas.width, - height: canvas.height, - top: 0, - left: 0, - updateStyle: defaultStyle, - } - } - - return { width: 0, height: 0, top: 0, left: 0 } -} - -function createRoot(canvas: TCanvas): ReconcilerRoot { - // Check against mistaken use of createRoot - const prevRoot = roots.get(canvas) - const prevFiber = prevRoot?.fiber - const prevStore = prevRoot?.store - - if (prevRoot) console.warn('R3F.createRoot should only be called once!') - - // Report when an error was detected in a previous render - // https://github.com/pmndrs/react-three-fiber/pull/2261 - const logRecoverableError = - typeof reportError === 'function' - ? // In modern browsers, reportError will dispatch an error event, - // emulating an uncaught JavaScript error. - reportError - : // In older browsers and test environments, fallback to console.error. - console.error - - // Create store - const store = prevStore || createStore(invalidate, advance) - // Create renderer - const fiber = - prevFiber || reconciler.createContainer(store, ConcurrentRoot, null, false, null, '', logRecoverableError, null) - // Map it - if (!prevRoot) roots.set(canvas, { fiber, store }) - - // Locals - let onCreated: ((state: RootState) => void) | undefined - let configured = false - let lastCamera: RenderProps['camera'] - - return { - configure(props: RenderProps = {}) { - let { - gl: glConfig, - size: propsSize, - scene: sceneOptions, - events, - onCreated: onCreatedCallback, - shadows = false, - linear = false, - flat = false, - legacy = false, - orthographic = false, - frameloop = 'always', - dpr = [1, 2], - performance, - raycaster: raycastOptions, - camera: cameraOptions, - onPointerMissed, - } = props - - let state = store.getState() - - // Set up renderer (one time only!) - let gl = state.gl - if (!state.gl) state.set({ gl: (gl = createRendererInstance(glConfig, canvas)) }) - - // Set up raycaster (one time only!) - let raycaster = state.raycaster - if (!raycaster) state.set({ raycaster: (raycaster = new THREE.Raycaster()) }) - - // Set raycaster options - const { params, ...options } = raycastOptions || {} - if (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster as any, { ...options }) - if (!is.equ(params, raycaster.params, shallowLoose)) - applyProps(raycaster as any, { params: { ...raycaster.params, ...params } }) - - // Create default camera, don't overwrite any user-set state - if (!state.camera || (state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose))) { - lastCamera = cameraOptions - const isCamera = cameraOptions instanceof THREE.Camera - const camera = isCamera - ? (cameraOptions as Camera) - : orthographic - ? new THREE.OrthographicCamera(0, 0, 0, 0, 0.1, 1000) - : new THREE.PerspectiveCamera(75, 0, 0.1, 1000) - if (!isCamera) { - camera.position.z = 5 - if (cameraOptions) { - applyProps(camera as any, cameraOptions as any) - // Preserve user-defined frustum if possible - // https://github.com/pmndrs/react-three-fiber/issues/3160 - if ( - 'aspect' in cameraOptions || - 'left' in cameraOptions || - 'right' in cameraOptions || - 'bottom' in cameraOptions || - 'top' in cameraOptions - ) { - ;(camera as any).manual = true - camera.updateProjectionMatrix() - } - } - // Always look at center by default - if (!state.camera && !cameraOptions?.rotation) camera.lookAt(0, 0, 0) - } - state.set({ camera }) - - // Configure raycaster - // https://github.com/pmndrs/react-xr/issues/300 - raycaster.camera = camera - } - - // Set up scene (one time only!) - if (!state.scene) { - let scene: THREE.Scene - - if (sceneOptions instanceof THREE.Scene) { - scene = sceneOptions - } else { - scene = new THREE.Scene() - if (sceneOptions) applyProps(scene as any, sceneOptions as any) - } - - state.set({ scene: prepare(scene) }) - } - - // Set up XR (one time only!) - if (!state.xr) { - // Handle frame behavior in WebXR - const handleXRFrame = (timestamp: number, frame?: _XRFrame) => { - const state = store.getState() - if (state.frameloop === 'never') return - advance(timestamp, true, state, frame) - } - - // Toggle render switching on session - const handleSessionChange = () => { - const state = store.getState() - state.gl.xr.enabled = state.gl.xr.isPresenting - - state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null) - if (!state.gl.xr.isPresenting) invalidate(state) - } - - // WebXR session manager - const xr = { - connect() { - const gl = store.getState().gl - gl.xr.addEventListener('sessionstart', handleSessionChange) - gl.xr.addEventListener('sessionend', handleSessionChange) - }, - disconnect() { - const gl = store.getState().gl - gl.xr.removeEventListener('sessionstart', handleSessionChange) - gl.xr.removeEventListener('sessionend', handleSessionChange) - }, - } - - // Subscribe to WebXR session events - if (typeof gl.xr?.addEventListener === 'function') xr.connect() - state.set({ xr }) - } - - // Set shadowmap - if (gl.shadowMap) { - const oldEnabled = gl.shadowMap.enabled - const oldType = gl.shadowMap.type - gl.shadowMap.enabled = !!shadows - - if (is.boo(shadows)) { - gl.shadowMap.type = THREE.PCFSoftShadowMap - } else if (is.str(shadows)) { - const types = { - basic: THREE.BasicShadowMap, - percentage: THREE.PCFShadowMap, - soft: THREE.PCFSoftShadowMap, - variance: THREE.VSMShadowMap, - } - gl.shadowMap.type = types[shadows] ?? THREE.PCFSoftShadowMap - } else if (is.obj(shadows)) { - Object.assign(gl.shadowMap, shadows) - } - - if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type) gl.shadowMap.needsUpdate = true - } - - // Safely set color management if available. - // Avoid accessing THREE.ColorManagement to play nice with older versions - const ColorManagement = getColorManagement() - if (ColorManagement) { - if ('enabled' in ColorManagement) ColorManagement.enabled = !legacy - else if ('legacyMode' in ColorManagement) ColorManagement.legacyMode = legacy - } - - if (!configured) { - // Set color space and tonemapping preferences, once - const LinearEncoding = 3000 - const sRGBEncoding = 3001 - applyProps( - gl as any, - { - outputEncoding: linear ? LinearEncoding : sRGBEncoding, - toneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping, - } as Partial>, - ) - } - - // Update color management state - if (state.legacy !== legacy) state.set(() => ({ legacy })) - if (state.linear !== linear) state.set(() => ({ linear })) - if (state.flat !== flat) state.set(() => ({ flat })) - - // Set gl props - if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, gl, shallowLoose)) - applyProps(gl as any, glConfig as any) - // Store events internally - if (events && !state.events.handlers) state.set({ events: events(store) }) - // Check size, allow it to take on container bounds initially - const size = computeInitialSize(canvas, propsSize) - if (!is.equ(size, state.size, shallowLoose)) { - state.setSize(size.width, size.height, size.updateStyle, size.top, size.left) - } - // Check pixelratio - if (dpr && state.viewport.dpr !== calculateDpr(dpr)) state.setDpr(dpr) - // Check frameloop - if (state.frameloop !== frameloop) state.setFrameloop(frameloop) - // Check pointer missed - if (!state.onPointerMissed) state.set({ onPointerMissed }) - // Check performance - if (performance && !is.equ(performance, state.performance, shallowLoose)) - state.set((state) => ({ performance: { ...state.performance, ...performance } })) - - // Set locals - onCreated = onCreatedCallback - configured = true - - return this - }, - render(children: React.ReactNode) { - // The root has to be configured before it can be rendered - if (!configured) this.configure() - - reconciler.updateContainer( - , - fiber, - null, - () => undefined, - ) - return store - }, - unmount() { - unmountComponentAtNode(canvas) - }, - } -} - -function render( - children: React.ReactNode, - canvas: TCanvas, - config: RenderProps, -): UseBoundStore { - console.warn('R3F.render is no longer supported in React 18. Use createRoot instead!') - const root = createRoot(canvas) - root.configure(config) - return root.render(children) -} - -function Provider({ - store, - children, - onCreated, - rootElement, -}: { - onCreated?: (state: RootState) => void - store: UseBoundStore - children: React.ReactNode - rootElement: TCanvas -}) { - useIsomorphicLayoutEffect(() => { - const state = store.getState() - // Flag the canvas active, rendering will now begin - state.set((state) => ({ internal: { ...state.internal, active: true } })) - // Notifiy that init is completed, the scene graph exists, but nothing has yet rendered - if (onCreated) onCreated(state) - // Connect events to the targets parent, this is done to ensure events are registered on - // a shared target, and not on the canvas itself - if (!store.getState().events.connected) state.events.connect?.(rootElement) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) - return {children} -} - -function unmountComponentAtNode(canvas: TCanvas, callback?: (canvas: TCanvas) => void) { - const root = roots.get(canvas) - const fiber = root?.fiber - if (fiber) { - const state = root?.store.getState() - if (state) state.internal.active = false - reconciler.updateContainer(null, fiber, null, () => { - if (state) { - setTimeout(() => { - try { - state.events.disconnect?.() - state.gl?.renderLists?.dispose?.() - state.gl?.forceContextLoss?.() - if (state.gl?.xr) state.xr.disconnect() - dispose(state) - roots.delete(canvas) - if (callback) callback(canvas) - } catch (e) { - /* ... */ - } - }, 500) - } - }) - } -} - -export type InjectState = Partial< - Omit & { - events?: { - enabled?: boolean - priority?: number - compute?: ComputeFunction - connected?: any - } - size?: Size - } -> - -function createPortal(children: React.ReactNode, container: THREE.Object3D, state?: InjectState): JSX.Element { - return -} - -function Portal({ - state = {}, - children, - container, -}: { - children: React.ReactNode - state?: InjectState - container: THREE.Object3D -}): JSX.Element { - /** This has to be a component because it would not be able to call useThree/useStore otherwise since - * if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger - * the "R3F hooks can only be used within the Canvas component!" warning: - * - * {createPortal(...)} */ - const { events, size, ...rest } = state - const previousRoot = useStore() - const [raycaster] = React.useState(() => new THREE.Raycaster()) - const [pointer] = React.useState(() => new THREE.Vector2()) - - const inject = React.useCallback( - (rootState: RootState, injectState: RootState) => { - const intersect: Partial = { ...rootState } // all prev state props - - // Only the fields of "rootState" that do not differ from injectState - // Some props should be off-limits - // Otherwise filter out the props that are different and let the inject layer take precedence - Object.keys(rootState).forEach((key) => { - if ( - // Some props should be off-limits - privateKeys.includes(key as PrivateKeys) || - // Otherwise filter out the props that are different and let the inject layer take precedence - // Unless the inject layer props is undefined, then we keep the root layer - (rootState[key as keyof RootState] !== injectState[key as keyof RootState] && - injectState[key as keyof RootState]) - ) { - delete intersect[key as keyof RootState] - } - }) - - let viewport = undefined - if (injectState && size) { - const camera = injectState.camera - // Calculate the override viewport, if present - viewport = rootState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size) - // Update the portal camera, if it differs from the previous layer - if (camera !== rootState.camera) updateCamera(camera, size) - } - - return { - // The intersect consists of the previous root state - ...intersect, - // Portals have their own scene, which forms the root, a raycaster and a pointer - scene: container as THREE.Scene, - raycaster, - pointer, - mouse: pointer, - // Their previous root is the layer before it - previousRoot, - // Events, size and viewport can be overridden by the inject layer - events: { ...rootState.events, ...injectState?.events, ...events }, - size: { ...rootState.size, ...size }, - viewport: { ...rootState.viewport, ...viewport }, - ...rest, - } as RootState - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [state], - ) - - const [usePortalStore] = React.useState(() => { - // Create a mirrored store, based on the previous root with a few overrides ... - const previousState = previousRoot.getState() - const store = create((set, get) => ({ - ...previousState, - scene: container as THREE.Scene, - raycaster, - pointer, - mouse: pointer, - previousRoot, - events: { ...previousState.events, ...events }, - size: { ...previousState.size, ...size }, - ...rest, - // Set and get refer to this root-state - set, - get, - // Layers are allowed to override events - setEvents: (events: Partial>) => - set((state) => ({ ...state, events: { ...state.events, ...events } })), - })) - return store - }) - - React.useEffect(() => { - // Subscribe to previous root-state and copy changes over to the mirrored portal-state - const unsub = previousRoot.subscribe((prev) => usePortalStore.setState((state) => inject(prev, state))) - return () => { - unsub() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [inject]) - - React.useEffect(() => { - usePortalStore.setState((injectState) => inject(previousRoot.getState(), injectState)) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [inject]) - - React.useEffect(() => { - return () => { - usePortalStore.destroy() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) - - return ( - <> - {reconciler.createPortal( - {children}, - usePortalStore, - null, - )} - - ) -} - -/** - * Force React to flush any updates inside the provided callback synchronously and immediately. - * All the same caveats documented for react-dom's `flushSync` apply here (see https://react.dev/reference/react-dom/flushSync). - * Nevertheless, sometimes one needs to render synchronously, for example to keep DOM and 3D changes in lock-step without - * having to revert to a non-React solution. - */ -function flushSync(fn: () => R): R { - // `flushSync` implementation only takes one argument. I don't know what's up with the type declaration for it. - return reconciler.flushSync(fn, undefined) -} - -reconciler.injectIntoDevTools({ - bundleType: process.env.NODE_ENV === 'production' ? 0 : 1, - rendererPackageName: '@react-three/fiber', - version: React.version, -}) - -const act = (React as any).unstable_act - -export * from './hooks' -export { - context, - render, - createRoot, - unmountComponentAtNode, - createPortal, - reconciler, - applyProps, - dispose, - invalidate, - advance, - extend, - addEffect, - addAfterEffect, - addTail, - flushGlobalEffects, - flushSync, - getRootState, - act, - buildGraph, - roots as _roots, -} +export { context } from './store' +export type { ObjectMap, Camera, Disposable, Act } from './utils' +export { applyProps, getRootState, dispose, act, buildGraph } from './utils' diff --git a/packages/fiber/src/core/loop.ts b/packages/fiber/src/core/loop.ts index 7915467b4b..ac68dd9251 100644 --- a/packages/fiber/src/core/loop.ts +++ b/packages/fiber/src/core/loop.ts @@ -1,9 +1,10 @@ -import { Root } from './renderer' -import { RootState, Subscription } from './store' -import { _XRFrame } from './utils' +import { _roots } from './renderer' +import type { RootState, Subscription } from './store' -export type GlobalRenderCallback = (timeStamp: number) => void -type SubItem = { callback: GlobalRenderCallback } +export type GlobalRenderCallback = (timestamp: number) => void +interface SubItem { + callback: GlobalRenderCallback +} function createSubs(callback: GlobalRenderCallback, subs: Set): () => void { const sub = { callback } @@ -11,10 +12,9 @@ function createSubs(callback: GlobalRenderCallback, subs: Set): () => v return () => void subs.delete(sub) } -let i -let globalEffects: Set = new Set() -let globalAfterEffects: Set = new Set() -let globalTailEffects: Set = new Set() +const globalEffects = new Set() +const globalAfterEffects = new Set() +const globalTailEffects = new Set() /** * Adds a global render callback which is called each frame. @@ -56,119 +56,113 @@ export function flushGlobalEffects(type: GlobalEffectType, timestamp: number): v let subscribers: Subscription[] let subscription: Subscription -function render(timestamp: number, state: RootState, frame?: _XRFrame) { + +function update(timestamp: number, state: RootState, frame?: XRFrame) { // Run local effects let delta = state.clock.getDelta() + // In frameloop='never' mode, clock times are updated using the provided timestamp if (state.frameloop === 'never' && typeof timestamp === 'number') { delta = timestamp - state.clock.elapsedTime state.clock.oldTime = state.clock.elapsedTime state.clock.elapsedTime = timestamp } + // Call subscribers (useFrame) subscribers = state.internal.subscribers - for (i = 0; i < subscribers.length; i++) { + for (let i = 0; i < subscribers.length; i++) { subscription = subscribers[i] subscription.ref.current(subscription.store.getState(), delta, frame) } + // Render content if (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera) + // Decrease frame count state.internal.frames = Math.max(0, state.internal.frames - 1) return state.frameloop === 'always' ? 1 : state.internal.frames } -export type Invalidate = (state?: RootState, frames?: number) => void -export type Advance = (timestamp: number, runGlobalEffects?: boolean, state?: RootState, frame?: _XRFrame) => void - -interface Loop { - loop: (timestamp: number) => void - /** - * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state. - * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate - */ - invalidate: Invalidate - /** - * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`. - * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance - */ - advance: Advance -} - -export function createLoop(roots: Map): Loop { - let running = false - let useFrameInProgress = false - let repeat: number - let frame: number - let state: RootState - - function loop(timestamp: number): void { - frame = requestAnimationFrame(loop) - running = true - repeat = 0 - - // Run effects - flushGlobalEffects('before', timestamp) - - // Render all roots - useFrameInProgress = true - for (const root of roots.values()) { - state = root.store.getState() - // If the frameloop is invalidated, do not run another frame - if ( - state.internal.active && - (state.frameloop === 'always' || state.internal.frames > 0) && - !state.gl.xr?.isPresenting - ) { - repeat += render(timestamp, state) - } +let running = false +let useFrameInProgress = false +let repeat: number +let frame: number +let state: RootState + +export function loop(timestamp: number): void { + frame = requestAnimationFrame(loop) + running = true + repeat = 0 + + // Run effects + flushGlobalEffects('before', timestamp) + + // Render all roots + useFrameInProgress = true + for (const root of _roots.values()) { + state = root.store.getState() + + // If the frameloop is invalidated, do not run another frame + if ( + state.internal.active && + (state.frameloop === 'always' || state.internal.frames > 0) && + !state.gl.xr?.isPresenting + ) { + repeat += update(timestamp, state) } - useFrameInProgress = false + } + useFrameInProgress = true - // Run after-effects - flushGlobalEffects('after', timestamp) + // Run after-effects + flushGlobalEffects('after', timestamp) - // Stop the loop if nothing invalidates it - if (repeat === 0) { - // Tail call effects, they are called when rendering stops - flushGlobalEffects('tail', timestamp) + // Stop the loop if nothing invalidates it + if (repeat === 0) { + // Tail call effects, they are called when rendering stops + flushGlobalEffects('tail', timestamp) - // Flag end of operation - running = false - return cancelAnimationFrame(frame) - } + // Flag end of operation + running = false + return cancelAnimationFrame(frame) } +} - function invalidate(state?: RootState, frames = 1): void { - if (!state) return roots.forEach((root) => invalidate(root.store.getState(), frames)) - if (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never') return - if (frames > 1) { - // legacy support for people using frames parameters - // Increase frames, do not go higher than 60 - state.internal.frames = Math.min(60, state.internal.frames + frames) +/** + * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state. + * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate + */ +export function invalidate(state?: RootState, frames = 1): void { + if (!state) return _roots.forEach((root) => invalidate(root.store.getState(), frames)) + if (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never') return + + if (frames > 1) { + // legacy support for people using frames parameters + // Increase frames, do not go higher than 60 + state.internal.frames = Math.min(60, state.internal.frames + frames) + } else { + if (useFrameInProgress) { + //called from within a useFrame, it means the user wants an additional frame + state.internal.frames = 2 } else { - if (useFrameInProgress) { - //called from within a useFrame, it means the user wants an additional frame - state.internal.frames = 2 - } else { - //the user need a new frame, no need to increment further than 1 - state.internal.frames = 1 - } - } - - // If the render-loop isn't active, start it - if (!running) { - running = true - requestAnimationFrame(loop) + //the user need a new frame, no need to increment further than 1 + state.internal.frames = 1 } } - function advance(timestamp: number, runGlobalEffects: boolean = true, state?: RootState, frame?: _XRFrame): void { - if (runGlobalEffects) flushGlobalEffects('before', timestamp) - if (!state) for (const root of roots.values()) render(timestamp, root.store.getState()) - else render(timestamp, state, frame) - if (runGlobalEffects) flushGlobalEffects('after', timestamp) + // If the render-loop isn't active, start it + if (!running) { + running = true + requestAnimationFrame(loop) } +} - return { loop, invalidate, advance } +/** + * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`. + * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance + */ +export function advance(timestamp: number, runGlobalEffects: boolean = true, state?: RootState, frame?: XRFrame): void { + if (runGlobalEffects) flushGlobalEffects('before', timestamp) + if (!state) for (const root of _roots.values()) update(timestamp, root.store.getState()) + else update(timestamp, state, frame) + if (runGlobalEffects) flushGlobalEffects('after', timestamp) } diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx new file mode 100644 index 0000000000..566621bf6a --- /dev/null +++ b/packages/fiber/src/core/reconciler.tsx @@ -0,0 +1,647 @@ +import * as THREE from 'three' +import * as React from 'react' +import Reconciler from 'react-reconciler' +import { + NoEventPriority, + ContinuousEventPriority, + DiscreteEventPriority, + DefaultEventPriority, +} from 'react-reconciler/constants' +import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler' +import { + diffProps, + applyProps, + invalidateInstance, + attach, + detach, + prepare, + isObject3D, + findInitialRoot, + IsAllOptional, +} from './utils' +import type { RootStore } from './store' +import { removeInteractivity, type EventHandlers } from './events' +import type { ThreeElement } from '../three-types' + +// TODO: upstream to DefinitelyTyped for React 19 +// https://github.com/facebook/react/issues/28956 +type EventPriority = number + +type Fiber = Omit & { refCleanup: null | (() => void); alternate: Fiber | null } + +const createReconciler = Reconciler as unknown as < + Type, + Props, + Container, + Instance, + TextInstance, + SuspenseInstance, + HydratableInstance, + FormInstance, + PublicInstance, + HostContext, + ChildSet, + TimeoutHandle, + NoTimeout, + TransitionStatus, +>( + config: Omit< + Reconciler.HostConfig< + Type, + Props, + Container, + Instance, + TextInstance, + SuspenseInstance, + HydratableInstance, + PublicInstance, + HostContext, + null, // updatePayload + ChildSet, + TimeoutHandle, + NoTimeout + >, + 'getCurrentEventPriority' | 'prepareUpdate' | 'commitUpdate' + > & { + /** + * This method should mutate the `instance` and perform prop diffing if needed. + * + * The `internalHandle` data structure is meant to be opaque. If you bend the rules and rely on its internal fields, be aware that it may change significantly between versions. You're taking on additional maintenance risk by reading from it, and giving up all guarantees if you write something to it. + */ + commitUpdate?( + instance: Instance, + type: Type, + prevProps: Props, + nextProps: Props, + internalHandle: Reconciler.OpaqueHandle, + ): void + + // Undocumented + // https://github.com/facebook/react/pull/26722 + NotPendingTransition: TransitionStatus | null + // https://github.com/facebook/react/pull/28751 + setCurrentUpdatePriority(newPriority: EventPriority): void + getCurrentUpdatePriority(): EventPriority + resolveUpdatePriority(): EventPriority + // https://github.com/facebook/react/pull/28804 + resetFormInstance(form: FormInstance): void + // https://github.com/facebook/react/pull/25105 + requestPostPaintCallback(callback: (time: number) => void): void + // https://github.com/facebook/react/pull/26025 + shouldAttemptEagerTransition(): boolean + + /** + * This method is called during render to determine if the Host Component type and props require some kind of loading process to complete before committing an update. + */ + maySuspendCommit(type: Type, props: Props): boolean + /** + * This method may be called during render if the Host Component type and props might suspend a commit. It can be used to initiate any work that might shorten the duration of a suspended commit. + */ + preloadInstance(type: Type, props: Props): boolean + /** + * This method is called just before the commit phase. Use it to set up any necessary state while any Host Components that might suspend this commit are evaluated to determine if the commit must be suspended. + */ + startSuspendingCommit(): void + /** + * This method is called after `startSuspendingCommit` for each Host Component that indicated it might suspend a commit. + */ + suspendInstance(type: Type, props: Props): void + /** + * This method is called after all `suspendInstance` calls are complete. + * + * Return `null` if the commit can happen immediately. + * + * Return `(initiateCommit: Function) => Function` if the commit must be suspended. The argument to this callback will initiate the commit when called. The return value is a cancellation function that the Reconciler can use to abort the commit. + * + */ + waitForCommitToBeReady(): ((initiateCommit: Function) => Function) | null + }, +) => Reconciler.Reconciler + +declare module 'react-reconciler/constants' { + const NoEventPriority = 0 +} + +export interface Root { + fiber: Reconciler.FiberRoot + store: RootStore +} + +export type AttachFnType = (parent: any, self: O) => () => void +export type AttachType = string | AttachFnType + +export type ConstructorRepresentation = new (...args: any[]) => T + +export interface Catalogue { + [name: string]: ConstructorRepresentation +} + +// TODO: handle constructor overloads +// https://github.com/pmndrs/react-three-fiber/pull/2931 +// https://github.com/microsoft/TypeScript/issues/37079 +export type Args = T extends ConstructorRepresentation + ? T extends typeof THREE.Color + ? [r: number, g: number, b: number] | [color: THREE.ColorRepresentation] + : ConstructorParameters + : any[] + +type ArgsProp

= P extends ConstructorRepresentation + ? IsAllOptional> extends true + ? { args?: Args

} + : { args: Args

} + : { args: unknown[] } + +export type InstanceProps = ArgsProp

& { + object?: T + visible?: boolean + dispose?: null + attach?: AttachType + onUpdate?: (self: T) => void +} + +export interface Instance { + root: RootStore + type: string + parent: Instance | null + children: Instance[] + props: InstanceProps & Record + object: O & { __r3f?: Instance } + eventCount: number + handlers: Partial + attach?: AttachType + previousAttach?: any + isHidden: boolean +} + +interface HostConfig { + type: string + props: Instance['props'] + container: RootStore + instance: Instance + textInstance: void + suspenseInstance: Instance + hydratableInstance: never + formInstance: never + publicInstance: Instance['object'] + hostContext: {} + childSet: never + timeoutHandle: number | undefined + noTimeout: -1 + TransitionStatus: null +} + +export const catalogue: Catalogue = {} + +let i = 0 + +const isConstructor = (object: unknown): object is ConstructorRepresentation => typeof object === 'function' + +export function extend(objects: T): React.ExoticComponent> +export function extend(objects: T): void +export function extend( + objects: T, +): React.ExoticComponent> | void { + if (isConstructor(objects)) { + const Component = `${i++}` + catalogue[Component] = objects + return Component as any + } else { + Object.assign(catalogue, objects) + } +} + +function validateInstance(type: string, props: HostConfig['props']): void { + // Get target from catalogue + const name = `${type[0].toUpperCase()}${type.slice(1)}` + const target = catalogue[name] + + // Validate element target + if (type !== 'primitive' && !target) + throw new Error( + `R3F: ${name} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`, + ) + + // Validate primitives + if (type === 'primitive' && !props.object) throw new Error(`R3F: Primitives without 'object' are invalid!`) + + // Throw if an object or literal was passed for args + if (props.args !== undefined && !Array.isArray(props.args)) throw new Error('R3F: The args prop must be an array!') +} + +function createInstance(type: string, props: HostConfig['props'], root: RootStore): HostConfig['instance'] { + validateInstance(type, props) + + // Regenerate the R3F instance for primitives to simulate a new object + if (type === 'primitive' && props.object?.__r3f) delete props.object.__r3f + + return prepare(props.object, root, type, props) +} + +function hideInstance(instance: HostConfig['instance']): void { + if (!instance.isHidden) { + if (instance.props.attach && instance.parent?.object) { + detach(instance.parent, instance) + } else if (isObject3D(instance.object)) { + instance.object.visible = false + } + + instance.isHidden = true + invalidateInstance(instance) + } +} + +function unhideInstance(instance: HostConfig['instance']): void { + if (instance.isHidden) { + if (instance.props.attach && instance.parent?.object) { + attach(instance.parent, instance) + } else if (isObject3D(instance.object) && instance.props.visible !== false) { + instance.object.visible = true + } + + instance.isHidden = false + invalidateInstance(instance) + } +} + +// https://github.com/facebook/react/issues/20271 +// This will make sure events and attach are only handled once when trees are complete +function handleContainerEffects(parent: Instance, child: Instance, beforeChild?: Instance) { + // Bail if tree isn't mounted or parent is not a container. + // This ensures that the tree is finalized and React won't discard results to Suspense + const state = child.root.getState() + if (!parent.parent && parent.object !== state.scene) return + + // Create & link object on first run + if (!child.object) { + // Get target from catalogue + const name = `${child.type[0].toUpperCase()}${child.type.slice(1)}` + const target = catalogue[name] + + // Create object + child.object = child.props.object ?? new target(...(child.props.args ?? [])) + child.object.__r3f = child + + // Set initial props + applyProps(child.object, child.props) + } + + // Append instance + if (child.props.attach) { + attach(parent, child) + } else if (isObject3D(child.object) && isObject3D(parent.object)) { + const childIndex = parent.object.children.indexOf(beforeChild?.object) + if (beforeChild && childIndex !== -1) { + child.object.parent = parent.object + parent.object.children.splice(childIndex, 0, child.object) + child.object.dispatchEvent({ type: 'added' }) + parent.object.dispatchEvent({ type: 'childadded', child: child.object }) + } else { + parent.object.add(child.object) + } + } + + // Link subtree + for (const childInstance of child.children) handleContainerEffects(child, childInstance) + + // Tree was updated, request a frame + invalidateInstance(child) +} + +function appendChild(parent: HostConfig['instance'], child: HostConfig['instance'] | HostConfig['textInstance']) { + if (!child) return + + // Link instances + child.parent = parent + parent.children.push(child) + + // Attach tree once complete + handleContainerEffects(parent, child) +} + +function insertBefore( + parent: HostConfig['instance'], + child: HostConfig['instance'] | HostConfig['textInstance'], + beforeChild: HostConfig['instance'] | HostConfig['textInstance'], +) { + if (!child || !beforeChild) return + + // Link instances + child.parent = parent + const childIndex = parent.children.indexOf(beforeChild) + if (childIndex !== -1) parent.children.splice(childIndex, 0, child) + else parent.children.push(child) + + // Attach tree once complete + handleContainerEffects(parent, child, beforeChild) +} + +function disposeOnIdle(object: any) { + if (typeof object.dispose === 'function') { + const handleDispose = () => { + try { + object.dispose() + } catch { + // no-op + } + } + + // In a testing environment, cleanup immediately + if (typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined') handleDispose() + // Otherwise, using a real GPU so schedule cleanup to prevent stalls + else scheduleCallback(idlePriority, handleDispose) + } +} + +function removeChild( + parent: HostConfig['instance'], + child: HostConfig['instance'] | HostConfig['textInstance'], + dispose?: boolean, +) { + if (!child) return + + // Unlink instances + child.parent = null + const childIndex = parent.children.indexOf(child) + if (childIndex !== -1) parent.children.splice(childIndex, 1) + + // Eagerly tear down tree + if (child.props.attach) { + detach(parent, child) + } else if (isObject3D(child.object) && isObject3D(parent.object)) { + parent.object.remove(child.object) + removeInteractivity(findInitialRoot(child), child.object) + } + + // Allow objects to bail out of unmount disposal with dispose={null} + const shouldDispose = child.props.dispose !== null && dispose !== false + + // Recursively remove instance children + for (let i = child.children.length - 1; i >= 0; i--) { + const node = child.children[i] + removeChild(child, node, shouldDispose) + } + child.children.length = 0 + + // Unlink instance object + delete child.object.__r3f + + // Dispose object whenever the reconciler feels like it. + // Never dispose of primitives because their state may be kept outside of React! + // In order for an object to be able to dispose it + // - has a dispose method + // - cannot be a + // - cannot be a THREE.Scene, because three has broken its own API + if (shouldDispose && child.type !== 'primitive' && child.object.type !== 'Scene') { + disposeOnIdle(child.object) + } + + // Tree was updated, request a frame for top-level instance + if (dispose === undefined) invalidateInstance(child) +} + +function setFiberRef(fiber: Fiber, publicInstance: HostConfig['publicInstance']): void { + for (const _fiber of [fiber, fiber.alternate]) { + if (_fiber !== null) { + if (typeof _fiber.ref === 'function') { + _fiber.refCleanup?.() + const cleanup = _fiber.ref(publicInstance) + if (typeof cleanup === 'function') _fiber.refCleanup = cleanup + } else if (_fiber.ref) { + _fiber.ref.current = publicInstance + } + } + } +} + +const reconstructed: [oldInstance: HostConfig['instance'], props: HostConfig['props'], fiber: Fiber][] = [] + +function swapInstances(): void { + // Detach instance + for (const [instance] of reconstructed) { + const parent = instance.parent + if (parent) { + if (instance.props.attach) { + detach(parent, instance) + } else if (isObject3D(instance.object) && isObject3D(parent.object)) { + parent.object.remove(instance.object) + } + + for (const child of instance.children) { + if (child.props.attach) { + detach(instance, child) + } else if (isObject3D(child.object) && isObject3D(instance.object)) { + instance.object.remove(child.object) + } + } + } + + // If the old instance is hidden, we need to unhide it. + // React assumes it can discard instances since they're pure for DOM. + // This isn't true for us since our lifetimes are impure and longliving. + // So, we manually check if an instance was hidden and unhide it. + if (instance.isHidden) unhideInstance(instance) + + // Dispose of old object if able + if (instance.object.__r3f) delete instance.object.__r3f + if (instance.type !== 'primitive') disposeOnIdle(instance.object) + } + + // Update instance + for (const [instance, props, fiber] of reconstructed) { + instance.props = props + + const parent = instance.parent + if (parent) { + // Get target from catalogue + const name = `${instance.type[0].toUpperCase()}${instance.type.slice(1)}` + const target = catalogue[name] + + // Create object + instance.object = instance.props.object ?? new target(...(instance.props.args ?? [])) + instance.object.__r3f = instance + setFiberRef(fiber, instance.object) + + // Set initial props + applyProps(instance.object, instance.props) + + if (instance.props.attach) { + attach(parent, instance) + } else if (isObject3D(instance.object) && isObject3D(parent.object)) { + parent.object.add(instance.object) + } + + for (const child of instance.children) { + if (child.props.attach) { + attach(instance, child) + } else if (isObject3D(child.object) && isObject3D(instance.object)) { + instance.object.add(child.object) + } + } + + // Tree was updated, request a frame + invalidateInstance(instance) + } + } + + reconstructed.length = 0 +} + +// Don't handle text instances, make it no-op +const handleTextInstance = () => {} + +const NO_CONTEXT: HostConfig['hostContext'] = {} + +let currentUpdatePriority: number = NoEventPriority + +// https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberFlags.js +const NoFlags = 0 +const Update = 4 + +export const reconciler = createReconciler< + HostConfig['type'], + HostConfig['props'], + HostConfig['container'], + HostConfig['instance'], + HostConfig['textInstance'], + HostConfig['suspenseInstance'], + HostConfig['hydratableInstance'], + HostConfig['formInstance'], + HostConfig['publicInstance'], + HostConfig['hostContext'], + HostConfig['childSet'], + HostConfig['timeoutHandle'], + HostConfig['noTimeout'], + HostConfig['TransitionStatus'] +>({ + isPrimaryRenderer: false, + warnsIfNotActing: false, + supportsMutation: true, + supportsPersistence: false, + supportsHydration: false, + createInstance, + removeChild, + appendChild, + appendInitialChild: appendChild, + insertBefore, + appendChildToContainer(container, child) { + const scene = (container.getState().scene as unknown as Instance['object']).__r3f + if (!child || !scene) return + + appendChild(scene, child) + }, + removeChildFromContainer(container, child) { + const scene = (container.getState().scene as unknown as Instance['object']).__r3f + if (!child || !scene) return + + removeChild(scene, child) + }, + insertInContainerBefore(container, child, beforeChild) { + const scene = (container.getState().scene as unknown as Instance['object']).__r3f + if (!child || !beforeChild || !scene) return + + insertBefore(scene, child, beforeChild) + }, + getRootHostContext: () => NO_CONTEXT, + getChildHostContext: () => NO_CONTEXT, + commitUpdate( + instance: HostConfig['instance'], + type: HostConfig['type'], + oldProps: HostConfig['props'], + newProps: HostConfig['props'], + fiber: Fiber, + ) { + validateInstance(type, newProps) + + let reconstruct = false + + // Reconstruct primitives if object prop changes + if (instance.type === 'primitive' && oldProps.object !== newProps.object) reconstruct = true + // Reconstruct instance if args were added or removed + else if (newProps.args?.length !== oldProps.args?.length) reconstruct = true + // Reconstruct instance if args were changed + else if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) reconstruct = true + + // Reconstruct when args or false, + commitMount() {}, + getPublicInstance: (instance) => instance?.object!, + prepareForCommit: () => null, + preparePortalMount: (container) => prepare(container.getState().scene, container, '', {}), + resetAfterCommit: () => {}, + shouldSetTextContent: () => false, + clearContainer: () => false, + hideInstance, + unhideInstance, + createTextInstance: handleTextInstance, + hideTextInstance: handleTextInstance, + unhideTextInstance: handleTextInstance, + scheduleTimeout: (typeof setTimeout === 'function' ? setTimeout : undefined) as any, + cancelTimeout: (typeof clearTimeout === 'function' ? clearTimeout : undefined) as any, + noTimeout: -1, + getInstanceFromNode: () => null, + beforeActiveInstanceBlur() {}, + afterActiveInstanceBlur() {}, + detachDeletedInstance() {}, + prepareScopeUpdate() {}, + getInstanceFromScope: () => null, + shouldAttemptEagerTransition() { + return false + }, + requestPostPaintCallback() {}, + maySuspendCommit() { + return false + }, + preloadInstance() { + return true // true indicates already loaded + }, + startSuspendingCommit() {}, + suspendInstance() {}, + waitForCommitToBeReady() { + return null + }, + NotPendingTransition: null, + setCurrentUpdatePriority(newPriority: number) { + currentUpdatePriority = newPriority + }, + getCurrentUpdatePriority() { + return currentUpdatePriority + }, + resolveUpdatePriority() { + if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority + + switch (typeof window !== 'undefined' && window.event?.type) { + case 'click': + case 'contextmenu': + case 'dblclick': + case 'pointercancel': + case 'pointerdown': + case 'pointerup': + return DiscreteEventPriority + case 'pointermove': + case 'pointerout': + case 'pointerover': + case 'pointerenter': + case 'pointerleave': + case 'wheel': + return ContinuousEventPriority + default: + return DefaultEventPriority + } + }, + resetFormInstance() {}, +}) diff --git a/packages/fiber/src/core/renderer.ts b/packages/fiber/src/core/renderer.ts deleted file mode 100644 index 45d5c55cc9..0000000000 --- a/packages/fiber/src/core/renderer.ts +++ /dev/null @@ -1,447 +0,0 @@ -import * as THREE from 'three' -import { UseBoundStore } from 'zustand' -import Reconciler from 'react-reconciler' -import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler' -import { DefaultEventPriority } from 'react-reconciler/constants' -import { - is, - prepare, - findInitialRoot, - diffProps, - DiffSet, - applyProps, - updateInstance, - invalidateInstance, - attach, - detach, -} from './utils' -import { RootState } from './store' -import { EventHandlers, removeInteractivity } from './events' - -export type Root = { fiber: Reconciler.FiberRoot; store: UseBoundStore } - -export type LocalState = { - type: string - root: UseBoundStore - // objects and parent are used when children are added with `attach` instead of being added to the Object3D scene graph - objects: Instance[] - parent: Instance | null - primitive?: boolean - eventCount: number - handlers: Partial - attach?: AttachType - previousAttach: any - memoizedProps: { [key: string]: any } - autoRemovedBeforeAppend?: boolean -} - -export type AttachFnType = (parent: Instance, self: Instance) => () => void -export type AttachType = string | AttachFnType - -interface HostConfig { - type: string - props: InstanceProps - container: UseBoundStore - instance: Instance - textInstance: void - suspenseInstance: Instance - hydratableInstance: Instance - publicInstance: Instance - hostContext: never - updatePayload: Array - childSet: never - timeoutHandle: number | undefined - noTimeout: -1 -} - -// This type clamps down on a couple of assumptions that we can make regarding native types, which -// could anything from scene objects, THREE.Objects, JSM, user-defined classes and non-scene objects. -// What they all need to have in common is defined here ... -export type BaseInstance = Omit & { - __r3f: LocalState - children: Instance[] - remove: (...object: Instance[]) => Instance - add: (...object: Instance[]) => Instance - raycast?: (raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) => void -} -export type Instance = BaseInstance & { [key: string]: any } - -export type InstanceProps = { - [key: string]: unknown -} & { - args?: any[] - object?: object - visible?: boolean - dispose?: null - attach?: AttachType -} - -interface Catalogue { - [name: string]: { - new (...args: any): Instance - } -} - -export const catalogue: Catalogue = {} -const extend = (objects: object): void => void Object.assign(catalogue, objects) - -function createRenderer(_roots: Map, _getEventPriority?: () => any) { - function createInstance( - type: string, - { args = [], attach, ...props }: InstanceProps, - root: UseBoundStore, - ) { - let name = `${type[0].toUpperCase()}${type.slice(1)}` - let instance: Instance - - if (type === 'primitive') { - if (props.object === undefined) throw new Error("R3F: Primitives without 'object' are invalid!") - const object = props.object as Instance - instance = prepare(object, { type, root, attach, primitive: true }) - } else { - const target = catalogue[name] - if (!target) { - throw new Error( - `R3F: ${name} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`, - ) - } - - // Throw if an object or literal was passed for args - if (!Array.isArray(args)) throw new Error('R3F: The args prop must be an array!') - - // Instanciate new object, link it to the root - // Append memoized props with args so it's not forgotten - instance = prepare(new target(...args), { - type, - root, - attach, - // Save args in case we need to reconstruct later for HMR - memoizedProps: { args }, - }) - } - - // Auto-attach geometries and materials - if (instance.__r3f.attach === undefined) { - if (instance instanceof THREE.BufferGeometry) instance.__r3f.attach = 'geometry' - else if (instance instanceof THREE.Material) instance.__r3f.attach = 'material' - } - - // It should NOT call onUpdate on object instanciation, because it hasn't been added to the - // view yet. If the callback relies on references for instance, they won't be ready yet, this is - // why it passes "true" here - // There is no reason to apply props to injects - if (name !== 'inject') applyProps(instance, props) - return instance - } - - function appendChild(parentInstance: HostConfig['instance'], child: HostConfig['instance']) { - let added = false - if (child) { - // The attach attribute implies that the object attaches itself on the parent - if (child.__r3f?.attach) { - attach(parentInstance, child, child.__r3f.attach) - } else if (child.isObject3D && parentInstance.isObject3D) { - // add in the usual parent-child way - parentInstance.add(child) - added = true - } - // This is for anything that used attach, and for non-Object3Ds that don't get attached to props; - // that is, anything that's a child in React but not a child in the scenegraph. - if (!added) parentInstance.__r3f?.objects.push(child) - if (!child.__r3f) prepare(child, {}) - child.__r3f.parent = parentInstance - updateInstance(child) - invalidateInstance(child) - } - } - - function insertBefore( - parentInstance: HostConfig['instance'], - child: HostConfig['instance'], - beforeChild: HostConfig['instance'], - ) { - let added = false - if (child) { - if (child.__r3f?.attach) { - attach(parentInstance, child, child.__r3f.attach) - } else if (child.isObject3D && parentInstance.isObject3D) { - child.parent = parentInstance as unknown as THREE.Object3D - child.dispatchEvent({ type: 'added' }) - parentInstance.dispatchEvent({ type: 'childadded', child }) - const restSiblings = parentInstance.children.filter((sibling) => sibling !== child) - const index = restSiblings.indexOf(beforeChild) - parentInstance.children = [...restSiblings.slice(0, index), child, ...restSiblings.slice(index)] - added = true - } - - if (!added) parentInstance.__r3f?.objects.push(child) - if (!child.__r3f) prepare(child, {}) - child.__r3f.parent = parentInstance - updateInstance(child) - invalidateInstance(child) - } - } - - function removeRecursive(array: HostConfig['instance'][], parent: HostConfig['instance'], dispose: boolean = false) { - if (array) [...array].forEach((child) => removeChild(parent, child, dispose)) - } - - function removeChild(parentInstance: HostConfig['instance'], child: HostConfig['instance'], dispose?: boolean) { - if (child) { - // Clear the parent reference - if (child.__r3f) child.__r3f.parent = null - // Remove child from the parents objects - if (parentInstance.__r3f?.objects) - parentInstance.__r3f.objects = parentInstance.__r3f.objects.filter((x) => x !== child) - // Remove attachment - if (child.__r3f?.attach) { - detach(parentInstance, child, child.__r3f.attach) - } else if (child.isObject3D && parentInstance.isObject3D) { - parentInstance.remove(child) - // @ts-expect-error - // Remove interactivity on the initial root - if (child.__r3f?.root) { - removeInteractivity(findInitialRoot(child), child as unknown as THREE.Object3D) - } - } - - // Allow objects to bail out of recursive dispose altogether by passing dispose={null} - // Never dispose of primitives because their state may be kept outside of React! - // In order for an object to be able to dispose it has to have - // - a dispose method, - // - it cannot be a - // - it cannot be a THREE.Scene, because three has broken it's own api - // - // Since disposal is recursive, we can check the optional dispose arg, which will be undefined - // when the reconciler calls it, but then carry our own check recursively - const isPrimitive = child.__r3f?.primitive - const shouldDispose = !isPrimitive && (dispose === undefined ? child.dispose !== null : dispose) - - // Remove nested child objects. Primitives should not have objects and children that are - // attached to them declaratively ... - if (!isPrimitive) { - removeRecursive(child.__r3f?.objects, child, shouldDispose) - removeRecursive(child.children, child, shouldDispose) - } - - // Remove references - delete (child as Partial).__r3f - - // Dispose item whenever the reconciler feels like it - if (shouldDispose && child.dispose && child.type !== 'Scene') { - const callback = () => { - try { - child.dispose() - } catch (e) { - /* ... */ - } - } - - // Schedule async at runtime, flush sync in testing - if (typeof IS_REACT_ACT_ENVIRONMENT === 'undefined') { - scheduleCallback(idlePriority, callback) - } else { - callback() - } - } - - invalidateInstance(parentInstance) - } - } - - function switchInstance( - instance: HostConfig['instance'], - type: HostConfig['type'], - newProps: HostConfig['props'], - fiber: Reconciler.Fiber, - ) { - const parent = instance.__r3f?.parent - if (!parent) return - - const newInstance = createInstance(type, newProps, instance.__r3f.root) - - // https://github.com/pmndrs/react-three-fiber/issues/1348 - // When args change the instance has to be re-constructed, which then - // forces r3f to re-parent the children and non-scene objects - if (instance.children) { - for (const child of instance.children) { - if (child.__r3f) appendChild(newInstance, child) - } - instance.children = instance.children.filter((child) => !child.__r3f) - } - - instance.__r3f.objects.forEach((child) => appendChild(newInstance, child)) - instance.__r3f.objects = [] - - if (!instance.__r3f.autoRemovedBeforeAppend) { - removeChild(parent, instance) - } - if (newInstance.parent) { - newInstance.__r3f.autoRemovedBeforeAppend = true - } - appendChild(parent, newInstance) - - // Re-bind event handlers on the initial root - if (newInstance.raycast && newInstance.__r3f.eventCount) { - const rootState = findInitialRoot(newInstance).getState() - rootState.internal.interaction.push(newInstance as unknown as THREE.Object3D) - } - - // This evil hack switches the react-internal fiber node - // https://github.com/facebook/react/issues/14983 - // https://github.com/facebook/react/pull/15021 - ;[fiber, fiber.alternate].forEach((fiber) => { - if (fiber !== null) { - fiber.stateNode = newInstance - if (fiber.ref) { - if (typeof fiber.ref === 'function') (fiber as unknown as any).ref(newInstance) - else (fiber.ref as Reconciler.RefObject).current = newInstance - } - } - }) - } - - // Don't handle text instances, make it no-op - const handleTextInstance = () => {} - - const reconciler = Reconciler< - HostConfig['type'], - HostConfig['props'], - HostConfig['container'], - HostConfig['instance'], - HostConfig['textInstance'], - HostConfig['suspenseInstance'], - HostConfig['hydratableInstance'], - HostConfig['publicInstance'], - HostConfig['hostContext'], - HostConfig['updatePayload'], - HostConfig['childSet'], - HostConfig['timeoutHandle'], - HostConfig['noTimeout'] - >({ - createInstance, - removeChild, - appendChild, - appendInitialChild: appendChild, - insertBefore, - supportsMutation: true, - isPrimaryRenderer: false, - supportsPersistence: false, - supportsHydration: false, - noTimeout: -1, - appendChildToContainer: (container, child) => { - if (!child) return - - // Don't append to unmounted container - const scene = container.getState().scene as unknown as Instance - if (!scene.__r3f) return - - // Link current root to the default scene - scene.__r3f.root = container - appendChild(scene, child) - }, - removeChildFromContainer: (container, child) => { - if (!child) return - removeChild(container.getState().scene as unknown as Instance, child) - }, - insertInContainerBefore: (container, child, beforeChild) => { - if (!child || !beforeChild) return - - // Don't append to unmounted container - const scene = container.getState().scene as unknown as Instance - if (!scene.__r3f) return - - insertBefore(scene, child, beforeChild) - }, - getRootHostContext: () => null, - getChildHostContext: (parentHostContext) => parentHostContext, - finalizeInitialChildren(instance) { - const localState = instance?.__r3f ?? {} - // https://github.com/facebook/react/issues/20271 - // Returning true will trigger commitMount - return Boolean(localState.handlers) - }, - prepareUpdate(instance, _type, oldProps, newProps) { - const localState = instance?.__r3f ?? {} - - // Create diff-sets - if (localState.primitive && newProps.object && newProps.object !== instance) { - return [true] - } else { - // This is a data object, let's extract critical information about it - const { args: argsNew = [], children: cN, ...restNew } = newProps - const { args: argsOld = [], children: cO, ...restOld } = oldProps - - // Throw if an object or literal was passed for args - if (!Array.isArray(argsNew)) throw new Error('R3F: the args prop must be an array!') - - // If it has new props or arguments, then it needs to be re-instantiated - if (argsNew.some((value, index) => value !== argsOld[index])) return [true] - // Create a diff-set, flag if there are any changes - const diff = diffProps(instance, restNew, restOld, true) - if (diff.changes.length) return [false, diff] - - // Otherwise do not touch the instance - return null - } - }, - commitUpdate(instance, [reconstruct, diff]: [boolean, DiffSet], type, _oldProps, newProps, fiber) { - // Reconstruct when args or instance!, - prepareForCommit: () => null, - preparePortalMount: (container) => prepare(container.getState().scene), - resetAfterCommit: () => {}, - shouldSetTextContent: () => false, - clearContainer: () => false, - hideInstance(instance) { - // Detach while the instance is hidden - const { attach: type, parent } = instance.__r3f ?? {} - if (type && parent) detach(parent, instance, type) - if (instance.isObject3D) instance.visible = false - invalidateInstance(instance) - }, - unhideInstance(instance, props) { - // Re-attach when the instance is unhidden - const { attach: type, parent } = instance.__r3f ?? {} - if (type && parent) attach(parent, instance, type) - if ((instance.isObject3D && props.visible == null) || props.visible) instance.visible = true - invalidateInstance(instance) - }, - createTextInstance: handleTextInstance, - hideTextInstance: handleTextInstance, - unhideTextInstance: handleTextInstance, - // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874 - // @ts-expect-error - getCurrentEventPriority: () => (_getEventPriority ? _getEventPriority() : DefaultEventPriority), - beforeActiveInstanceBlur: () => {}, - afterActiveInstanceBlur: () => {}, - detachDeletedInstance: () => {}, - now: - typeof performance !== 'undefined' && is.fun(performance.now) - ? performance.now - : is.fun(Date.now) - ? Date.now - : () => 0, - // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r920883503 - scheduleTimeout: (is.fun(setTimeout) ? setTimeout : undefined) as any, - cancelTimeout: (is.fun(clearTimeout) ? clearTimeout : undefined) as any, - }) - - return { reconciler, applyProps } -} - -export { prepare, createRenderer, extend } diff --git a/packages/fiber/src/core/renderer.tsx b/packages/fiber/src/core/renderer.tsx new file mode 100644 index 0000000000..b6ba85ac84 --- /dev/null +++ b/packages/fiber/src/core/renderer.tsx @@ -0,0 +1,588 @@ +import * as THREE from 'three' +import * as React from 'react' +import { ConcurrentRoot } from 'react-reconciler/constants' +import { createWithEqualityFn } from 'zustand/traditional' + +import type { ThreeElement } from '../three-types' +import { + Renderer, + createStore, + isRenderer, + context, + RootState, + Size, + Dpr, + Performance, + Frameloop, + RootStore, +} from './store' +import { reconciler, Root } from './reconciler' +import { invalidate, advance } from './loop' +import { EventManager, ComputeFunction } from './events' +import { + type Properties, + is, + dispose, + calculateDpr, + EquConfig, + useIsomorphicLayoutEffect, + Camera, + updateCamera, + applyProps, + prepare, + useMutableCallback, + getColorManagement, +} from './utils' +import { useStore } from './hooks' + +// Shim for OffscreenCanvas since it was removed from DOM types +// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/54988 +interface OffscreenCanvas extends EventTarget {} + +export const _roots = new Map() + +const shallowLoose = { objects: 'shallow', strict: false } as EquConfig + +export type GLProps = + | Renderer + | ((canvas: HTMLCanvasElement | OffscreenCanvas) => Renderer) + | Partial | THREE.WebGLRendererParameters> + +export type CameraProps = ( + | Camera + | Partial< + ThreeElement & + ThreeElement & + ThreeElement + > +) & { + /** Flags the camera as manual, putting projection into your own hands */ + manual?: boolean +} + +export interface RenderProps { + /** A threejs renderer instance or props that go into the default renderer */ + gl?: GLProps + /** Dimensions to fit the renderer to. Will measure canvas dimensions if omitted */ + size?: Size + /** + * Enables shadows (by default PCFsoft). Can accept `gl.shadowMap` options for fine-tuning, + * but also strings: 'basic' | 'percentage' | 'soft' | 'variance'. + * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap + */ + shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial + /** + * Disables three r139 color management. + * @see https://threejs.org/docs/#manual/en/introduction/Color-management + */ + legacy?: boolean + /** Switch off automatic sRGB encoding and gamma correction */ + linear?: boolean + /** Use `THREE.NoToneMapping` instead of `THREE.ACESFilmicToneMapping` */ + flat?: boolean + /** Creates an orthographic camera */ + orthographic?: boolean + /** + * R3F's render mode. Set to `demand` to only render on state change or `never` to take control. + * @see https://docs.pmnd.rs/react-three-fiber/advanced/scaling-performance#on-demand-rendering + */ + frameloop?: Frameloop + /** + * R3F performance options for adaptive performance. + * @see https://docs.pmnd.rs/react-three-fiber/advanced/scaling-performance#movement-regression + */ + performance?: Partial> + /** Target pixel ratio. Can clamp between a range: `[min, max]` */ + dpr?: Dpr + /** Props that go into the default raycaster */ + raycaster?: Partial + /** A `THREE.Scene` instance or props that go into the default scene */ + scene?: THREE.Scene | Partial + /** A `THREE.Camera` instance or props that go into the default camera */ + camera?: CameraProps + /** An R3F event manager to manage elements' pointer events */ + events?: (store: RootStore) => EventManager + /** Callback after the canvas has rendered (but not yet committed) */ + onCreated?: (state: RootState) => void + /** Response for pointer clicks that have missed any target */ + onPointerMissed?: (event: MouseEvent) => void +} + +const createRendererInstance = ( + gl: GLProps | undefined, + canvas: TCanvas, +): THREE.WebGLRenderer => { + const customRenderer = (typeof gl === 'function' ? gl(canvas) : gl) as THREE.WebGLRenderer + if (isRenderer(customRenderer)) return customRenderer + + return new THREE.WebGLRenderer({ + powerPreference: 'high-performance', + canvas: canvas as HTMLCanvasElement, + antialias: true, + alpha: true, + ...gl, + }) +} + +export interface ReconcilerRoot { + configure: (config?: RenderProps) => ReconcilerRoot + render: (element: React.ReactNode) => RootStore + unmount: () => void +} + +function computeInitialSize(canvas: HTMLCanvasElement | OffscreenCanvas, size?: Size): Size { + if (!size && canvas instanceof HTMLCanvasElement && canvas.parentElement) { + const { width, height, top, left } = canvas.parentElement.getBoundingClientRect() + return { width, height, top, left } + } else if (!size && typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) { + return { + width: canvas.width, + height: canvas.height, + top: 0, + left: 0, + } + } + + return { width: 0, height: 0, top: 0, left: 0, ...size } +} + +export function createRoot( + canvas: TCanvas, +): ReconcilerRoot { + // Check against mistaken use of createRoot + const prevRoot = _roots.get(canvas) + const prevFiber = prevRoot?.fiber + const prevStore = prevRoot?.store + + if (prevRoot) console.warn('R3F.createRoot should only be called once!') + + // Report when an error was detected in a previous render + // https://github.com/pmndrs/react-three-fiber/pull/2261 + const logRecoverableError = + typeof reportError === 'function' + ? // In modern browsers, reportError will dispatch an error event, + // emulating an uncaught JavaScript error. + reportError + : // In older browsers and test environments, fallback to console.error. + console.error + + // Create store + const store = prevStore || createStore(invalidate, advance) + // Create renderer + const fiber = + prevFiber || + (reconciler as any).createContainer( + store, // container + ConcurrentRoot, // tag + null, // hydration callbacks + false, // isStrictMode + null, // concurrentUpdatesByDefaultOverride + '', // identifierPrefix + logRecoverableError, // onUncaughtError + logRecoverableError, // onCaughtError + logRecoverableError, // onRecoverableError + null, // transitionCallbacks + ) + // Map it + if (!prevRoot) _roots.set(canvas, { fiber, store }) + + // Locals + let onCreated: ((state: RootState) => void) | undefined + let configured = false + let lastCamera: RenderProps['camera'] + + return { + configure(props: RenderProps = {}): ReconcilerRoot { + let { + gl: glConfig, + size: propsSize, + scene: sceneOptions, + events, + onCreated: onCreatedCallback, + shadows = false, + linear = false, + flat = false, + legacy = false, + orthographic = false, + frameloop = 'always', + dpr = [1, 2], + performance, + raycaster: raycastOptions, + camera: cameraOptions, + onPointerMissed, + } = props + + let state = store.getState() + + // Set up renderer (one time only!) + let gl = state.gl + if (!state.gl) state.set({ gl: (gl = createRendererInstance(glConfig, canvas)) }) + + // Set up raycaster (one time only!) + let raycaster = state.raycaster + if (!raycaster) state.set({ raycaster: (raycaster = new THREE.Raycaster()) }) + + // Set raycaster options + const { params, ...options } = raycastOptions || {} + if (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster, { ...options } as any) + if (!is.equ(params, raycaster.params, shallowLoose)) + applyProps(raycaster, { params: { ...raycaster.params, ...params } } as any) + + // Create default camera, don't overwrite any user-set state + if (!state.camera || (state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose))) { + lastCamera = cameraOptions + const isCamera = cameraOptions instanceof THREE.Camera + const camera = isCamera + ? (cameraOptions as Camera) + : orthographic + ? new THREE.OrthographicCamera(0, 0, 0, 0, 0.1, 1000) + : new THREE.PerspectiveCamera(75, 0, 0.1, 1000) + if (!isCamera) { + camera.position.z = 5 + if (cameraOptions) { + applyProps(camera, cameraOptions as any) + // Preserve user-defined frustum if possible + // https://github.com/pmndrs/react-three-fiber/issues/3160 + if (!(camera as any).manual) { + if ( + 'aspect' in cameraOptions || + 'left' in cameraOptions || + 'right' in cameraOptions || + 'bottom' in cameraOptions || + 'top' in cameraOptions + ) { + ;(camera as any).manual = true + camera.updateProjectionMatrix() + } + } + } + // Always look at center by default + if (!state.camera && !cameraOptions?.rotation) camera.lookAt(0, 0, 0) + } + state.set({ camera }) + + // Configure raycaster + // https://github.com/pmndrs/react-xr/issues/300 + raycaster.camera = camera + } + + // Set up scene (one time only!) + if (!state.scene) { + let scene: THREE.Scene + + if (sceneOptions instanceof THREE.Scene) { + scene = sceneOptions + prepare(scene, store, '', {}) + } else { + scene = new THREE.Scene() + prepare(scene, store, '', {}) + if (sceneOptions) applyProps(scene as any, sceneOptions as any) + } + + state.set({ scene }) + } + + // Set up XR (one time only!) + if (!state.xr) { + // Handle frame behavior in WebXR + const handleXRFrame: XRFrameRequestCallback = (timestamp: number, frame?: XRFrame) => { + const state = store.getState() + if (state.frameloop === 'never') return + advance(timestamp, true, state, frame) + } + + // Toggle render switching on session + const handleSessionChange = () => { + const state = store.getState() + state.gl.xr.enabled = state.gl.xr.isPresenting + + state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null) + if (!state.gl.xr.isPresenting) invalidate(state) + } + + // WebXR session manager + const xr = { + connect() { + const gl = store.getState().gl + gl.xr.addEventListener('sessionstart', handleSessionChange) + gl.xr.addEventListener('sessionend', handleSessionChange) + }, + disconnect() { + const gl = store.getState().gl + gl.xr.removeEventListener('sessionstart', handleSessionChange) + gl.xr.removeEventListener('sessionend', handleSessionChange) + }, + } + + // Subscribe to WebXR session events + if (gl.xr) xr.connect() + state.set({ xr }) + } + + // Set shadowmap + if (gl.shadowMap) { + const oldEnabled = gl.shadowMap.enabled + const oldType = gl.shadowMap.type + gl.shadowMap.enabled = !!shadows + + if (is.boo(shadows)) { + gl.shadowMap.type = THREE.PCFSoftShadowMap + } else if (is.str(shadows)) { + const types = { + basic: THREE.BasicShadowMap, + percentage: THREE.PCFShadowMap, + soft: THREE.PCFSoftShadowMap, + variance: THREE.VSMShadowMap, + } + gl.shadowMap.type = types[shadows] ?? THREE.PCFSoftShadowMap + } else if (is.obj(shadows)) { + Object.assign(gl.shadowMap, shadows) + } + + if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type) gl.shadowMap.needsUpdate = true + } + + // Safely set color management if available. + // Avoid accessing THREE.ColorManagement to play nice with older versions + const ColorManagement = getColorManagement() + if (ColorManagement) { + if ('enabled' in ColorManagement) ColorManagement.enabled = !legacy + else if ('legacyMode' in ColorManagement) ColorManagement.legacyMode = legacy + } + + // Set color space and tonemapping preferences + if (!configured) { + const LinearEncoding = 3000 + const sRGBEncoding = 3001 + applyProps( + gl as any, + { + outputEncoding: linear ? LinearEncoding : sRGBEncoding, + toneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping, + } as Partial>, + ) + } + + // Update color management state + if (state.legacy !== legacy) state.set(() => ({ legacy })) + if (state.linear !== linear) state.set(() => ({ linear })) + if (state.flat !== flat) state.set(() => ({ flat })) + + // Set gl props + if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, gl, shallowLoose)) + applyProps(gl, glConfig as any) + // Store events internally + if (events && !state.events.handlers) state.set({ events: events(store) }) + // Check size, allow it to take on container bounds initially + const size = computeInitialSize(canvas, propsSize) + if (!is.equ(size, state.size, shallowLoose)) { + state.setSize(size.width, size.height, size.top, size.left) + } + // Check pixelratio + if (dpr && state.viewport.dpr !== calculateDpr(dpr)) state.setDpr(dpr) + // Check frameloop + if (state.frameloop !== frameloop) state.setFrameloop(frameloop) + // Check pointer missed + if (!state.onPointerMissed) state.set({ onPointerMissed }) + // Check performance + if (performance && !is.equ(performance, state.performance, shallowLoose)) + state.set((state) => ({ performance: { ...state.performance, ...performance } })) + + // Set locals + onCreated = onCreatedCallback + configured = true + + return this + }, + render(children: React.ReactNode): RootStore { + // The root has to be configured before it can be rendered + if (!configured) this.configure() + + reconciler.updateContainer( + , + fiber, + null, + () => undefined, + ) + return store + }, + unmount(): void { + unmountComponentAtNode(canvas) + }, + } +} + +export function render( + children: React.ReactNode, + canvas: TCanvas, + config: RenderProps, +): RootStore { + console.warn('R3F.render is no longer supported in React 18. Use createRoot instead!') + const root = createRoot(canvas) + root.configure(config) + return root.render(children) +} + +interface ProviderProps { + onCreated?: (state: RootState) => void + store: RootStore + children: React.ReactNode + rootElement: TCanvas +} + +function Provider({ + store, + children, + onCreated, + rootElement, +}: ProviderProps): React.JSX.Element { + useIsomorphicLayoutEffect(() => { + const state = store.getState() + // Flag the canvas active, rendering will now begin + state.set((state) => ({ internal: { ...state.internal, active: true } })) + // Notifiy that init is completed, the scene graph exists, but nothing has yet rendered + if (onCreated) onCreated(state) + // Connect events to the targets parent, this is done to ensure events are registered on + // a shared target, and not on the canvas itself + if (!store.getState().events.connected) state.events.connect?.(rootElement) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + return {children} +} + +export function unmountComponentAtNode( + canvas: TCanvas, + callback?: (canvas: TCanvas) => void, +): void { + const root = _roots.get(canvas) + const fiber = root?.fiber + if (fiber) { + const state = root?.store.getState() + if (state) state.internal.active = false + reconciler.updateContainer(null, fiber, null, () => { + if (state) { + setTimeout(() => { + try { + state.events.disconnect?.() + state.gl?.renderLists?.dispose?.() + state.gl?.forceContextLoss?.() + if (state.gl?.xr) state.xr.disconnect() + dispose(state.scene) + _roots.delete(canvas) + if (callback) callback(canvas) + } catch (e) { + /* ... */ + } + }, 500) + } + }) + } +} + +export type InjectState = Partial< + Omit & { + events?: { + enabled?: boolean + priority?: number + compute?: ComputeFunction + connected?: any + } + } +> + +export function createPortal( + children: React.ReactNode, + container: THREE.Object3D, + state?: InjectState, +): React.JSX.Element { + return +} + +interface PortalProps { + children: React.ReactNode + state?: InjectState + container: THREE.Object3D +} + +function Portal({ state = {}, children, container }: PortalProps): React.JSX.Element { + /** This has to be a component because it would not be able to call useThree/useStore otherwise since + * if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger + * the "R3F hooks can only be used within the Canvas component!" warning: + * + * {createPortal(...)} */ + const { events, size, ...rest } = state + const previousRoot = useStore() + const [raycaster] = React.useState(() => new THREE.Raycaster()) + const [pointer] = React.useState(() => new THREE.Vector2()) + + const inject = useMutableCallback((rootState: RootState, injectState: RootState) => { + let viewport = undefined + if (injectState.camera && size) { + const camera = injectState.camera + // Calculate the override viewport, if present + viewport = rootState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size) + // Update the portal camera, if it differs from the previous layer + if (camera !== rootState.camera) updateCamera(camera, size) + } + + return { + // The intersect consists of the previous root state + ...rootState, + ...injectState, + // Portals have their own scene, which forms the root, a raycaster and a pointer + scene: container as THREE.Scene, + raycaster, + pointer, + mouse: pointer, + // Their previous root is the layer before it + previousRoot, + // Events, size and viewport can be overridden by the inject layer + events: { ...rootState.events, ...injectState.events, ...events }, + size: { ...rootState.size, ...size }, + viewport: { ...rootState.viewport, ...viewport }, + // Layers are allowed to override events + setEvents: (events: Partial>) => + injectState.set((state) => ({ ...state, events: { ...state.events, ...events } })), + } as RootState + }) + + const usePortalStore = React.useMemo(() => { + // Create a mirrored store, based on the previous root with a few overrides ... + const store = createWithEqualityFn((set, get) => ({ ...rest, set, get } as RootState)) + + // Subscribe to previous root-state and copy changes over to the mirrored portal-state + const onMutate = (prev: RootState) => store.setState((state) => inject.current(prev, state)) + onMutate(previousRoot.getState()) + previousRoot.subscribe(onMutate) + + return store + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [previousRoot, container]) + + return ( + <> + {reconciler.createPortal( + {children}, + usePortalStore, + null, + )} + + ) +} + +/** + * Force React to flush any updates inside the provided callback synchronously and immediately. + * All the same caveats documented for react-dom's `flushSync` apply here (see https://react.dev/reference/react-dom/flushSync). + * Nevertheless, sometimes one needs to render synchronously, for example to keep DOM and 3D changes in lock-step without + * having to revert to a non-React solution. + */ +export function flushSync(fn: () => R): R { + // `flushSync` implementation only takes one argument. I don't know what's up with the type declaration for it. + return reconciler.flushSync(fn) +} + +reconciler.injectIntoDevTools({ + bundleType: process.env.NODE_ENV === 'production' ? 0 : 1, + rendererPackageName: '@react-three/fiber', + version: React.version, +}) diff --git a/packages/fiber/src/core/store.ts b/packages/fiber/src/core/store.ts index 1c1b92c7d7..b3c51e2b29 100644 --- a/packages/fiber/src/core/store.ts +++ b/packages/fiber/src/core/store.ts @@ -1,46 +1,29 @@ import * as THREE from 'three' import * as React from 'react' -import create, { GetState, SetState, StoreApi, UseBoundStore } from 'zustand' -import { DomEvent, EventManager, PointerCaptureTarget, ThreeEvent } from './events' -import { _XRFrame, calculateDpr, Camera, isOrthographicCamera, updateCamera } from './utils' -import { Advance, Invalidate } from './loop' - -// Keys that shouldn't be copied between R3F stores -export const privateKeys = [ - 'set', - 'get', - 'setSize', - 'setFrameloop', - 'setDpr', - 'events', - 'invalidate', - 'advance', - 'size', - 'viewport', -] as const - -export type PrivateKeys = typeof privateKeys[number] +import { type StoreApi } from 'zustand' +import { createWithEqualityFn, type UseBoundStoreWithEqualityFn } from 'zustand/traditional' +import type { DomEvent, EventManager, PointerCaptureTarget, ThreeEvent } from './events' +import { calculateDpr, type Camera, isOrthographicCamera, updateCamera } from './utils' export interface Intersection extends THREE.Intersection { eventObject: THREE.Object3D } export type Subscription = { - ref: React.MutableRefObject + ref: React.RefObject priority: number - store: UseBoundStore> + store: RootStore } export type Dpr = number | [min: number, max: number] -export type Size = { +export interface Size { width: number height: number top: number left: number - /** @deprecated `updateStyle` is now disabled for OffscreenCanvas and will be removed in v9. */ - updateStyle?: boolean } -export type Viewport = Size & { +export type Frameloop = 'always' | 'demand' | 'never' +export interface Viewport extends Size { /** The initial pixel ratio */ initialDpr: number /** Current pixel ratio */ @@ -53,9 +36,9 @@ export type Viewport = Size & { aspect: number } -export type RenderCallback = (state: RootState, delta: number, frame?: _XRFrame) => void +export type RenderCallback = (state: RootState, delta: number, frame?: XRFrame) => void -export type Performance = { +export interface Performance { /** Current performance normal, between min and max */ current: number /** How low the performance can go, between 0 and max */ @@ -68,36 +51,39 @@ export type Performance = { regress: () => void } -export type Renderer = { render: (scene: THREE.Scene, camera: THREE.Camera) => any } +export interface Renderer { + render: (scene: THREE.Scene, camera: THREE.Camera) => any +} export const isRenderer = (def: any) => !!def?.render -export type InternalState = { - active: boolean - priority: number - frames: number - lastEvent: React.MutableRefObject +export interface InternalState { interaction: THREE.Object3D[] hovered: Map> subscribers: Subscription[] capturedMap: Map> initialClick: [x: number, y: number] initialHits: THREE.Object3D[] - subscribe: ( - callback: React.MutableRefObject, - priority: number, - store: UseBoundStore>, - ) => () => void + lastEvent: React.RefObject + active: boolean + priority: number + frames: number + subscribe: (callback: React.RefObject, priority: number, store: RootStore) => () => void +} + +export interface XRManager { + connect: () => void + disconnect: () => void } -export type RootState = { +export interface RootState { /** Set current state */ - set: SetState + set: StoreApi['setState'] /** Get current state */ - get: GetState + get: StoreApi['getState'] /** The instance of the renderer */ gl: THREE.WebGLRenderer /** Default camera */ - camera: Camera & { manual?: boolean } + camera: Camera /** Default scene */ scene: THREE.Scene /** Default raycaster */ @@ -107,7 +93,7 @@ export type RootState = { /** Event layer interface, contains the event handler and the node they're connected to */ events: EventManager /** XR interface */ - xr: { connect: () => void; disconnect: () => void } + xr: XRManager /** Currently used controls */ controls: THREE.EventDispatcher | null /** Normalized event coordinates */ @@ -121,8 +107,7 @@ export type RootState = { /** Shortcut to gl.toneMapping = NoTonemapping */ flat: boolean /** Render loop flags */ - frameloop: 'always' | 'demand' | 'never' - /** Adaptive performance interface */ + frameloop: Frameloop performance: Performance /** Reactive pixel-size of the canvas */ size: Size @@ -140,33 +125,29 @@ export type RootState = { advance: (timestamp: number, runGlobalEffects?: boolean) => void /** Shortcut to setting the event layer */ setEvents: (events: Partial>) => void - /** - * Shortcut to manual sizing - */ - setSize: ( - width: number, - height: number, - /** @deprecated `updateStyle` is now disabled for OffscreenCanvas and will be removed in v9. */ - updateStyle?: boolean, - top?: number, - left?: number, - ) => void + /** Shortcut to manual sizing */ + setSize: (width: number, height: number, top?: number, left?: number) => void /** Shortcut to manual setting the pixel ratio */ setDpr: (dpr: Dpr) => void - /** Shortcut to frameloop flags */ - setFrameloop: (frameloop?: 'always' | 'demand' | 'never') => void + /** Shortcut to setting frameloop flags */ + setFrameloop: (frameloop: Frameloop) => void /** When the canvas was clicked but nothing was hit */ onPointerMissed?: (event: MouseEvent) => void /** If this state model is layered (via createPortal) then this contains the previous layer */ - previousRoot?: UseBoundStore> + previousRoot?: RootStore /** Internals */ internal: InternalState } -const context = React.createContext>(null!) +export type RootStore = UseBoundStoreWithEqualityFn> -const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore => { - const rootState = create((set, get) => { +export const context = React.createContext(null!) + +export const createStore = ( + invalidate: (state?: RootState, frames?: number) => void, + advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState, frame?: XRFrame) => void, +): RootStore => { + const rootStore = createWithEqualityFn((set, get) => { const position = new THREE.Vector3() const defaultTarget = new THREE.Vector3() const tempTarget = new THREE.Vector3() @@ -205,8 +186,8 @@ const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore void; disconnect: () => void }, scene: null as unknown as THREE.Scene, + xr: null as unknown as XRManager, invalidate: (frames = 1) => invalidate(get(), frames), advance: (timestamp: number, runGlobalEffects?: boolean) => advance(timestamp, runGlobalEffects, get()), @@ -242,7 +223,7 @@ const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore>) => set((state) => ({ ...state, events: { ...state.events, ...events } })), - setSize: (width: number, height: number, updateStyle?: boolean, top?: number, left?: number) => { + setSize: (width: number, height: number, top: number = 0, left: number = 0) => { const camera = get().camera - const size = { width, height, top: top || 0, left: left || 0, updateStyle } + const size = { width, height, top, left } set((state) => ({ size, viewport: { ...state.viewport, ...getCurrentViewport(camera, defaultTarget, size) } })) }, setDpr: (dpr: Dpr) => @@ -268,7 +249,7 @@ const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore { + setFrameloop: (frameloop: Frameloop = 'always') => { const clock = get().clock // if frameloop === "never" clock.elapsedTime is updated using advance(timestamp) @@ -281,26 +262,22 @@ const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore ({ frameloop })) }, - previousRoot: undefined, internal: { - active: false, - priority: 0, - frames: 0, - lastEvent: React.createRef(), - + // Events interaction: [], hovered: new Map>(), subscribers: [], initialClick: [0, 0], initialHits: [], capturedMap: new Map(), + lastEvent: React.createRef(), - subscribe: ( - ref: React.MutableRefObject, - priority: number, - store: UseBoundStore>, - ) => { + // Updates + active: false, + frames: 0, + priority: 0, + subscribe: (ref: React.RefObject, priority: number, store: RootStore) => { const internal = get().internal // If this subscription was given a priority, it takes rendering into its own hands // For that reason we switch off automatic rendering and increase the manual flag @@ -327,13 +304,13 @@ const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore { - const { camera, size, viewport, gl, set } = rootState.getState() + rootStore.subscribe(() => { + const { camera, size, viewport, gl, set } = rootStore.getState() // Resize camera and renderer on changes to size and pixelratio if (size.width !== oldSize.width || size.height !== oldSize.height || viewport.dpr !== oldDpr) { @@ -343,8 +320,7 @@ const createStore = (invalidate: Invalidate, advance: Advance): UseBoundStore invalidate(state)) + rootStore.subscribe((state) => invalidate(state)) // Return root state - return rootState + return rootStore } - -export { createStore, context } diff --git a/packages/fiber/src/core/utils.ts b/packages/fiber/src/core/utils.ts deleted file mode 100644 index 2fb941d255..0000000000 --- a/packages/fiber/src/core/utils.ts +++ /dev/null @@ -1,477 +0,0 @@ -/// -import * as THREE from 'three' -import * as React from 'react' -import { UseBoundStore } from 'zustand' -import { EventHandlers } from './events' -import { AttachType, catalogue, Instance, InstanceProps, LocalState } from './renderer' -import { Dpr, Renderer, RootState, Size } from './store' - -// < r141 shipped vendored types https://github.com/pmndrs/react-three-fiber/issues/2501 -/** @ts-ignore */ -type _DeprecatedXRFrame = THREE.XRFrame -/** @ts-ignore */ -export type _XRFrame = THREE.WebGLRenderTargetOptions extends { samples?: number } ? XRFrame : _DeprecatedXRFrame - -/** - * Returns `true` with correct TS type inference if an object has a configurable color space (since r152). - */ -export const hasColorSpace = < - T extends Renderer | THREE.Texture | object, - P = T extends Renderer ? { outputColorSpace: string } : { colorSpace: string }, ->( - object: T, -): object is T & P => 'colorSpace' in object || 'outputColorSpace' in object - -export type ColorManagementRepresentation = { enabled: boolean | never } | { legacyMode: boolean | never } - -/** - * The current THREE.ColorManagement instance, if present. - */ -export const getColorManagement = (): ColorManagementRepresentation | null => (catalogue as any).ColorManagement ?? null - -export type Camera = THREE.OrthographicCamera | THREE.PerspectiveCamera -export const isOrthographicCamera = (def: Camera): def is THREE.OrthographicCamera => - def && (def as THREE.OrthographicCamera).isOrthographicCamera -export const isRef = (obj: any): obj is React.MutableRefObject => obj && obj.hasOwnProperty('current') - -/** - * An SSR-friendly useLayoutEffect. - * - * React currently throws a warning when using useLayoutEffect on the server. - * To get around it, we can conditionally useEffect on the server (no-op) and - * useLayoutEffect elsewhere. - * - * @see https://github.com/facebook/react/issues/14927 - */ -export const useIsomorphicLayoutEffect = - typeof window !== 'undefined' && (window.document?.createElement || window.navigator?.product === 'ReactNative') - ? React.useLayoutEffect - : React.useEffect - -export function useMutableCallback(fn: T) { - const ref = React.useRef(fn) - useIsomorphicLayoutEffect(() => void (ref.current = fn), [fn]) - return ref -} - -export type SetBlock = false | Promise | null -export type UnblockProps = { set: React.Dispatch>; children: React.ReactNode } - -export function Block({ set }: Omit) { - useIsomorphicLayoutEffect(() => { - set(new Promise(() => null)) - return () => set(false) - }, [set]) - return null -} - -export class ErrorBoundary extends React.Component< - { set: React.Dispatch; children: React.ReactNode }, - { error: boolean } -> { - state = { error: false } - static getDerivedStateFromError = () => ({ error: true }) - componentDidCatch(err: Error) { - this.props.set(err) - } - render() { - return this.state.error ? null : this.props.children - } -} - -export const DEFAULT = '__default' -export const DEFAULTS = new Map() - -export type DiffSet = { - memoized: { [key: string]: any } - changes: [key: string, value: unknown, isEvent: boolean, keys: string[]][] -} - -export const isDiffSet = (def: any): def is DiffSet => def && !!(def as DiffSet).memoized && !!(def as DiffSet).changes -export type ClassConstructor = { new (): void } - -export type ObjectMap = { - nodes: { [name: string]: THREE.Object3D } - materials: { [name: string]: THREE.Material } -} - -export function calculateDpr(dpr: Dpr) { - // Err on the side of progress by assuming 2x dpr if we can't detect it - // This will happen in workers where window is defined but dpr isn't. - const target = typeof window !== 'undefined' ? window.devicePixelRatio ?? 2 : 1 - return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr -} - -/** - * Returns instance root state - */ -export const getRootState = (obj: THREE.Object3D): RootState | undefined => - (obj as unknown as Instance).__r3f?.root.getState() - -/** - * Returns the instances initial (outmost) root - */ -export function findInitialRoot(child: Instance) { - let root = child.__r3f.root - while (root.getState().previousRoot) root = root.getState().previousRoot! - return root -} - -export type EquConfig = { - /** Compare arrays by reference equality a === b (default), or by shallow equality */ - arrays?: 'reference' | 'shallow' - /** Compare objects by reference equality a === b (default), or by shallow equality */ - objects?: 'reference' | 'shallow' - /** If true the keys in both a and b must match 1:1 (default), if false a's keys must intersect b's */ - strict?: boolean -} - -// A collection of compare functions -export const is = { - obj: (a: any) => a === Object(a) && !is.arr(a) && typeof a !== 'function', - fun: (a: any): a is Function => typeof a === 'function', - str: (a: any): a is string => typeof a === 'string', - num: (a: any): a is number => typeof a === 'number', - boo: (a: any): a is boolean => typeof a === 'boolean', - und: (a: any) => a === void 0, - arr: (a: any) => Array.isArray(a), - equ(a: any, b: any, { arrays = 'shallow', objects = 'reference', strict = true }: EquConfig = {}) { - // Wrong type or one of the two undefined, doesn't match - if (typeof a !== typeof b || !!a !== !!b) return false - // Atomic, just compare a against b - if (is.str(a) || is.num(a) || is.boo(a)) return a === b - const isObj = is.obj(a) - if (isObj && objects === 'reference') return a === b - const isArr = is.arr(a) - if (isArr && arrays === 'reference') return a === b - // Array or Object, shallow compare first to see if it's a match - if ((isArr || isObj) && a === b) return true - // Last resort, go through keys - let i - // Check if a has all the keys of b - for (i in a) if (!(i in b)) return false - // Check if values between keys match - if (isObj && arrays === 'shallow' && objects === 'shallow') { - for (i in strict ? b : a) if (!is.equ(a[i], b[i], { strict, objects: 'reference' })) return false - } else { - for (i in strict ? b : a) if (a[i] !== b[i]) return false - } - // If i is undefined - if (is.und(i)) { - // If both arrays are empty we consider them equal - if (isArr && a.length === 0 && b.length === 0) return true - // If both objects are empty we consider them equal - if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true - // Otherwise match them by value - if (a !== b) return false - } - return true - }, -} - -/** - * Collects nodes and materials from a THREE.Object3D. - */ -export function buildGraph(object: THREE.Object3D) { - const data: ObjectMap = { nodes: {}, materials: {} } - if (object) { - object.traverse((obj: any) => { - if (obj.name) data.nodes[obj.name] = obj - if (obj.material && !data.materials[obj.material.name]) data.materials[obj.material.name] = obj.material - }) - } - return data -} - -// Disposes an object and all its properties -export function dispose void; type?: string; [key: string]: any }>(obj: TObj) { - if (obj.dispose && obj.type !== 'Scene') obj.dispose() - for (const p in obj) { - ;(p as any).dispose?.() - delete obj[p] - } -} - -// Each object in the scene carries a small LocalState descriptor -export function prepare(object: T, state?: Partial) { - const instance = object as unknown as Instance - instance.__r3f = { - type: '', - root: null as unknown as UseBoundStore, - previousAttach: null, - memoizedProps: {}, - eventCount: 0, - handlers: {}, - objects: [], - parent: null, - ...state, - } - - return object -} - -function resolve(instance: Instance, key: string) { - let target = instance - if (key.includes('-')) { - const entries = key.split('-') - const last = entries.pop() as string - target = entries.reduce((acc, key) => acc[key], instance) - return { target, key: last } - } else return { target, key } -} - -// Checks if a dash-cased string ends with an integer -const INDEX_REGEX = /-\d+$/ - -export function attach(parent: Instance, child: Instance, type: AttachType) { - if (is.str(type)) { - // If attaching into an array (foo-0), create one - if (INDEX_REGEX.test(type)) { - const root = type.replace(INDEX_REGEX, '') - const { target, key } = resolve(parent, root) - if (!Array.isArray(target[key])) target[key] = [] - } - - const { target, key } = resolve(parent, type) - child.__r3f.previousAttach = target[key] - target[key] = child - } else child.__r3f.previousAttach = type(parent, child) -} - -export function detach(parent: Instance, child: Instance, type: AttachType) { - if (is.str(type)) { - const { target, key } = resolve(parent, type) - const previous = child.__r3f.previousAttach - // When the previous value was undefined, it means the value was never set to begin with - if (previous === undefined) delete target[key] - // Otherwise set the previous value - else target[key] = previous - } else child.__r3f?.previousAttach?.(parent, child) - delete child.__r3f?.previousAttach -} - -type MaybeInstance = Omit & { __r3f?: LocalState } - -// This function prepares a set of changes to be applied to the instance -export function diffProps( - instance: MaybeInstance, - { children: cN, key: kN, ref: rN, ...props }: InstanceProps, - { children: cP, key: kP, ref: rP, ...previous }: InstanceProps = {}, - remove = false, -): DiffSet { - const localState = instance.__r3f - const entries = Object.entries(props) - const changes: [key: string, value: unknown, isEvent: boolean, keys: string[]][] = [] - - // Catch removed props, prepend them so they can be reset or removed - if (remove) { - const previousKeys = Object.keys(previous) - for (let i = 0; i < previousKeys.length; i++) { - if (!props.hasOwnProperty(previousKeys[i])) entries.unshift([previousKeys[i], DEFAULT + 'remove']) - } - } - - entries.forEach(([key, value]) => { - // Bail out on primitive object - if (instance.__r3f?.primitive && key === 'object') return - // When props match bail out - if (is.equ(value, previous[key])) return - // Collect handlers and bail out - if (/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/.test(key)) return changes.push([key, value, true, []]) - // Split dashed props - let entries: string[] = [] - if (key.includes('-')) entries = key.split('-') - changes.push([key, value, false, entries]) - - // Reset pierced props - for (const prop in props) { - const value = props[prop] - if (prop.startsWith(`${key}-`)) changes.push([prop, value, false, prop.split('-')]) - } - }) - - const memoized: { [key: string]: any } = { ...props } - if (localState?.memoizedProps && localState?.memoizedProps.args) memoized.args = localState.memoizedProps.args - if (localState?.memoizedProps && localState?.memoizedProps.attach) memoized.attach = localState.memoizedProps.attach - - return { memoized, changes } -} - -const __DEV__ = typeof process !== 'undefined' && process.env.NODE_ENV !== 'production' - -// This function applies a set of changes to the instance -export function applyProps(instance: MaybeInstance, data: InstanceProps | DiffSet) { - // Filter equals, events and reserved props - const localState = instance.__r3f as LocalState | undefined - const root = localState?.root - const rootState = root?.getState?.() - const { memoized, changes } = isDiffSet(data) ? data : diffProps(instance, data) - const prevHandlers = localState?.eventCount - - // Prepare memoized props - if (instance.__r3f) instance.__r3f.memoizedProps = memoized - - for (let i = 0; i < changes.length; i++) { - let [key, value, isEvent, keys] = changes[i] - - // Alias (output)encoding => (output)colorSpace (since r152) - // https://github.com/pmndrs/react-three-fiber/pull/2829 - if (hasColorSpace(instance)) { - const sRGBEncoding = 3001 - const SRGBColorSpace = 'srgb' - const LinearSRGBColorSpace = 'srgb-linear' - - if (key === 'encoding') { - key = 'colorSpace' - value = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace - } else if (key === 'outputEncoding') { - key = 'outputColorSpace' - value = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace - } - } - - let currentInstance = instance - let targetProp = currentInstance[key] - - // Revolve dashed props - if (keys.length) { - targetProp = keys.reduce((acc, key) => acc[key], instance) - // If the target is atomic, it forces us to switch the root - if (!(targetProp && targetProp.set)) { - const [name, ...reverseEntries] = keys.reverse() - currentInstance = reverseEntries.reverse().reduce((acc, key) => acc[key], instance) - key = name - } - } - - // https://github.com/mrdoob/three.js/issues/21209 - // HMR/fast-refresh relies on the ability to cancel out props, but threejs - // has no means to do this. Hence we curate a small collection of value-classes - // with their respective constructor/set arguments - // For removed props, try to set default values, if possible - if (value === DEFAULT + 'remove') { - if (currentInstance.constructor) { - // create a blank slate of the instance and copy the particular parameter. - let ctor = DEFAULTS.get(currentInstance.constructor) - if (!ctor) { - // @ts-expect-error - ctor = new currentInstance.constructor() - DEFAULTS.set(currentInstance.constructor, ctor) - } - value = ctor[key] - } else { - // instance does not have constructor, just set it to 0 - value = 0 - } - } - - // Deal with pointer events ... - if (isEvent && localState) { - if (value) localState.handlers[key as keyof EventHandlers] = value as any - else delete localState.handlers[key as keyof EventHandlers] - localState.eventCount = Object.keys(localState.handlers).length - } - // Special treatment for objects with support for set/copy, and layers - else if (targetProp && targetProp.set && (targetProp.copy || targetProp instanceof THREE.Layers)) { - // If value is an array - if (Array.isArray(value)) { - if (targetProp.fromArray) targetProp.fromArray(value) - else targetProp.set(...value) - } - // Test again target.copy(class) next ... - else if ( - targetProp.copy && - value && - (value as ClassConstructor).constructor && - // Some environments may break strict identity checks by duplicating versions of three.js. - // Loosen to unminified names, ignoring descendents. - // https://github.com/pmndrs/react-three-fiber/issues/2856 - // TODO: fix upstream and remove in v9 - (__DEV__ - ? targetProp.constructor.name === (value as ClassConstructor).constructor.name - : targetProp.constructor === (value as ClassConstructor).constructor) - ) { - targetProp.copy(value) - } - // If nothing else fits, just set the single value, ignore undefined - // https://github.com/pmndrs/react-three-fiber/issues/274 - else if (value !== undefined) { - const isColor = targetProp instanceof THREE.Color - // Allow setting array scalars - if (!isColor && targetProp.setScalar) targetProp.setScalar(value) - // Layers have no copy function, we must therefore copy the mask property - else if (targetProp instanceof THREE.Layers && value instanceof THREE.Layers) targetProp.mask = value.mask - // Otherwise just set ... - else targetProp.set(value) - // For versions of three which don't support THREE.ColorManagement, - // Auto-convert sRGB colors - // https://github.com/pmndrs/react-three-fiber/issues/344 - if (!getColorManagement() && rootState && !rootState.linear && isColor) targetProp.convertSRGBToLinear() - } - // Else, just overwrite the value - } else { - currentInstance[key] = value - - // Auto-convert sRGB textures, for now ... - // https://github.com/pmndrs/react-three-fiber/issues/344 - if ( - currentInstance[key] instanceof THREE.Texture && - // sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129 - currentInstance[key].format === THREE.RGBAFormat && - currentInstance[key].type === THREE.UnsignedByteType && - rootState - ) { - const texture = currentInstance[key] as THREE.Texture - if (hasColorSpace(texture) && hasColorSpace(rootState.gl)) texture.colorSpace = rootState.gl.outputColorSpace - else texture.encoding = rootState.gl.outputEncoding - } - } - - invalidateInstance(instance) - } - - if (localState && localState.parent && instance.raycast && prevHandlers !== localState.eventCount) { - // Get the initial root state's internals - const internal = findInitialRoot(instance as Instance).getState().internal - // Pre-emptively remove the instance from the interaction manager - const index = internal.interaction.indexOf(instance as unknown as THREE.Object3D) - if (index > -1) internal.interaction.splice(index, 1) - // Add the instance to the interaction manager only when it has handlers - if (localState.eventCount) internal.interaction.push(instance as unknown as THREE.Object3D) - } - - // Call the update lifecycle when it is being updated, but only when it is part of the scene. - // Skip updates to the `onUpdate` prop itself - const isCircular = changes.length === 1 && changes[0][0] === 'onUpdate' - if (!isCircular && changes.length && instance.__r3f?.parent) updateInstance(instance) - - return instance -} - -export function invalidateInstance(instance: MaybeInstance) { - const state = instance.__r3f?.root?.getState?.() - if (state && state.internal.frames === 0) state.invalidate() -} - -export function updateInstance(instance: MaybeInstance) { - instance.onUpdate?.(instance) -} - -export function updateCamera(camera: Camera & { manual?: boolean }, size: Size) { - // https://github.com/pmndrs/react-three-fiber/issues/92 - // Do not mess with the camera if it belongs to the user - if (!camera.manual) { - if (isOrthographicCamera(camera)) { - camera.left = size.width / -2 - camera.right = size.width / 2 - camera.top = size.height / 2 - camera.bottom = size.height / -2 - } else { - camera.aspect = size.width / size.height - } - camera.updateProjectionMatrix() - // https://github.com/pmndrs/react-three-fiber/issues/178 - // Update matrix world since the renderer is a frame late - camera.updateMatrixWorld() - } -} diff --git a/packages/fiber/src/core/utils.tsx b/packages/fiber/src/core/utils.tsx new file mode 100644 index 0000000000..d41157a1c1 --- /dev/null +++ b/packages/fiber/src/core/utils.tsx @@ -0,0 +1,538 @@ +import * as THREE from 'three' +import * as React from 'react' +import { useFiber, traverseFiber, useContextBridge } from 'its-fine' +import { Instance, catalogue } from './reconciler' +import type { Fiber } from 'react-reconciler' +import type { EventHandlers } from './events' +import type { Dpr, Renderer, RootStore, Size } from './store' + +export type NonFunctionKeys

= { [K in keyof P]-?: P[K] extends Function ? never : K }[keyof P] +export type Overwrite = Omit> & O +export type Properties = Pick> +export type Mutable

= { [K in keyof P]: P[K] | Readonly } +export type IsOptional = undefined extends T ? true : false +export type IsAllOptional = T extends [infer First, ...infer Rest] + ? IsOptional extends true + ? IsAllOptional + : false + : true + +/** + * Returns the instance's initial (outmost) root. + */ +export function findInitialRoot(instance: Instance): RootStore { + let root = instance.root + while (root.getState().previousRoot) root = root.getState().previousRoot! + return root +} + +/** + * Returns `true` with correct TS type inference if an object has a configurable color space (since r152). + */ +export const hasColorSpace = < + T extends Renderer | THREE.Texture | object, + P = T extends Renderer ? { outputColorSpace: string } : { colorSpace: string }, +>( + object: T, +): object is T & P => 'colorSpace' in object || 'outputColorSpace' in object + +export type ColorManagementRepresentation = { enabled: boolean | never } | { legacyMode: boolean | never } + +/** + * The current THREE.ColorManagement instance, if present. + */ +export const getColorManagement = (): ColorManagementRepresentation | null => (catalogue as any).ColorManagement ?? null + +export type Act = (cb: () => Promise) => Promise + +/** + * Safely flush async effects when testing, simulating a legacy root. + */ +export const act: Act = (React as any).act + +export type Camera = (THREE.OrthographicCamera | THREE.PerspectiveCamera) & { manual?: boolean } +export const isOrthographicCamera = (def: Camera): def is THREE.OrthographicCamera => + def && (def as THREE.OrthographicCamera).isOrthographicCamera +export const isRef = (obj: any): obj is React.RefObject => obj && obj.hasOwnProperty('current') + +/** + * An SSR-friendly useLayoutEffect. + * + * React currently throws a warning when using useLayoutEffect on the server. + * To get around it, we can conditionally useEffect on the server (no-op) and + * useLayoutEffect elsewhere. + * + * @see https://github.com/facebook/react/issues/14927 + */ +export const useIsomorphicLayoutEffect = + typeof window !== 'undefined' && (window.document?.createElement || window.navigator?.product === 'ReactNative') + ? React.useLayoutEffect + : React.useEffect + +export function useMutableCallback(fn: T): React.RefObject { + const ref = React.useRef(fn) + useIsomorphicLayoutEffect(() => void (ref.current = fn), [fn]) + return ref +} + +export type Bridge = React.FC<{ children?: React.ReactNode }> + +/** + * Bridges renderer Context and StrictMode from a primary renderer. + */ +export function useBridge(): Bridge { + const fiber = useFiber() + const ContextBridge = useContextBridge() + + return React.useMemo( + () => + ({ children }) => { + const strict = !!traverseFiber(fiber, true, (node) => node.type === React.StrictMode) + const Root = strict ? React.StrictMode : React.Fragment + + return ( + + {children} + + ) + }, + [fiber, ContextBridge], + ) +} + +export type SetBlock = false | Promise | null +export type UnblockProps = { set: React.Dispatch>; children: React.ReactNode } + +export function Block({ set }: Omit) { + useIsomorphicLayoutEffect(() => { + set(new Promise(() => null)) + return () => set(false) + }, [set]) + return null +} + +export class ErrorBoundary extends React.Component< + { set: React.Dispatch; children: React.ReactNode }, + { error: boolean } +> { + state = { error: false } + static getDerivedStateFromError = () => ({ error: true }) + componentDidCatch(err: Error) { + this.props.set(err) + } + render() { + return this.state.error ? null : this.props.children + } +} + +export interface ObjectMap { + nodes: { [name: string]: THREE.Object3D } + materials: { [name: string]: THREE.Material } +} + +export function calculateDpr(dpr: Dpr): number { + // Err on the side of progress by assuming 2x dpr if we can't detect it + // This will happen in workers where window is defined but dpr isn't. + const target = typeof window !== 'undefined' ? window.devicePixelRatio ?? 2 : 1 + return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr +} + +/** + * Returns instance root state + */ +export function getRootState(obj: T) { + return (obj as Instance['object']).__r3f?.root.getState() +} + +export interface EquConfig { + /** Compare arrays by reference equality a === b (default), or by shallow equality */ + arrays?: 'reference' | 'shallow' + /** Compare objects by reference equality a === b (default), or by shallow equality */ + objects?: 'reference' | 'shallow' + /** If true the keys in both a and b must match 1:1 (default), if false a's keys must intersect b's */ + strict?: boolean +} + +// A collection of compare functions +export const is = { + obj: (a: any) => a === Object(a) && !is.arr(a) && typeof a !== 'function', + fun: (a: any): a is Function => typeof a === 'function', + str: (a: any): a is string => typeof a === 'string', + num: (a: any): a is number => typeof a === 'number', + boo: (a: any): a is boolean => typeof a === 'boolean', + und: (a: any) => a === void 0, + arr: (a: any) => Array.isArray(a), + equ(a: any, b: any, { arrays = 'shallow', objects = 'reference', strict = true }: EquConfig = {}) { + // Wrong type or one of the two undefined, doesn't match + if (typeof a !== typeof b || !!a !== !!b) return false + // Atomic, just compare a against b + if (is.str(a) || is.num(a) || is.boo(a)) return a === b + const isObj = is.obj(a) + if (isObj && objects === 'reference') return a === b + const isArr = is.arr(a) + if (isArr && arrays === 'reference') return a === b + // Array or Object, shallow compare first to see if it's a match + if ((isArr || isObj) && a === b) return true + // Last resort, go through keys + let i + // Check if a has all the keys of b + for (i in a) if (!(i in b)) return false + // Check if values between keys match + if (isObj && arrays === 'shallow' && objects === 'shallow') { + for (i in strict ? b : a) if (!is.equ(a[i], b[i], { strict, objects: 'reference' })) return false + } else { + for (i in strict ? b : a) if (a[i] !== b[i]) return false + } + // If i is undefined + if (is.und(i)) { + // If both arrays are empty we consider them equal + if (isArr && a.length === 0 && b.length === 0) return true + // If both objects are empty we consider them equal + if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true + // Otherwise match them by value + if (a !== b) return false + } + return true + }, +} + +// Collects nodes and materials from a THREE.Object3D +export function buildGraph(object: THREE.Object3D): ObjectMap { + const data: ObjectMap = { nodes: {}, materials: {} } + if (object) { + object.traverse((obj: any) => { + if (obj.name) data.nodes[obj.name] = obj + if (obj.material && !data.materials[obj.material.name]) data.materials[obj.material.name] = obj.material + }) + } + return data +} + +export interface Disposable { + type?: string + dispose?: () => void +} + +// Disposes an object and all its properties +export function dispose(obj: T): void { + if (obj.type !== 'Scene') obj.dispose?.() + for (const p in obj) { + const prop = obj[p] as Disposable | undefined + if (prop?.type !== 'Scene') prop?.dispose?.() + } +} + +export const REACT_INTERNAL_PROPS = ['children', 'key', 'ref'] + +// Gets only instance props from reconciler fibers +export function getInstanceProps(queue: Fiber['pendingProps']): Instance['props'] { + const props: Instance['props'] = {} + + for (const key in queue) { + if (!REACT_INTERNAL_PROPS.includes(key)) props[key] = queue[key] + } + + return props +} + +// Each object in the scene carries a small LocalState descriptor +export function prepare(target: T, root: RootStore, type: string, props: Instance['props']): Instance { + const object = target as unknown as Instance['object'] + + // Create instance descriptor + let instance = object?.__r3f + if (!instance) { + instance = { + root, + type, + parent: null, + children: [], + props: getInstanceProps(props), + object, + eventCount: 0, + handlers: {}, + isHidden: false, + } + if (object) { + object.__r3f = instance + if (type) applyProps(object, instance.props) + } + } + + return instance +} + +export function resolve(root: any, key: string): { root: any; key: string; target: any } { + let target = root[key] + if (!key.includes('-')) return { root, key, target } + + // Resolve pierced target + const chain = key.split('-') + target = chain.reduce((acc, key) => acc[key], root) + key = chain.pop()! + + // Switch root if atomic + if (!target?.set) root = chain.reduce((acc, key) => acc[key], root) + + return { root, key, target } +} + +// Checks if a dash-cased string ends with an integer +const INDEX_REGEX = /-\d+$/ + +export function attach(parent: Instance, child: Instance): void { + if (is.str(child.props.attach)) { + // If attaching into an array (foo-0), create one + if (INDEX_REGEX.test(child.props.attach)) { + const index = child.props.attach.replace(INDEX_REGEX, '') + const { root, key } = resolve(parent.object, index) + if (!Array.isArray(root[key])) root[key] = [] + } + + const { root, key } = resolve(parent.object, child.props.attach) + child.previousAttach = root[key] + root[key] = child.object + } else if (is.fun(child.props.attach)) { + child.previousAttach = child.props.attach(parent.object, child.object) + } +} + +export function detach(parent: Instance, child: Instance): void { + if (is.str(child.props.attach)) { + const { root, key } = resolve(parent.object, child.props.attach) + const previous = child.previousAttach + // When the previous value was undefined, it means the value was never set to begin with + if (previous === undefined) delete root[key] + // Otherwise set the previous value + else root[key] = previous + } else { + child.previousAttach?.(parent.object, child.object) + } + + delete child.previousAttach +} + +export const RESERVED_PROPS = [ + ...REACT_INTERNAL_PROPS, + // Instance props + 'args', + 'dispose', + 'attach', + 'object', + 'onUpdate', + // Behavior flags + 'dispose', +] + +const MEMOIZED_PROTOTYPES = new Map() + +// This function prepares a set of changes to be applied to the instance +export function diffProps(instance: Instance, newProps: Instance['props']): Instance['props'] { + const changedProps: Instance['props'] = {} + + // Sort through props + for (const prop in newProps) { + // Skip reserved keys + if (RESERVED_PROPS.includes(prop)) continue + // Skip if props match + if (is.equ(newProps[prop], instance.props[prop])) continue + + // Props changed, add them + changedProps[prop] = newProps[prop] + + // Reset pierced props + for (const other in newProps) { + if (other.startsWith(`${prop}-`)) changedProps[other] = newProps[other] + } + } + + // Reset removed props for HMR + for (const prop in instance.props) { + if (RESERVED_PROPS.includes(prop) || newProps.hasOwnProperty(prop)) continue + + const { root, key } = resolve(instance.object, prop) + + // https://github.com/mrdoob/three.js/issues/21209 + // HMR/fast-refresh relies on the ability to cancel out props, but threejs + // has no means to do this. Hence we curate a small collection of value-classes + // with their respective constructor/set arguments + // For removed props, try to set default values, if possible + if (root.constructor && root.constructor.length === 0) { + // create a blank slate of the instance and copy the particular parameter. + let ctor = MEMOIZED_PROTOTYPES.get(root.constructor) + if (!ctor) { + ctor = new root.constructor() + MEMOIZED_PROTOTYPES.set(root.constructor, ctor) + } + changedProps[key] = ctor[key] + } else { + // instance does not have constructor, just set it to 0 + changedProps[key] = 0 + } + } + + return changedProps +} + +type ClassConstructor = { new (): void } +const __DEV__ = typeof process !== 'undefined' && process.env.NODE_ENV !== 'production' + +// const LinearEncoding = 3000 +const sRGBEncoding = 3001 +const SRGBColorSpace = 'srgb' +const LinearSRGBColorSpace = 'srgb-linear' + +// https://github.com/mrdoob/three.js/pull/27042 +// https://github.com/mrdoob/three.js/pull/22748 +const colorMaps = [ + 'map', + 'emissiveMap', + 'sheenTintMap', // (object: Instance['object'], props: Instance['props']): Instance['object'] { + const instance = object.__r3f + const rootState = instance && findInitialRoot(instance).getState() + const prevHandlers = instance?.eventCount + + for (const prop in props) { + let value = props[prop] + + // Don't mutate reserved keys + if (RESERVED_PROPS.includes(prop)) continue + + // Deal with pointer events, including removing them if undefined + if (instance && EVENT_REGEX.test(prop)) { + if (typeof value === 'function') instance.handlers[prop as keyof EventHandlers] = value as any + else delete instance.handlers[prop as keyof EventHandlers] + instance.eventCount = Object.keys(instance.handlers).length + } + + // Ignore setting undefined props + // https://github.com/pmndrs/react-three-fiber/issues/274 + if (value === undefined) continue + + let { root, key, target } = resolve(object, prop) + + // Alias (output)encoding => (output)colorSpace (since r152) + // https://github.com/pmndrs/react-three-fiber/pull/2829 + if (hasColorSpace(root)) { + if (key === 'encoding') { + key = 'colorSpace' + value = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace + } else if (key === 'outputEncoding') { + key = 'outputColorSpace' + value = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace + } + } + + // Copy if properties match signatures + if (typeof target?.copy === 'function' && target.copy === (value as any).copy) { + target.copy(value) + } + // Layers have no copy function, we must therefore copy the mask property + else if (target instanceof THREE.Layers && value instanceof THREE.Layers) { + target.mask = value.mask + } + // Set array types + else if (target?.set && Array.isArray(value)) { + if (target.fromArray) target.fromArray(value) + else target.set(...value) + } + // Set literal types + else if (target?.set && typeof value !== 'object') { + const isColor = target instanceof THREE.Color + // Allow setting array scalars + if (!isColor && target.setScalar && typeof value === 'number') target.setScalar(value) + // Otherwise just set single value + else target.set(value) + + // Emulate THREE.ColorManagement for older three.js versions + // https://github.com/pmndrs/react-three-fiber/issues/344 + if (!getColorManagement() && !rootState?.linear && isColor) target.convertSRGBToLinear() + } + // Else, just overwrite the value + else { + root[key] = value + + // Auto-convert sRGB texture parameters for built-in materials + // https://github.com/pmndrs/react-three-fiber/issues/344 + // https://github.com/mrdoob/three.js/pull/25857 + if ( + rootState && + !rootState.linear && + colorMaps.includes(key) && + root[key] instanceof THREE.Texture && + // sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129 + root[key].format === THREE.RGBAFormat && + root[key].type === THREE.UnsignedByteType + ) { + // NOTE: this cannot be set from the renderer (e.g. sRGB source textures rendered to P3) + if (hasColorSpace(root[key])) root[key].colorSpace = 'srgb' + else root[key].encoding = sRGBEncoding + } + } + } + + // Register event handlers + if ( + instance?.parent && + rootState?.internal && + instance.object instanceof THREE.Object3D && + prevHandlers !== instance.eventCount + ) { + // Pre-emptively remove the instance from the interaction manager + const index = rootState.internal.interaction.indexOf(instance.object) + if (index > -1) rootState.internal.interaction.splice(index, 1) + // Add the instance to the interaction manager only when it has handlers + if (instance.eventCount && instance.object.raycast !== null && instance.object instanceof THREE.Object3D) { + rootState.internal.interaction.push(instance.object) + } + } + + // Auto-attach geometries and materials + if (instance && instance.props.attach === undefined) { + if (instance.object instanceof THREE.BufferGeometry) instance.props.attach = 'geometry' + else if (instance.object instanceof THREE.Material) instance.props.attach = 'material' + } + + // Instance was updated, request a frame + if (instance) invalidateInstance(instance) + + return object +} + +export function invalidateInstance(instance: Instance): void { + if (!instance.parent) return + + instance.props.onUpdate?.(instance.object) + + const state = instance.root?.getState?.() + if (state && state.internal.frames === 0) state.invalidate() +} + +export function updateCamera(camera: Camera, size: Size): void { + // Do not mess with the camera if it belongs to the user + // https://github.com/pmndrs/react-three-fiber/issues/92 + if (camera.manual) return + + if (isOrthographicCamera(camera)) { + camera.left = size.width / -2 + camera.right = size.width / 2 + camera.top = size.height / 2 + camera.bottom = size.height / -2 + } else { + camera.aspect = size.width / size.height + } + + camera.updateProjectionMatrix() +} + +export const isObject3D = (object: any): object is THREE.Object3D => object?.isObject3D diff --git a/packages/fiber/src/index.tsx b/packages/fiber/src/index.tsx index 4b8af9106f..f1b06cdb69 100644 --- a/packages/fiber/src/index.tsx +++ b/packages/fiber/src/index.tsx @@ -1,21 +1,6 @@ -export * from './three-types' import * as ReactThreeFiber from './three-types' export { ReactThreeFiber } -export type { BaseInstance, LocalState } from './core/renderer' -export type { - Intersection, - Subscription, - Dpr, - Size, - Viewport, - RenderCallback, - Performance, - RootState, -} from './core/store' -export type { ThreeEvent, Events, EventManager, ComputeFunction } from './core/events' -export { createEvents } from './core/events' -export type { ObjectMap, Camera } from './core/utils' -export * from './web/Canvas' -export { createPointerEvents as events, createPointerEvents } from './web/events' -export type { GlobalRenderCallback, GlobalEffectType } from './core/loop' +export * from './three-types' export * from './core' +export * from './web/Canvas' +export { createPointerEvents as events } from './web/events' diff --git a/packages/fiber/src/native.tsx b/packages/fiber/src/native.tsx index 97a3a1ddc1..da3384866e 100644 --- a/packages/fiber/src/native.tsx +++ b/packages/fiber/src/native.tsx @@ -1,25 +1,9 @@ -export * from './three-types' import * as ReactThreeFiber from './three-types' export { ReactThreeFiber } -export type { BaseInstance, LocalState } from './core/renderer' -export type { - Intersection, - Subscription, - Dpr, - Size, - Viewport, - RenderCallback, - Performance, - RootState, -} from './core/store' -export type { ThreeEvent, Events, EventManager, ComputeFunction } from './core/events' -export { createEvents } from './core/events' -export type { ObjectMap, Camera } from './core/utils' +export * from './three-types' +export * from './core' export * from './native/Canvas' export { createTouchEvents as events } from './native/events' -export { createPointerEvents } from './web/events' -export type { GlobalRenderCallback, GlobalEffectType } from './core/loop' -export * from './core' import { Platform } from 'react-native' import { polyfills } from './native/polyfills' diff --git a/packages/fiber/src/native/Canvas.tsx b/packages/fiber/src/native/Canvas.tsx index 36b6994d7e..6b9f9e5021 100644 --- a/packages/fiber/src/native/Canvas.tsx +++ b/packages/fiber/src/native/Canvas.tsx @@ -12,13 +12,16 @@ import { PixelRatio, } from 'react-native' import { ExpoWebGLRenderingContext, GLView } from 'expo-gl' -import { useContextBridge, FiberProvider } from 'its-fine' -import { SetBlock, Block, ErrorBoundary, useMutableCallback } from '../core/utils' +import { FiberProvider } from 'its-fine' +import { SetBlock, Block, ErrorBoundary, useMutableCallback, useBridge } from '../core/utils' import { extend, createRoot, unmountComponentAtNode, RenderProps, ReconcilerRoot } from '../core' import { createPointerEvents } from '../web/events' import { RootState, Size } from '../core/store' -export interface CanvasProps extends Omit, 'size' | 'dpr'>, ViewProps { +// TODO: React 19 needs support from react-native +const _View = View as any + +export interface CanvasProps extends Omit, 'size' | 'dpr'>, Omit { children: React.ReactNode style?: ViewStyle } @@ -55,9 +58,9 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( // Create a known catalogue of Threejs-native elements // This will include the entire THREE namespace by default, users can extend // their own elements by using the createRoot API instead - React.useMemo(() => extend(THREE), []) + React.useMemo(() => extend(THREE as any), []) - const Bridge = useContextBridge() + const Bridge = useBridge() const [{ width, height, top, left }, setSize] = React.useState({ width: 0, height: 0, top: 0, left: 0 }) const [canvas, setCanvas] = React.useState(null) @@ -224,11 +227,11 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( }, [canvas]) return ( - + <_View {...props} ref={viewRef} onLayout={onLayout} style={{ flex: 1, ...style }} {...bind}> {width > 0 && ( )} - + ) }, ) @@ -237,7 +240,7 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( * A native canvas which accepts threejs elements as children. * @see https://docs.pmnd.rs/react-three-fiber/api/canvas */ -export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { +export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { return ( diff --git a/packages/fiber/src/native/events.ts b/packages/fiber/src/native/events.ts index 0e4ef1bb36..0ca9f91ee9 100644 --- a/packages/fiber/src/native/events.ts +++ b/packages/fiber/src/native/events.ts @@ -1,10 +1,9 @@ -import { UseBoundStore } from 'zustand' -import { RootState } from '../core/store' +import { RootState, RootStore } from '../core/store' import { createEvents, DomEvent, EventManager, Events } from '../core/events' import { type GestureResponderEvent, PanResponder } from 'react-native' /** Default R3F event manager for react-native */ -export function createTouchEvents(store: UseBoundStore): EventManager { +export function createTouchEvents(store: RootStore): EventManager { const { handlePointer } = createEvents(store) const handleTouch = (event: GestureResponderEvent, name: string): true => { diff --git a/packages/fiber/src/three-types.ts b/packages/fiber/src/three-types.ts index 89b0e6ecb7..6b0a56405c 100644 --- a/packages/fiber/src/three-types.ts +++ b/packages/fiber/src/three-types.ts @@ -1,461 +1,81 @@ -import * as THREE from 'three' -import { EventHandlers } from './core/events' -import { AttachType } from './core/renderer' - -export type Properties = { [K in keyof T as T[K] extends (...args: Array) => any ? never : K]: T[K] } -export type NonFunctionKeys = { [K in keyof T]-?: T[K] extends Function ? never : K }[keyof T] -export type Overwrite = Omit> & O - -/** - * If **T** contains a constructor, @see ConstructorParameters must be used, otherwise **T**. - */ -type Args = T extends new (...args: any) => any ? ConstructorParameters : T - -export type Euler = THREE.Euler | Parameters -export type Matrix4 = THREE.Matrix4 | Parameters | Readonly +import type * as THREE from 'three' +import type {} from 'react' +import type {} from 'react/jsx-runtime' +import type {} from 'react/jsx-dev-runtime' +import type { Args, EventHandlers, InstanceProps, ConstructorRepresentation } from './core' +import type { Overwrite, Mutable } from './core/utils' + +export interface MathRepresentation { + set(...args: number[]): any +} +export interface VectorRepresentation extends MathRepresentation { + setScalar(value: number): any +} +export type MathTypes = MathRepresentation | THREE.Euler | THREE.Color -/** - * Turn an implementation of THREE.Vector in to the type that an r3f component would accept as a prop. - */ -type VectorLike = - | VectorClass - | Parameters - | Readonly> - | Parameters[0] +export type MathType = T extends THREE.Color + ? Args | THREE.ColorRepresentation + : T extends VectorRepresentation | THREE.Layers | THREE.Euler + ? T | Parameters | number + : T | Parameters -export type Vector2 = VectorLike -export type Vector3 = VectorLike -export type Vector4 = VectorLike -export type Color = ConstructorParameters | THREE.Color | number | string // Parameters will not work here because of multiple function signatures in three.js types -// r153 compat, same issue as above -// https://github.com/pmndrs/react-three-fiber/issues/2926 -export type ColorArray = typeof THREE.Color | [color: THREE.ColorRepresentation] -export type Layers = THREE.Layers | Parameters[0] -export type Quaternion = THREE.Quaternion | Parameters +export type MathProps

= { + [K in keyof P as P[K] extends MathTypes ? K : never]: P[K] extends MathTypes ? MathType : never +} -export type AttachCallback = string | ((child: any, parentInstance: any) => void) +export type Vector2 = MathType +export type Vector3 = MathType +export type Vector4 = MathType +export type Color = MathType +export type Layers = MathType +export type Quaternion = MathType +export type Euler = MathType +export type Matrix3 = MathType +export type Matrix4 = MathType + +export interface RaycastableRepresentation { + raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void +} +export type EventProps

= P extends RaycastableRepresentation ? Partial : {} -export interface NodeProps { - attach?: AttachType - /** Constructor arguments */ - args?: Args

+export interface ReactProps

{ children?: React.ReactNode - ref?: React.Ref + ref?: React.Ref

key?: React.Key - onUpdate?: (self: T) => void } -export type ExtendedColors = { [K in keyof T]: T[K] extends THREE.Color | undefined ? Color : T[K] } -export type Node = [T] extends [{ thisShouldNeverHappen: 'unless the object is of type any' }] - ? ExtendedColors, NodeProps<{}, {}>>> - : ExtendedColors, NodeProps>> - -export type Object3DNode = Overwrite< - Node, - { - position?: Vector3 - up?: Vector3 - scale?: Vector3 - rotation?: Euler - matrix?: Matrix4 - quaternion?: Quaternion - layers?: Layers - dispose?: (() => void) | null - } -> & - EventHandlers - -export type BufferGeometryNode = Node -export type MaterialNode = Node -export type LightNode = Object3DNode - -export type Object3DProps = Object3DNode -// export type AudioProps = Object3DNode -export type AudioListenerProps = Object3DNode -export type PositionalAudioProps = Object3DNode - -export type MeshProps = Object3DNode -export type InstancedMeshProps = Object3DNode -/** @ts-ignore */ -export type BatchedMeshProps = Object3DNode -export type SceneProps = Object3DNode -export type SpriteProps = Object3DNode -export type LODProps = Object3DNode -export type SkinnedMeshProps = Object3DNode - -export type SkeletonProps = Object3DNode -export type BoneProps = Object3DNode -export type LineSegmentsProps = Object3DNode -export type LineLoopProps = Object3DNode -// export type LineProps = Object3DNode -export type PointsProps = Object3DNode -export type GroupProps = Object3DNode - -export type CameraProps = Object3DNode -export type PerspectiveCameraProps = Object3DNode -export type OrthographicCameraProps = Object3DNode -export type CubeCameraProps = Object3DNode -export type ArrayCameraProps = Object3DNode - -export type InstancedBufferGeometryProps = BufferGeometryNode< - THREE.InstancedBufferGeometry, - typeof THREE.InstancedBufferGeometry -> -export type BufferGeometryProps = BufferGeometryNode -/** @ts-ignore */ -export type BoxBufferGeometryProps = BufferGeometryNode -export type CircleBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.CircleBufferGeometry, - /** @ts-ignore */ - typeof THREE.CircleBufferGeometry -> -/** @ts-ignore */ -export type ConeBufferGeometryProps = BufferGeometryNode -export type CylinderBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.CylinderBufferGeometry, - /** @ts-ignore */ - typeof THREE.CylinderBufferGeometry -> -export type DodecahedronBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.DodecahedronBufferGeometry, - /** @ts-ignore */ - typeof THREE.DodecahedronBufferGeometry -> -export type ExtrudeBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.ExtrudeBufferGeometry, - /** @ts-ignore */ - typeof THREE.ExtrudeBufferGeometry -> -export type IcosahedronBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.IcosahedronBufferGeometry, - /** @ts-ignore */ - typeof THREE.IcosahedronBufferGeometry -> -/** @ts-ignore */ -export type LatheBufferGeometryProps = BufferGeometryNode -export type OctahedronBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.OctahedronBufferGeometry, - /** @ts-ignore */ - typeof THREE.OctahedronBufferGeometry -> -/** @ts-ignore */ -export type PlaneBufferGeometryProps = BufferGeometryNode -export type PolyhedronBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.PolyhedronBufferGeometry, - /** @ts-ignore */ - typeof THREE.PolyhedronBufferGeometry -> -/** @ts-ignore */ -export type RingBufferGeometryProps = BufferGeometryNode -/** @ts-ignore */ -export type ShapeBufferGeometryProps = BufferGeometryNode -export type SphereBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.SphereBufferGeometry, - /** @ts-ignore */ - typeof THREE.SphereBufferGeometry -> -export type TetrahedronBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.TetrahedronBufferGeometry, - /** @ts-ignore */ - typeof THREE.TetrahedronBufferGeometry +export type ElementProps> = Partial< + Overwrite & ReactProps

& EventProps

> > -/** @ts-ignore */ -export type TorusBufferGeometryProps = BufferGeometryNode -export type TorusKnotBufferGeometryProps = BufferGeometryNode< - /** @ts-ignore */ - THREE.TorusKnotBufferGeometry, - /** @ts-ignore */ - typeof THREE.TorusKnotBufferGeometry -> -/** @ts-ignore */ -export type TubeBufferGeometryProps = BufferGeometryNode -export type WireframeGeometryProps = BufferGeometryNode -export type TetrahedronGeometryProps = BufferGeometryNode -export type OctahedronGeometryProps = BufferGeometryNode -export type IcosahedronGeometryProps = BufferGeometryNode -export type DodecahedronGeometryProps = BufferGeometryNode< - THREE.DodecahedronGeometry, - typeof THREE.DodecahedronGeometry -> -export type PolyhedronGeometryProps = BufferGeometryNode -export type TubeGeometryProps = BufferGeometryNode -export type TorusKnotGeometryProps = BufferGeometryNode -export type TorusGeometryProps = BufferGeometryNode -export type SphereGeometryProps = BufferGeometryNode -export type RingGeometryProps = BufferGeometryNode -export type PlaneGeometryProps = BufferGeometryNode -export type LatheGeometryProps = BufferGeometryNode -export type ShapeGeometryProps = BufferGeometryNode -export type ExtrudeGeometryProps = BufferGeometryNode -export type EdgesGeometryProps = BufferGeometryNode -export type ConeGeometryProps = BufferGeometryNode -export type CylinderGeometryProps = BufferGeometryNode -export type CircleGeometryProps = BufferGeometryNode -export type BoxGeometryProps = BufferGeometryNode -export type CapsuleGeometryProps = BufferGeometryNode - -export type MaterialProps = MaterialNode -export type ShadowMaterialProps = MaterialNode -export type SpriteMaterialProps = MaterialNode -export type RawShaderMaterialProps = MaterialNode -export type ShaderMaterialProps = MaterialNode -export type PointsMaterialProps = MaterialNode -export type MeshPhysicalMaterialProps = MaterialNode -export type MeshStandardMaterialProps = MaterialNode -export type MeshPhongMaterialProps = MaterialNode -export type MeshToonMaterialProps = MaterialNode -export type MeshNormalMaterialProps = MaterialNode -export type MeshLambertMaterialProps = MaterialNode -export type MeshDepthMaterialProps = MaterialNode -export type MeshDistanceMaterialProps = MaterialNode -export type MeshBasicMaterialProps = MaterialNode -export type MeshMatcapMaterialProps = MaterialNode -export type LineDashedMaterialProps = MaterialNode -export type LineBasicMaterialProps = MaterialNode -export type PrimitiveProps = { object: object } & { [properties: string]: any } - -export type LightProps = LightNode -export type SpotLightShadowProps = Node -export type SpotLightProps = LightNode -export type PointLightProps = LightNode -export type RectAreaLightProps = LightNode -export type HemisphereLightProps = LightNode -export type DirectionalLightShadowProps = Node -export type DirectionalLightProps = LightNode -export type AmbientLightProps = LightNode -export type LightShadowProps = Node -/** @ts-ignore */ -export type AmbientLightProbeProps = LightNode -/** @ts-ignore */ -export type HemisphereLightProbeProps = LightNode -export type LightProbeProps = LightNode - -export type SpotLightHelperProps = Object3DNode -export type SkeletonHelperProps = Object3DNode -export type PointLightHelperProps = Object3DNode -export type HemisphereLightHelperProps = Object3DNode -export type GridHelperProps = Object3DNode -export type PolarGridHelperProps = Object3DNode -export type DirectionalLightHelperProps = Object3DNode< - THREE.DirectionalLightHelper, - typeof THREE.DirectionalLightHelper +export type ThreeElement = Mutable< + Overwrite, Omit, T>, 'object'>> > -export type CameraHelperProps = Object3DNode -export type BoxHelperProps = Object3DNode -export type Box3HelperProps = Object3DNode -export type PlaneHelperProps = Object3DNode -export type ArrowHelperProps = Object3DNode -export type AxesHelperProps = Object3DNode - -export type TextureProps = Node -export type VideoTextureProps = Node -export type DataTextureProps = Node -/** @ts-ignore */ -export type DataTexture3DProps = Node -export type CompressedTextureProps = Node -export type CubeTextureProps = Node -export type CanvasTextureProps = Node -export type DepthTextureProps = Node - -export type RaycasterProps = Node -export type Vector2Props = Node -export type Vector3Props = Node -export type Vector4Props = Node -export type EulerProps = Node -export type Matrix3Props = Node -export type Matrix4Props = Node -export type QuaternionProps = Node -export type BufferAttributeProps = Node -export type Float16BufferAttributeProps = Node -export type Float32BufferAttributeProps = Node -/** @ts-ignore */ -export type Float64BufferAttributeProps = Node -export type Int8BufferAttributeProps = Node -export type Int16BufferAttributeProps = Node -export type Int32BufferAttributeProps = Node -export type Uint8BufferAttributeProps = Node -export type Uint16BufferAttributeProps = Node -export type Uint32BufferAttributeProps = Node -export type InstancedBufferAttributeProps = Node -export type ColorProps = Node -export type FogProps = Node -export type FogExp2Props = Node -export type ShapeProps = Node - -export interface ThreeElements { - object3D: Object3DProps - - // `audio` works but conflicts with @types/react. Try using PositionalAudio from @react-three/drei instead - // audio: AudioProps - audioListener: AudioListenerProps - positionalAudio: PositionalAudioProps - - mesh: MeshProps - batchedMesh: BatchedMeshProps - instancedMesh: InstancedMeshProps - scene: SceneProps - sprite: SpriteProps - lOD: LODProps - skinnedMesh: SkinnedMeshProps - skeleton: SkeletonProps - bone: BoneProps - lineSegments: LineSegmentsProps - lineLoop: LineLoopProps - // see `audio` - // line: LineProps - points: PointsProps - group: GroupProps - - // cameras - camera: CameraProps - perspectiveCamera: PerspectiveCameraProps - orthographicCamera: OrthographicCameraProps - cubeCamera: CubeCameraProps - arrayCamera: ArrayCameraProps - - // geometry - instancedBufferGeometry: InstancedBufferGeometryProps - bufferGeometry: BufferGeometryProps - boxBufferGeometry: BoxBufferGeometryProps - circleBufferGeometry: CircleBufferGeometryProps - coneBufferGeometry: ConeBufferGeometryProps - cylinderBufferGeometry: CylinderBufferGeometryProps - dodecahedronBufferGeometry: DodecahedronBufferGeometryProps - extrudeBufferGeometry: ExtrudeBufferGeometryProps - icosahedronBufferGeometry: IcosahedronBufferGeometryProps - latheBufferGeometry: LatheBufferGeometryProps - octahedronBufferGeometry: OctahedronBufferGeometryProps - planeBufferGeometry: PlaneBufferGeometryProps - polyhedronBufferGeometry: PolyhedronBufferGeometryProps - ringBufferGeometry: RingBufferGeometryProps - shapeBufferGeometry: ShapeBufferGeometryProps - sphereBufferGeometry: SphereBufferGeometryProps - tetrahedronBufferGeometry: TetrahedronBufferGeometryProps - torusBufferGeometry: TorusBufferGeometryProps - torusKnotBufferGeometry: TorusKnotBufferGeometryProps - tubeBufferGeometry: TubeBufferGeometryProps - wireframeGeometry: WireframeGeometryProps - tetrahedronGeometry: TetrahedronGeometryProps - octahedronGeometry: OctahedronGeometryProps - icosahedronGeometry: IcosahedronGeometryProps - dodecahedronGeometry: DodecahedronGeometryProps - polyhedronGeometry: PolyhedronGeometryProps - tubeGeometry: TubeGeometryProps - torusKnotGeometry: TorusKnotGeometryProps - torusGeometry: TorusGeometryProps - sphereGeometry: SphereGeometryProps - ringGeometry: RingGeometryProps - planeGeometry: PlaneGeometryProps - latheGeometry: LatheGeometryProps - shapeGeometry: ShapeGeometryProps - extrudeGeometry: ExtrudeGeometryProps - edgesGeometry: EdgesGeometryProps - coneGeometry: ConeGeometryProps - cylinderGeometry: CylinderGeometryProps - circleGeometry: CircleGeometryProps - boxGeometry: BoxGeometryProps - capsuleGeometry: CapsuleGeometryProps - // materials - material: MaterialProps - shadowMaterial: ShadowMaterialProps - spriteMaterial: SpriteMaterialProps - rawShaderMaterial: RawShaderMaterialProps - shaderMaterial: ShaderMaterialProps - pointsMaterial: PointsMaterialProps - meshPhysicalMaterial: MeshPhysicalMaterialProps - meshStandardMaterial: MeshStandardMaterialProps - meshPhongMaterial: MeshPhongMaterialProps - meshToonMaterial: MeshToonMaterialProps - meshNormalMaterial: MeshNormalMaterialProps - meshLambertMaterial: MeshLambertMaterialProps - meshDepthMaterial: MeshDepthMaterialProps - meshDistanceMaterial: MeshDistanceMaterialProps - meshBasicMaterial: MeshBasicMaterialProps - meshMatcapMaterial: MeshMatcapMaterialProps - lineDashedMaterial: LineDashedMaterialProps - lineBasicMaterial: LineBasicMaterialProps - - // primitive - primitive: PrimitiveProps - - // lights and other - light: LightProps - spotLightShadow: SpotLightShadowProps - spotLight: SpotLightProps - pointLight: PointLightProps - rectAreaLight: RectAreaLightProps - hemisphereLight: HemisphereLightProps - directionalLightShadow: DirectionalLightShadowProps - directionalLight: DirectionalLightProps - ambientLight: AmbientLightProps - lightShadow: LightShadowProps - ambientLightProbe: AmbientLightProbeProps - hemisphereLightProbe: HemisphereLightProbeProps - lightProbe: LightProbeProps +type ThreeExports = typeof THREE +type ThreeElementsImpl = { + [K in keyof ThreeExports as Uncapitalize]: ThreeExports[K] extends ConstructorRepresentation + ? ThreeElement + : never +} - // helpers - spotLightHelper: SpotLightHelperProps - skeletonHelper: SkeletonHelperProps - pointLightHelper: PointLightHelperProps - hemisphereLightHelper: HemisphereLightHelperProps - gridHelper: GridHelperProps - polarGridHelper: PolarGridHelperProps - directionalLightHelper: DirectionalLightHelperProps - cameraHelper: CameraHelperProps - boxHelper: BoxHelperProps - box3Helper: Box3HelperProps - planeHelper: PlaneHelperProps - arrowHelper: ArrowHelperProps - axesHelper: AxesHelperProps +export interface ThreeElements extends ThreeElementsImpl { + primitive: Omit, 'args'> & { object: object } +} - // textures - texture: TextureProps - videoTexture: VideoTextureProps - dataTexture: DataTextureProps - dataTexture3D: DataTexture3DProps - compressedTexture: CompressedTextureProps - cubeTexture: CubeTextureProps - canvasTexture: CanvasTextureProps - depthTexture: DepthTextureProps +declare module 'react' { + namespace JSX { + interface IntrinsicElements extends ThreeElements {} + } +} - // misc - raycaster: RaycasterProps - vector2: Vector2Props - vector3: Vector3Props - vector4: Vector4Props - euler: EulerProps - matrix3: Matrix3Props - matrix4: Matrix4Props - quaternion: QuaternionProps - bufferAttribute: BufferAttributeProps - float16BufferAttribute: Float16BufferAttributeProps - float32BufferAttribute: Float32BufferAttributeProps - float64BufferAttribute: Float64BufferAttributeProps - int8BufferAttribute: Int8BufferAttributeProps - int16BufferAttribute: Int16BufferAttributeProps - int32BufferAttribute: Int32BufferAttributeProps - uint8BufferAttribute: Uint8BufferAttributeProps - uint16BufferAttribute: Uint16BufferAttributeProps - uint32BufferAttribute: Uint32BufferAttributeProps - instancedBufferAttribute: InstancedBufferAttributeProps - color: ColorProps - fog: FogProps - fogExp2: FogExp2Props - shape: ShapeProps +declare module 'react/jsx-runtime' { + namespace JSX { + interface IntrinsicElements extends ThreeElements {} + } } -declare global { +declare module 'react/jsx-dev-runtime' { namespace JSX { interface IntrinsicElements extends ThreeElements {} } diff --git a/packages/fiber/src/web/Canvas.tsx b/packages/fiber/src/web/Canvas.tsx index 6384921275..0fb9d20104 100644 --- a/packages/fiber/src/web/Canvas.tsx +++ b/packages/fiber/src/web/Canvas.tsx @@ -1,8 +1,16 @@ import * as React from 'react' import * as THREE from 'three' import { useMeasure, Options as ResizeOptions } from './use-measure' -import { useContextBridge, FiberProvider } from 'its-fine' -import { isRef, SetBlock, Block, ErrorBoundary, useMutableCallback, useIsomorphicLayoutEffect } from '../core/utils' +import { FiberProvider } from 'its-fine' +import { + isRef, + SetBlock, + Block, + ErrorBoundary, + useMutableCallback, + useIsomorphicLayoutEffect, + useBridge, +} from '../core/utils' import { ReconcilerRoot, extend, createRoot, unmountComponentAtNode, RenderProps } from '../core' import { createPointerEvents } from './events' import { DomEvent } from '../core/events' @@ -19,7 +27,7 @@ export interface CanvasProps */ resize?: ResizeOptions /** The target where events are being subscribed to, default: the div that wraps canvas */ - eventSource?: HTMLElement | React.MutableRefObject + eventSource?: HTMLElement | React.RefObject /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */ eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen' } @@ -56,9 +64,9 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func // Create a known catalogue of Threejs-native elements // This will include the entire THREE namespace by default, users can extend // their own elements by using the createRoot API instead - React.useMemo(() => extend(THREE), []) + React.useMemo(() => extend(THREE as any), []) - const Bridge = useContextBridge() + const Bridge = useBridge() const [containerRef, containerRect] = useMeasure({ scroll: true, debounce: { scroll: 50, resize: 0 }, ...resize }) const canvasRef = React.useRef(null!) @@ -82,6 +90,7 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func if (!root.current) root.current = createRoot(canvas) root.current.configure({ gl, + scene, events, shadows, linear, @@ -93,7 +102,6 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func performance, raycaster, camera, - scene, size: containerRect, // Pass mutable reference to onPointerMissed so it's free to update onPointerMissed: (...args) => handlePointerMissed.current?.(...args), @@ -161,7 +169,7 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func * A DOM canvas which accepts threejs elements as children. * @see https://docs.pmnd.rs/react-three-fiber/api/canvas */ -export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { +export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { return ( diff --git a/packages/fiber/src/web/events.ts b/packages/fiber/src/web/events.ts index 0bb836c4fc..d67459c568 100644 --- a/packages/fiber/src/web/events.ts +++ b/packages/fiber/src/web/events.ts @@ -1,5 +1,4 @@ -import { UseBoundStore } from 'zustand' -import { RootState } from '../core/store' +import { RootState, RootStore } from '../core/store' import { EventManager, Events, createEvents, DomEvent } from '../core/events' const DOM_EVENTS = { @@ -16,7 +15,7 @@ const DOM_EVENTS = { } as const /** Default R3F event manager for web */ -export function createPointerEvents(store: UseBoundStore): EventManager { +export function createPointerEvents(store: RootStore): EventManager { const { handlePointer } = createEvents(store) return { @@ -42,20 +41,24 @@ export function createPointerEvents(store: UseBoundStore): EventManag const { set, events } = store.getState() events.disconnect?.() set((state) => ({ events: { ...state.events, connected: target } })) - Object.entries(events.handlers ?? []).forEach(([name, event]) => { - const [eventName, passive] = DOM_EVENTS[name as keyof typeof DOM_EVENTS] - target.addEventListener(eventName, event, { passive }) - }) + if (events.handlers) { + for (const name in events.handlers) { + const event = events.handlers[name as keyof typeof events.handlers] + const [eventName, passive] = DOM_EVENTS[name as keyof typeof DOM_EVENTS] + target.addEventListener(eventName, event, { passive }) + } + } }, disconnect: () => { const { set, events } = store.getState() if (events.connected) { - Object.entries(events.handlers ?? []).forEach(([name, event]) => { - if (events && events.connected instanceof HTMLElement) { + if (events.handlers) { + for (const name in events.handlers) { + const event = events.handlers[name as keyof typeof events.handlers] const [eventName] = DOM_EVENTS[name as keyof typeof DOM_EVENTS] events.connected.removeEventListener(eventName, event) } - }) + } set((state) => ({ events: { ...state.events, connected: undefined } })) } }, diff --git a/packages/fiber/tests/native/__snapshots__/canvas.test.tsx.snap b/packages/fiber/tests/__snapshots__/canvas.native.test.tsx.snap similarity index 100% rename from packages/fiber/tests/native/__snapshots__/canvas.test.tsx.snap rename to packages/fiber/tests/__snapshots__/canvas.native.test.tsx.snap diff --git a/packages/fiber/tests/web/__snapshots__/canvas.test.tsx.snap b/packages/fiber/tests/__snapshots__/canvas.test.tsx.snap similarity index 92% rename from packages/fiber/tests/web/__snapshots__/canvas.test.tsx.snap rename to packages/fiber/tests/__snapshots__/canvas.test.tsx.snap index 58266b7964..93419a866e 100644 --- a/packages/fiber/tests/web/__snapshots__/canvas.test.tsx.snap +++ b/packages/fiber/tests/__snapshots__/canvas.test.tsx.snap @@ -9,7 +9,7 @@ exports[`web Canvas should correctly mount 1`] = ` style="width: 100%; height: 100%;" > { + it('should correctly mount', async () => { + const renderer = await act(async () => + create( + + + , + ), + ) + + expect(renderer.toJSON()).toMatchSnapshot() + }) + + it.skip('should forward ref', async () => { + const ref = React.createRef() + + await act(async () => + create( + + + , + ), + ) + + expect(ref.current).toBeInstanceOf(View) + }) + + it.skip('should forward context', async () => { + const ParentContext = React.createContext(null!) + let receivedValue!: boolean + + function Test() { + receivedValue = React.useContext(ParentContext) + return null + } + + await act(async () => { + create( + + + + + , + ) + }) + + expect(receivedValue).toBe(true) + }) + + it('should correctly unmount', async () => { + const renderer = await act(async () => + create( + + + , + ), + ) + + expect(async () => await act(async () => renderer.unmount())).not.toThrow() + }) +}) diff --git a/packages/fiber/tests/web/canvas.test.tsx b/packages/fiber/tests/canvas.test.tsx similarity index 51% rename from packages/fiber/tests/web/canvas.test.tsx rename to packages/fiber/tests/canvas.test.tsx index 6703f47e0d..ec15d6cfc5 100644 --- a/packages/fiber/tests/web/canvas.test.tsx +++ b/packages/fiber/tests/canvas.test.tsx @@ -1,20 +1,16 @@ -// use default export for jest.spyOn import React from 'react' -import { render, RenderResult } from '@testing-library/react' - -import { Canvas, act } from '../../src' +import { render } from '@testing-library/react' +import { Canvas, act } from '../src' describe('web Canvas', () => { it('should correctly mount', async () => { - let renderer: RenderResult = null! - - await act(async () => { - renderer = render( + const renderer = await act(async () => + render( , - ) - }) + ), + ) expect(renderer.container).toMatchSnapshot() }) @@ -22,26 +18,47 @@ describe('web Canvas', () => { it('should forward ref', async () => { const ref = React.createRef() - await act(async () => { + await act(async () => render( , + ), + ) + + expect(ref.current).toBeInstanceOf(HTMLCanvasElement) + }) + + it('should forward context', async () => { + const ParentContext = React.createContext(null!) + let receivedValue!: boolean + + function Test() { + receivedValue = React.useContext(ParentContext) + return null + } + + await act(async () => { + render( + + + + + , ) }) - expect(ref.current).toBeDefined() + expect(receivedValue).toBe(true) }) it('should correctly unmount', async () => { - let renderer: RenderResult = null! - await act(async () => { - renderer = render( + const renderer = await act(async () => + render( , - ) - }) + ), + ) expect(() => renderer.unmount()).not.toThrow() }) @@ -49,13 +66,13 @@ describe('web Canvas', () => { it('plays nice with react SSR', async () => { const useLayoutEffect = jest.spyOn(React, 'useLayoutEffect') - await act(async () => { + await act(async () => render( , - ) - }) + ), + ) expect(useLayoutEffect).not.toHaveBeenCalled() }) diff --git a/packages/fiber/tests/core/renderer.test.tsx b/packages/fiber/tests/core/renderer.test.tsx deleted file mode 100644 index 2ff145e32c..0000000000 --- a/packages/fiber/tests/core/renderer.test.tsx +++ /dev/null @@ -1,1071 +0,0 @@ -import * as React from 'react' -import * as THREE from 'three' -import { createCanvas } from '@react-three/test-renderer/src/createTestCanvas' - -import { - ReconcilerRoot, - createRoot as createRootImpl, - act, - useFrame, - extend, - ReactThreeFiber, - useThree, - createPortal, - applyProps, -} from '../../src/index' -import { UseBoundStore } from 'zustand' -import { privateKeys, RootState } from '../../src/core/store' -import { Instance } from '../../src/core/renderer' - -type ComponentMesh = THREE.Mesh - -interface ObjectWithBackground extends THREE.Object3D { - background: THREE.Color -} - -/* This class is used for one of the tests */ -class HasObject3dMember extends THREE.Object3D { - public attachment?: THREE.Object3D = undefined -} - -/* This class is used for one of the tests */ -class HasObject3dMethods extends THREE.Object3D { - attachedObj3d?: THREE.Object3D - detachedObj3d?: THREE.Object3D - - customAttach(obj3d: THREE.Object3D) { - this.attachedObj3d = obj3d - } - - detach(obj3d: THREE.Object3D) { - this.detachedObj3d = obj3d - } -} - -class MyColor extends THREE.Color { - constructor(col: number) { - super(col) - } -} - -extend({ HasObject3dMember, HasObject3dMethods }) - -declare module '@react-three/fiber' { - interface ThreeElements { - hasObject3dMember: ReactThreeFiber.Node - hasObject3dMethods: ReactThreeFiber.Node - myColor: ReactThreeFiber.Node - } -} - -beforeAll(() => { - Object.defineProperty(window, 'devicePixelRatio', { - configurable: true, - value: 2, - }) -}) - -const roots: ReconcilerRoot[] = [] - -function createRoot() { - const canvas = createCanvas() - const root = createRootImpl(canvas) - roots.push(root) - return root -} - -describe('renderer', () => { - let root: ReconcilerRoot = null! - - beforeEach(() => { - root = createRoot() - }) - - afterEach(() => { - while (roots.length) { - roots.shift()!.unmount() - } - }) - - it('renders a simple component', async () => { - const Mesh = () => { - return ( - - - - - ) - } - let scene: THREE.Scene = null! - await act(async () => { - scene = root.render().getState().scene - }) - - expect(scene.children[0].type).toEqual('Mesh') - expect((scene.children[0] as ComponentMesh).geometry.type).toEqual('BoxGeometry') - expect((scene.children[0] as ComponentMesh).material.type).toEqual('MeshBasicMaterial') - expect((scene.children[0] as THREE.Mesh).material.type).toEqual( - 'MeshBasicMaterial', - ) - }) - - it('renders an empty scene', async () => { - const Empty = () => null - let scene: THREE.Scene = null! - await act(async () => { - scene = root.render().getState().scene - }) - - expect(scene.type).toEqual('Scene') - expect(scene.children).toEqual([]) - }) - - it('can render a composite component', async () => { - class Parent extends React.Component { - render() { - return ( - - - - - ) - } - } - - const Child = () => { - return ( - - - - - ) - } - - let scene: THREE.Scene = null! - await act(async () => { - scene = root.render().getState().scene - }) - - expect(scene.children[0].type).toEqual('Group') - expect((scene.children[0] as ObjectWithBackground).background.getStyle()).toEqual('rgb(0,0,0)') - expect(scene.children[0].children[0].type).toEqual('Mesh') - expect((scene.children[0].children[0] as ComponentMesh).geometry.type).toEqual('BoxGeometry') - expect((scene.children[0].children[0] as ComponentMesh).material.type).toEqual('MeshBasicMaterial') - expect( - (scene.children[0].children[0] as THREE.Mesh).material.type, - ).toEqual('MeshBasicMaterial') - }) - - it('renders some basics with an update', async () => { - let renders = 0 - - class Component extends React.PureComponent { - state = { pos: 3 } - - componentDidMount() { - this.setState({ pos: 7 }) - } - - render() { - renders++ - return ( - - - - - ) - } - } - - const Child = () => { - renders++ - return - } - - const Null = () => { - renders++ - return null - } - - let scene: THREE.Scene = null! - await act(async () => { - scene = root.render().getState().scene - }) - - expect(scene.children[0].position.x).toEqual(7) - expect(renders).toBe(6) - }) - - it('updates types & names', async () => { - let scene: THREE.Scene = null! - await act(async () => { - scene = root - .render( - - - - - , - ) - .getState().scene - }) - - expect((scene.children[0] as THREE.Mesh).material.type).toEqual( - 'MeshBasicMaterial', - ) - expect((scene.children[0] as THREE.Mesh).material.name).toEqual( - 'basicMat', - ) - - await act(async () => { - scene = root - .render( - - - - - , - ) - .getState().scene - }) - - expect((scene.children[0] as THREE.Mesh).material.type).toEqual( - 'MeshStandardMaterial', - ) - expect((scene.children[0] as THREE.Mesh).material.name).toEqual( - 'standardMat', - ) - }) - - it('should forward ref three object', async () => { - // Note: Passing directly should be less strict, and assigning current should be more strict - let immutableRef!: React.RefObject - let mutableRef!: React.MutableRefObject - let mutableRefSpecific!: React.MutableRefObject - - const RefTest = () => { - immutableRef = React.createRef() - mutableRef = React.useRef(null) - mutableRefSpecific = React.useRef(null) - - return ( - <> - - - (mutableRefSpecific.current = r)} /> - - ) - } - - await act(async () => { - root.render() - }) - - expect(immutableRef.current).toBeTruthy() - expect(mutableRef.current).toBeTruthy() - expect(mutableRefSpecific.current).toBeTruthy() - }) - - it('attaches Object3D children that use attach', async () => { - let scene: THREE.Scene = null! - await act(async () => { - scene = root - .render( - - - , - ) - .getState().scene - }) - - const attachedMesh = (scene.children[0] as HasObject3dMember).attachment - expect(attachedMesh).toBeDefined() - expect(attachedMesh?.type).toBe('Mesh') - // attaching is *instead of* being a regular child - expect(scene.children[0].children.length).toBe(0) - }) - - it('can attach a Scene', async () => { - let scene: THREE.Scene = null! - await act(async () => { - scene = root - .render( - - - , - ) - .getState().scene - }) - - const attachedScene = (scene.children[0] as HasObject3dMember).attachment - expect(attachedScene).toBeDefined() - expect(attachedScene?.type).toBe('Scene') - // attaching is *instead of* being a regular child - expect(scene.children[0].children.length).toBe(0) - }) - - describe('attaches Object3D children that use attachFns', () => { - it('attachFns with cleanup', async () => { - let scene: THREE.Scene = null! - await act(async () => { - scene = root - .render( - - (parent.customAttach(self), () => parent.detach(self))} /> - , - ) - .getState().scene - }) - - const attachedMesh = (scene.children[0] as HasObject3dMethods).attachedObj3d - expect(attachedMesh).toBeDefined() - expect(attachedMesh?.type).toBe('Mesh') - // attaching is *instead of* being a regular child - expect(scene.children[0].children.length).toBe(0) - - // and now detach .. - expect((scene.children[0] as HasObject3dMethods).detachedObj3d).toBeUndefined() - - await act(async () => { - root.render() - }) - - const detachedMesh = (scene.children[0] as HasObject3dMethods).detachedObj3d - expect(detachedMesh).toBe(attachedMesh) - }) - - it('attachFns as functions', async () => { - let scene: THREE.Scene = null! - let attachedMesh: Instance = null! - let detachedMesh: Instance = null! - - await act(async () => { - scene = root - .render( - - ((attachedMesh = parent), () => (detachedMesh = parent))} /> - , - ) - .getState().scene - }) - - expect(attachedMesh).toBeDefined() - expect(attachedMesh?.type).toBe('Object3D') - // attaching is *instead of* being a regular child - expect(scene.children[0].children.length).toBe(0) - - await act(async () => { - root.render() - }) - - expect(detachedMesh).toBe(attachedMesh) - }) - }) - - it('does the full lifecycle', async () => { - const log: string[] = [] - class Log extends React.Component<{ name: string }> { - render() { - log.push('render ' + this.props.name) - return - } - componentDidMount() { - log.push('mount ' + this.props.name) - } - componentWillUnmount() { - log.push('unmount ' + this.props.name) - } - } - - await act(async () => { - root.render() - }) - - await act(async () => { - root.unmount() - }) - - expect(log).toEqual(['render Foo', 'mount Foo', 'unmount Foo']) - }) - - it('will mount/unmount event handlers correctly', async () => { - let state: RootState = null! - let mounted = false - let attachEvents = false - - const EventfulComponent = () => (mounted ? void 0 : undefined} /> : null) - - // Test initial mount without events - mounted = true - await act(async () => { - state = root.render().getState() - }) - expect(state.internal.interaction.length).toBe(0) - - // Test initial mount with events - attachEvents = true - await act(async () => { - state = root.render().getState() - }) - expect(state.internal.interaction.length).not.toBe(0) - - // Test events update - attachEvents = false - await act(async () => { - state = root.render().getState() - }) - expect(state.internal.interaction.length).toBe(0) - - attachEvents = true - await act(async () => { - state = root.render().getState() - }) - expect(state.internal.interaction.length).not.toBe(0) - - // Test unmount with events - mounted = false - await act(async () => { - state = root.render().getState() - }) - expect(state.internal.interaction.length).toBe(0) - }) - - it('will create an identical instance when reconstructing', async () => { - let state: RootState = null! - const instances: { uuid: string; parentUUID?: string; childUUID?: string }[] = [] - - const object1 = new THREE.Group() - const object2 = new THREE.Group() - - const Test = ({ first }: { first?: boolean }) => ( - null}> - - - ) - - await act(async () => { - state = root.render().getState() - }) - - instances.push({ - uuid: state.scene.children[0].uuid, - parentUUID: state.scene.children[0].parent?.uuid, - childUUID: state.scene.children[0].children[0]?.uuid, - }) - expect(state.scene.children[0]).toBe(object1) - - await act(async () => { - state = root.render().getState() - }) - - instances.push({ - uuid: state.scene.children[0].uuid, - parentUUID: state.scene.children[0].parent?.uuid, - childUUID: state.scene.children[0].children[0]?.uuid, - }) - - const [oldInstance, newInstance] = instances - - // Swapped to new instance - expect(state.scene.children[0]).toBe(object2) - - // Preserves scene hierarchy - expect(oldInstance.parentUUID).toBe(newInstance.parentUUID) - expect(oldInstance.childUUID).toBe(newInstance.childUUID) - - // Rebinds events - expect(state.internal.interaction.length).not.toBe(0) - }) - - it('can swap primitives', async () => { - let state: RootState = null! - - const o1 = new THREE.Group() - o1.add(new THREE.Group()) - const o2 = new THREE.Group() - - const Test = ({ n }: { n: number }) => ( - - - - ) - - await act(async () => { - state = root.render().getState() - }) - - // Initial object is added with children and attachments - expect(state.scene.children[0]).toBe(o1) - expect(state.scene.children[0].children.length).toBe(1) - expect((state.scene.children[0] as any).test).toBeInstanceOf(THREE.Group) - - await act(async () => { - state = root.render().getState() - }) - - // Swapped to object 2, does not copy old children, copies attachments - expect(state.scene.children[0]).toBe(o2) - expect(state.scene.children[0].children.length).toBe(0) - expect((state.scene.children[0] as any).test).toBeInstanceOf(THREE.Group) - }) - - it('can swap 4 array primitives', async () => { - let state: RootState = null! - const a = new THREE.Group() - const b = new THREE.Group() - const c = new THREE.Group() - const d = new THREE.Group() - const array = [a, b, c, d] - - const Test = ({ array }: { array: THREE.Group[] }) => ( - <> - {array.map((group, i) => ( - - ))} - - ) - - await act(async () => { - state = root.render().getState() - }) - - expect(state.scene.children[0]).toBe(a) - expect(state.scene.children[1]).toBe(b) - expect(state.scene.children[2]).toBe(c) - expect(state.scene.children[3]).toBe(d) - - const reversedArray = [...array.reverse()] - - await act(async () => { - state = root.render().getState() - }) - - expect(state.scene.children[0]).toBe(d) - expect(state.scene.children[1]).toBe(c) - expect(state.scene.children[2]).toBe(b) - expect(state.scene.children[3]).toBe(a) - - const mixedArray = [b, a, d, c] - - await act(async () => { - state = root.render().getState() - }) - - expect(state.scene.children[0]).toBe(b) - expect(state.scene.children[1]).toBe(a) - expect(state.scene.children[2]).toBe(d) - expect(state.scene.children[3]).toBe(c) - }) - - it('will make an Orthographic Camera & set the position', async () => { - let camera: THREE.Camera = null! - - await act(async () => { - camera = root - .configure({ orthographic: true, camera: { position: [0, 0, 5] } }) - .render() - .getState().camera - }) - - expect(camera.type).toEqual('OrthographicCamera') - expect(camera.position.z).toEqual(5) - }) - - it('should handle an performance changing functions', async () => { - let state: UseBoundStore = null! - await act(async () => { - state = root.configure({ dpr: [1, 2], performance: { min: 0.2 } }).render() - }) - - expect(state.getState().viewport.initialDpr).toEqual(2) - expect(state.getState().performance.min).toEqual(0.2) - expect(state.getState().performance.current).toEqual(1) - - await act(async () => { - state.getState().setDpr(0.1) - }) - - expect(state.getState().viewport.dpr).toEqual(0.1) - - jest.useFakeTimers() - - await act(async () => { - state.getState().performance.regress() - jest.advanceTimersByTime(100) - }) - - expect(state.getState().performance.current).toEqual(0.2) - - await act(async () => { - jest.advanceTimersByTime(200) - }) - - expect(state.getState().performance.current).toEqual(1) - - jest.useRealTimers() - }) - - it('should set PCFSoftShadowMap as the default shadow map', async () => { - let state: UseBoundStore = null! - await act(async () => { - state = root.configure({ shadows: true }).render() - }) - - expect(state.getState().gl.shadowMap.type).toBe(THREE.PCFSoftShadowMap) - }) - - it('should set tonemapping to ACESFilmicToneMapping and outputEncoding to sRGBEncoding if linear is false', async () => { - let state: UseBoundStore = null! - await act(async () => { - state = root.configure({ linear: false }).render() - }) - - expect(state.getState().gl.toneMapping).toBe(THREE.ACESFilmicToneMapping) - expect(state.getState().gl.outputEncoding).toBe(THREE.sRGBEncoding) - }) - - it('should toggle render mode in xr', async () => { - let state: RootState = null! - - await act(async () => { - state = root.render().getState() - state.gl.xr.isPresenting = true - state.gl.xr.dispatchEvent({ type: 'sessionstart' }) - }) - - expect(state.gl.xr.enabled).toEqual(true) - - await act(async () => { - state.gl.xr.isPresenting = false - state.gl.xr.dispatchEvent({ type: 'sessionend' }) - }) - - expect(state.gl.xr.enabled).toEqual(false) - }) - - it('should respect frameloop="never" in xr', async () => { - let respected = true - - await act(async () => { - const TestGroup = () => { - useFrame(() => (respected = false)) - return - } - const state = root - .configure({ frameloop: 'never' }) - .render() - .getState() - state.gl.xr.isPresenting = true - state.gl.xr.dispatchEvent({ type: 'sessionstart' }) - }) - - expect(respected).toEqual(true) - }) - - it('will render components that are extended', async () => { - const testExtend = async () => { - await act(async () => { - extend({ MyColor }) - - root.render() - }) - } - - expect(() => testExtend()).not.toThrow() - }) - - it('should set renderer props via gl prop', async () => { - let gl: THREE.WebGLRenderer = null! - await act(async () => { - gl = root - .configure({ gl: { physicallyCorrectLights: true } }) - .render() - .getState().gl - }) - - expect(gl.physicallyCorrectLights).toBe(true) - }) - - it('should update scene via scene prop', async () => { - let scene: THREE.Scene = null! - - await act(async () => { - scene = root - .configure({ scene: { name: 'test' } }) - .render() - .getState().scene - }) - - expect(scene.name).toBe('test') - }) - - it('should set a custom scene via scene prop', async () => { - let scene: THREE.Scene = null! - - const prop = new THREE.Scene() - - await act(async () => { - scene = root - .configure({ scene: prop }) - .render() - .getState().scene - }) - - expect(prop).toBe(scene) - }) - - it('should set a renderer via gl callback', async () => { - class Renderer extends THREE.WebGLRenderer {} - - let gl: Renderer = null! - await act(async () => { - gl = root - .configure({ gl: (canvas) => new Renderer({ canvas }) }) - .render() - .getState().gl - }) - - expect(gl instanceof Renderer).toBe(true) - }) - - it('should respect color management preferences via gl', async () => { - let gl: THREE.WebGLRenderer & { outputColorSpace?: string } = null! - let texture: THREE.Texture & { colorSpace?: string } = null! - - let key = 0 - function Test({ colorSpace = false }) { - gl = useThree((state) => state.gl) - texture = new THREE.Texture() - return - } - - const LinearEncoding = 3000 - const sRGBEncoding = 3001 - - await act(async () => createRoot().render()) - expect(gl.outputEncoding).toBe(sRGBEncoding) - expect(gl.toneMapping).toBe(THREE.ACESFilmicToneMapping) - expect(texture.encoding).toBe(sRGBEncoding) - - // @ts-expect-error - THREE.WebGLRenderer.prototype.outputColorSpace ??= '' - // @ts-expect-error - THREE.Texture.prototype.colorSpace ??= '' - - await act(async () => - createRoot() - .configure({ linear: true, flat: true }) - .render(), - ) - expect(gl.outputEncoding).toBe(LinearEncoding) - expect(gl.toneMapping).toBe(THREE.NoToneMapping) - expect(texture.encoding).toBe(LinearEncoding) - - // Sets outputColorSpace since r152 - const SRGBColorSpace = 'srgb' - const LinearSRGBColorSpace = 'srgb-linear' - - await act(async () => - createRoot() - .configure({ linear: true }) - .render(), - ) - expect(gl.outputColorSpace).toBe(LinearSRGBColorSpace) - expect(texture.colorSpace).toBe(LinearSRGBColorSpace) - - await act(async () => - createRoot() - .configure({ linear: false }) - .render(), - ) - expect(gl.outputColorSpace).toBe(SRGBColorSpace) - expect(texture.colorSpace).toBe(SRGBColorSpace) - - // @ts-expect-error - delete THREE.WebGLRenderer.prototype.outputColorSpace - // @ts-expect-error - delete THREE.Texture.prototype.colorSpace - }) - - it('should respect legacy prop', async () => { - // <= r138 internal fallback - const material = React.createRef() - extend({ ColorManagement: null }) - await act(async () => root.render()) - expect((THREE as any).ColorManagement.legacyMode).toBe(false) - expect(material.current!.color.toArray()).toStrictEqual(new THREE.Color('#111111').convertSRGBToLinear().toArray()) - extend({ ColorManagement: (THREE as any).ColorManagement }) - - // r139 legacyMode - await act(async () => { - root.configure({ legacy: true }).render() - }) - expect((THREE as any).ColorManagement.legacyMode).toBe(true) - - await act(async () => { - root.configure({ legacy: false }).render() - }) - expect((THREE as any).ColorManagement.legacyMode).toBe(false) - - // r150 !enabled - ;(THREE as any).ColorManagement.enabled = true - - await act(async () => { - root.configure({ legacy: true }).render() - }) - expect((THREE as any).ColorManagement.enabled).toBe(false) - - await act(async () => { - root.configure({ legacy: false }).render() - }) - expect((THREE as any).ColorManagement.enabled).toBe(true) - }) - - it('can handle createPortal', async () => { - const scene = new THREE.Scene() - - let state: RootState = null! - let portalState: RootState = null! - - const Normal = () => { - const three = useThree() - state = three - - return - } - - const Portal = () => { - const three = useThree() - portalState = three - - return - } - - await act(async () => { - root.render( - <> - - {createPortal(, scene, { scene })} - , - ) - }) - - // Renders into portal target - expect(scene.children.length).not.toBe(0) - - // Creates an isolated state enclave - expect(state.scene).not.toBe(scene) - expect(portalState.scene).toBe(scene) - - // Preserves internal keys - const overwrittenKeys = ['get', 'set', 'events', 'size', 'viewport'] - const respectedKeys = privateKeys.filter((key) => overwrittenKeys.includes(key) || state[key] === portalState[key]) - expect(respectedKeys).toStrictEqual(privateKeys) - }) - - it('can handle createPortal on unmounted container', async () => { - let groupHandle!: THREE.Group | null - function Test(props: any) { - const [group, setGroup] = React.useState(null) - groupHandle = group - - return ( - - {group && createPortal(, group)} - - ) - } - - await act(async () => root.render()) - - expect(groupHandle).toBeDefined() - const prevUUID = groupHandle!.uuid - - await act(async () => root.render()) - - expect(groupHandle).toBeDefined() - expect(prevUUID).not.toBe(groupHandle!.uuid) - }) - - it('invalidates pierced props when root is changed', async () => { - const material = React.createRef() - const texture1 = { needsUpdate: false, name: '' } as THREE.Texture - const texture2 = { needsUpdate: false, name: '' } as THREE.Texture - - await act(async () => - root.render(), - ) - - expect(material.current!.map).toBe(texture1) - expect(texture1.needsUpdate).toBe(true) - expect(texture1.name).toBe('test') - - await act(async () => - root.render(), - ) - - expect(material.current!.map).toBe(texture2) - expect(texture2.needsUpdate).toBe(true) - expect(texture2.name).toBe('test') - }) - - // https://github.com/mrdoob/three.js/issues/21209 - it("can handle HMR default where three.js isn't reliable", async () => { - const ref = React.createRef() - - function Test() { - const [scale, setScale] = React.useState(true) - const props: any = {} - if (scale) props.scale = 0.5 - React.useEffect(() => void setScale(false), []) - return - } - - await act(async () => root.render()) - - expect(ref.current!.scale.toArray()).toStrictEqual(new THREE.Object3D().scale.toArray()) - }) - - it("onUpdate shouldn't update itself", async () => { - const one = jest.fn() - const two = jest.fn() - - const Test = (props: Partial) => - await act(async () => root.render()) - await act(async () => root.render()) - - expect(one).toBeCalledTimes(1) - expect(two).toBeCalledTimes(0) - }) - - it("camera props shouldn't overwrite state", async () => { - const camera = new THREE.OrthographicCamera() - - function Test() { - const set = useThree((state) => state.set) - React.useMemo(() => set({ camera }), [set]) - return null - } - - const store = await act(async () => root.render()) - expect(store.getState().camera).toBe(camera) - - root.configure({ camera: { name: 'test' } }) - - await act(async () => root.render()) - expect(store.getState().camera).toBe(camera) - expect(camera.name).not.toBe('test') - }) - - it('should safely handle updates to the object prop', async () => { - const ref = React.createRef() - const child = React.createRef() - const attachedChild = React.createRef() - - const Test = (props: JSX.IntrinsicElements['primitive']) => ( - - - - - ) - - const object1 = new THREE.Object3D() - const child1 = new THREE.Object3D() - object1.add(child1) - - const object2 = new THREE.Object3D() - const child2 = new THREE.Object3D() - object2.add(child2) - - // Initial - await act(async () => root.render()) - expect(ref.current).toBe(object1) - expect(ref.current!.children).toStrictEqual([child1, child.current]) - expect(ref.current!.userData.attach).toBe(attachedChild.current) - - // Update - await act(async () => root.render()) - expect(ref.current).toBe(object2) - expect(ref.current!.children).toStrictEqual([child2, child.current]) - expect(ref.current!.userData.attach).toBe(attachedChild.current) - - // Revert - await act(async () => root.render()) - expect(ref.current).toBe(object1) - expect(ref.current!.children).toStrictEqual([child1, child.current]) - expect(ref.current!.userData.attach).toBe(attachedChild.current) - }) - - it('should recursively dispose of declarative children', async () => { - const parentDispose = jest.fn() - const childDispose = jest.fn() - - await act(async () => - root.render( - - - , - ), - ) - await act(async () => root.render(null)) - - expect(parentDispose).toBeCalledTimes(1) - expect(childDispose).toBeCalledTimes(1) - }) - - it('should not recursively dispose of flagged parent', async () => { - const parentDispose = jest.fn() - const childDispose = jest.fn() - - await act(async () => - root.render( - - - - - , - ), - ) - await act(async () => root.render(null)) - - expect(parentDispose).not.toBeCalled() - expect(childDispose).not.toBeCalled() - }) - - it('should not recursively dispose of attached primitives', async () => { - const meshDispose = jest.fn() - const primitiveDispose = jest.fn() - - await act(async () => - root.render( - - - , - ), - ) - await act(async () => root.render(null)) - - expect(meshDispose).toBeCalledTimes(1) - expect(primitiveDispose).not.toBeCalled() - }) - - it('preserves camera frustum props for perspective', async () => { - const store = await act(async () => root.configure({ camera: { aspect: 0 } }).render(null)) - expect(store.getState().camera.aspect).toBe(0) - }) - - it('preserves camera frustum props for orthographic', async () => { - const store = await act(async () => - root.configure({ orthographic: true, camera: { left: 0, right: 0, top: 0, bottom: 0 } }).render(null), - ) - expect(store.getState().camera.left).toBe(0) - expect(store.getState().camera.right).toBe(0) - expect(store.getState().camera.top).toBe(0) - expect(store.getState().camera.bottom).toBe(0) - }) - - it('applyProps can handle non-instances', async () => { - const object = new THREE.Object3D() as any - expect(() => applyProps(object, { onClick: () => {} })).not.toThrow() - }) -}) diff --git a/packages/fiber/tests/core/utils.test.ts b/packages/fiber/tests/core/utils.test.ts deleted file mode 100644 index 3572462ac1..0000000000 --- a/packages/fiber/tests/core/utils.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { is } from '../../src/core/utils' - -describe('is', () => { - const myFunc = () => null - const myObj = { myProp: 'test-prop' } - const myStr = 'test-string' - const myNum = 1 - const myUnd = undefined - const myArr = [1, 2, 3] - - it('should tell me if something IS a function', () => { - expect(is.fun(myFunc)).toBe(true) - - expect(is.fun(myObj)).toBe(false) - expect(is.fun(myStr)).toBe(false) - expect(is.fun(myNum)).toBe(false) - expect(is.fun(myUnd)).toBe(false) - expect(is.fun(myArr)).toBe(false) - }) - it('should tell me if something IS an object', () => { - expect(is.obj(myFunc)).toBe(false) - - expect(is.obj(myObj)).toBe(true) - - expect(is.obj(myStr)).toBe(false) - expect(is.obj(myNum)).toBe(false) - expect(is.obj(myUnd)).toBe(false) - expect(is.obj(myArr)).toBe(false) - }) - it('should tell me if something IS a string', () => { - expect(is.str(myFunc)).toBe(false) - expect(is.str(myObj)).toBe(false) - - expect(is.str(myStr)).toBe(true) - - expect(is.str(myNum)).toBe(false) - expect(is.str(myUnd)).toBe(false) - expect(is.str(myArr)).toBe(false) - }) - it('should tell me if something IS a number', () => { - expect(is.num(myFunc)).toBe(false) - expect(is.num(myObj)).toBe(false) - expect(is.num(myStr)).toBe(false) - - expect(is.num(myNum)).toBe(true) - - expect(is.num(myUnd)).toBe(false) - expect(is.num(myArr)).toBe(false) - }) - it('should tell me if something IS undefined', () => { - expect(is.und(myFunc)).toBe(false) - expect(is.und(myObj)).toBe(false) - expect(is.und(myStr)).toBe(false) - expect(is.und(myNum)).toBe(false) - - expect(is.und(myUnd)).toBe(true) - - expect(is.und(myArr)).toBe(false) - }) - it('should tell me if something is an array', () => { - expect(is.arr(myFunc)).toBe(false) - expect(is.arr(myObj)).toBe(false) - expect(is.arr(myStr)).toBe(false) - expect(is.arr(myNum)).toBe(false) - expect(is.arr(myUnd)).toBe(false) - - expect(is.arr(myArr)).toBe(true) - }) - it('should tell me if something is equal', () => { - expect(is.equ([], '')).toBe(false) - - expect(is.equ('hello', 'hello')).toBe(true) - expect(is.equ(1, 1)).toBe(true) - - const obj = { type: 'Mesh' } - expect(is.equ(obj, obj)).toBe(true) - expect(is.equ({}, {})).toBe(false) - expect(is.equ({}, {}, { objects: 'reference' })).toBe(false) - expect(is.equ({}, {}, { objects: 'shallow' })).toBe(true) - expect(is.equ({ a: 1 }, { a: 1 })).toBe(false) - expect(is.equ({ a: 1 }, { a: 1 }, { objects: 'reference' })).toBe(false) - expect(is.equ({ a: 1 }, { a: 1 }, { objects: 'shallow' })).toBe(true) - expect(is.equ({ a: 1, b: 1 }, { a: 1 }, { objects: 'shallow' })).toBe(false) - expect(is.equ({ a: 1 }, { a: 1, b: 1 }, { objects: 'shallow' })).toBe(false) - expect(is.equ({ a: 1 }, { a: 1, b: 1 }, { objects: 'shallow', strict: false })).toBe(true) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3] }, { arrays: 'reference', objects: 'reference' })).toBe(false) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3] }, { objects: 'reference' })).toBe(false) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3] }, { objects: 'shallow' })).toBe(true) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3, 4] }, { objects: 'shallow' })).toBe(false) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3, 4] }, { objects: 'shallow', strict: false })).toBe(true) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3], b: 1 }, { objects: 'shallow' })).toBe(false) - expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3], b: 1 }, { objects: 'shallow', strict: false })).toBe(true) - - const arr = [1, 2, 3] - expect(is.equ(arr, arr)).toBe(true) - expect(is.equ([], [])).toBe(true) - expect(is.equ([], [], { arrays: 'reference' })).toBe(false) - expect(is.equ([], [], { arrays: 'shallow' })).toBe(true) - expect(is.equ([1, 2, 3], [1, 2, 3])).toBe(true) - expect(is.equ([1, 2, 3], [1, 2, 3], { arrays: 'shallow' })).toBe(true) - expect(is.equ([1, 2, 3], [1, 2, 3], { arrays: 'reference' })).toBe(false) - expect(is.equ([1, 2], [1, 2, 3])).toBe(false) - expect(is.equ([1, 2, 3, 4], [1, 2, 3])).toBe(false) - expect(is.equ([1, 2], [1, 2, 3], { strict: false })).toBe(true) - }) -}) diff --git a/packages/fiber/tests/core/events.test.tsx b/packages/fiber/tests/events.test.tsx similarity index 99% rename from packages/fiber/tests/core/events.test.tsx rename to packages/fiber/tests/events.test.tsx index a2d522d097..a97515297f 100644 --- a/packages/fiber/tests/core/events.test.tsx +++ b/packages/fiber/tests/events.test.tsx @@ -1,7 +1,9 @@ import * as React from 'react' import { render, fireEvent, RenderResult } from '@testing-library/react' +import { Canvas, act, extend } from '../src' +import THREE from 'three' -import { Canvas, act } from '../../src' +extend(THREE as any) const getContainer = () => document.querySelector('canvas')?.parentNode?.parentNode as HTMLDivElement diff --git a/packages/fiber/tests/core/hooks.test.tsx b/packages/fiber/tests/hooks.test.tsx similarity index 72% rename from packages/fiber/tests/core/hooks.test.tsx rename to packages/fiber/tests/hooks.test.tsx index e778462985..03a9aa4bd8 100644 --- a/packages/fiber/tests/core/hooks.test.tsx +++ b/packages/fiber/tests/hooks.test.tsx @@ -1,8 +1,6 @@ import * as React from 'react' import * as THREE from 'three' -import * as Stdlib from 'three-stdlib' import { createCanvas } from '@react-three/test-renderer/src/createTestCanvas' -import { waitFor } from '@react-three/test-renderer' import { createRoot, @@ -14,9 +12,12 @@ import { useFrame, ObjectMap, useInstanceHandle, - LocalState, -} from '../../src' -import { Instance } from 'packages/fiber/src/core/renderer' + Instance, + extend, +} from '../src' + +extend(THREE as any) +const root = createRoot(document.createElement('canvas')) describe('hooks', () => { let canvas: HTMLCanvasElement = null! @@ -51,14 +52,12 @@ describe('hooks', () => { return } - await act(async () => { - createRoot(canvas).render() - }) + await act(async () => root.render()) expect(result.camera instanceof THREE.Camera).toBeTruthy() expect(result.scene instanceof THREE.Scene).toBeTruthy() expect(result.raycaster instanceof THREE.Raycaster).toBeTruthy() - expect(result.size).toEqual({ height: 0, width: 0, top: 0, left: 0, updateStyle: false }) + expect(result.size).toEqual({ height: 0, width: 0, top: 0, left: 0 }) }) it('can handle useFrame hook', async () => { @@ -79,51 +78,35 @@ describe('hooks', () => { ) } - let scene: THREE.Scene = null! - await act( - async () => - (scene = createRoot(canvas) - .configure({ frameloop: 'never' }) - .render() - .getState().scene), - ) + const store = await act(async () => root.configure({ frameloop: 'never' }).render()) + const { scene } = store.getState() + advance(Date.now()) expect(scene.children[0].position.x).toEqual(1) expect(frameCalls.length).toBeGreaterThan(0) }) it('can handle useLoader hook', async () => { - let gltf!: Stdlib.GLTF & ObjectMap - const MockMesh = new THREE.Mesh() MockMesh.name = 'Scene' - jest.spyOn(Stdlib, 'GLTFLoader').mockImplementation( - () => - ({ - load: jest.fn().mockImplementation((_url, onLoad) => { - onLoad({ scene: MockMesh }) - }), - } as unknown as Stdlib.GLTFLoader), - ) + interface GLTF { + scene: THREE.Object3D + } + class GLTFLoader extends THREE.Loader { + load(url: string, onLoad: (gltf: GLTF) => void): void { + onLoad({ scene: MockMesh }) + } + } + let gltf!: GLTF & ObjectMap const Component = () => { - gltf = useLoader(Stdlib.GLTFLoader, '/suzanne.glb') + gltf = useLoader(GLTFLoader, '/suzanne.glb') return } - let scene: THREE.Scene = null! - await act(async () => { - scene = createRoot(canvas) - .render( - - - , - ) - .getState().scene - }) - - await waitFor(() => expect(scene.children[0]).toBeDefined()) + const store = await act(async () => root.render()) + const { scene } = store.getState() expect(scene.children[0]).toBe(MockMesh) expect(gltf.scene).toBe(MockMesh) @@ -162,41 +145,51 @@ describe('hooks', () => { return ( <> - - + + ) } - let scene: THREE.Scene = null! - await act(async () => { - scene = createRoot(canvas) - .render( - - - , - ) - .getState().scene - }) - - await waitFor(() => expect(scene.children[0]).toBeDefined()) + const store = await act(async () => root.render()) + const { scene } = store.getState() expect(scene.children[0]).toBe(MockMesh) expect(scene.children[1]).toBe(MockGroup) expect(extensions).toBeCalledTimes(1) }) + it('can handle useLoader with an existing loader instance', async () => { + class Loader extends THREE.Loader { + load(_url: string, onLoad: (result: null) => void): void { + onLoad(null) + } + } + + const loader = new Loader() + let proto!: Loader + + function Test(): null { + return useLoader(loader, '', (loader) => (proto = loader)) + } + await act(async () => root.render()) + + expect(proto).toBe(loader) + }) + it('can handle useLoader with a loader extension', async () => { class Loader extends THREE.Loader { - load = (_url: string) => null + load(_url: string, onLoad: (result: null) => void): void { + onLoad(null) + } } let proto!: Loader - function Test() { + function Test(): null { return useLoader(Loader, '', (loader) => (proto = loader)) } - await act(async () => createRoot(canvas).render()) + await act(async () => root.render()) expect(proto).toBeInstanceOf(Loader) }) @@ -232,9 +225,7 @@ describe('hooks', () => { return } - await act(async () => { - createRoot(canvas).render() - }) + await act(async () => root.render()) expect(result).toEqual({ nodes: { @@ -254,14 +245,14 @@ describe('hooks', () => { it('can handle useInstanceHandle hook', async () => { const ref = React.createRef() - let instance!: React.MutableRefObject + let instance!: React.RefObject const Component = () => { instance = useInstanceHandle(ref) return } - await act(async () => createRoot(canvas).render()) + await act(async () => root.render()) - expect(instance.current).toBe((ref.current as unknown as Instance).__r3f) + expect(instance.current).toBe((ref.current as unknown as Instance['object']).__r3f) }) }) diff --git a/packages/fiber/tests/index.test.tsx b/packages/fiber/tests/index.test.tsx new file mode 100644 index 0000000000..a8cd26e23d --- /dev/null +++ b/packages/fiber/tests/index.test.tsx @@ -0,0 +1,384 @@ +import * as React from 'react' +import * as THREE from 'three' +import ts from 'typescript' +import * as path from 'path' +import { createCanvas } from '@react-three/test-renderer/src/createTestCanvas' +import { + ReconcilerRoot, + createRoot as createRootImpl, + act, + useFrame, + useThree, + createPortal, + RootState, + RootStore, + extend, +} from '../src/index' + +extend(THREE as any) +let root: ReconcilerRoot = null! +const roots: ReconcilerRoot[] = [] + +function createRoot() { + const canvas = createCanvas() + const root = createRootImpl(canvas) + roots.push(root) + return root +} + +beforeEach(() => (root = createRoot())) + +afterEach(async () => { + for (const root of roots) { + await act(async () => root.unmount()) + } + roots.length = 0 +}) + +describe('createRoot', () => { + it('should return a Zustand store', async () => { + const store = await act(async () => root.render(null)) + expect(() => store.getState()).not.toThrow() + }) + + it('will make an Orthographic Camera & set the position', async () => { + const store = await act(async () => + root.configure({ orthographic: true, camera: { position: [0, 0, 5] } }).render(), + ) + const { camera } = store.getState() + + expect(camera).toBeInstanceOf(THREE.OrthographicCamera) + expect(camera.position.z).toEqual(5) + }) + + // TODO: deprecate + it('should handle an performance changing functions', async () => { + let store: RootStore = null! + await act(async () => { + store = root.configure({ dpr: [1, 2], performance: { min: 0.2 } }).render() + }) + + expect(store.getState().viewport.initialDpr).toEqual(window.devicePixelRatio) + expect(store.getState().performance.min).toEqual(0.2) + expect(store.getState().performance.current).toEqual(1) + + await act(async () => { + store.getState().setDpr(0.1) + }) + + expect(store.getState().viewport.dpr).toEqual(0.1) + + jest.useFakeTimers() + + await act(async () => { + store.getState().performance.regress() + jest.advanceTimersByTime(100) + }) + + expect(store.getState().performance.current).toEqual(0.2) + + await act(async () => { + jest.advanceTimersByTime(200) + }) + + expect(store.getState().performance.current).toEqual(1) + + jest.useRealTimers() + }) + + it('should handle the DPR prop reactively', async () => { + // Initial clamp + const store = await act(async () => root.configure({ dpr: [1, 2] }).render()) + expect(store.getState().viewport.dpr).toEqual(window.devicePixelRatio) + + // Reactive update + await act(async () => store.getState().setDpr(0.1)) + expect(store.getState().viewport.dpr).toEqual(0.1) + + // Reactive clamp + await act(async () => store.getState().setDpr([1, 2])) + expect(store.getState().viewport.dpr).toEqual(window.devicePixelRatio) + }) + + it('should set PCFSoftShadowMap as the default shadow map', async () => { + const store = await act(async () => root.configure({ shadows: true }).render()) + const { gl } = store.getState() + + expect(gl.shadowMap.type).toBe(THREE.PCFSoftShadowMap) + }) + + it('should set tonemapping to ACESFilmicToneMapping and outputEncoding to sRGBEncoding if linear is false', async () => { + const store = await act(async () => root.configure({ linear: false }).render()) + const { gl } = store.getState() + + expect(gl.toneMapping).toBe(THREE.ACESFilmicToneMapping) + expect(gl.outputEncoding).toBe(THREE.sRGBEncoding) + }) + + it('should toggle render mode in xr', async () => { + let state: RootState = null! + + await act(async () => { + state = root.render().getState() + state.gl.xr.isPresenting = true + state.gl.xr.dispatchEvent({ type: 'sessionstart' }) + }) + + expect(state.gl.xr.enabled).toEqual(true) + + await act(async () => { + state.gl.xr.isPresenting = false + state.gl.xr.dispatchEvent({ type: 'sessionend' }) + }) + + expect(state.gl.xr.enabled).toEqual(false) + }) + + it('should respect frameloop="never" in xr', async () => { + let respected = true + + const Test = () => useFrame(() => (respected = false)) + + await act(async () => { + const state = root + .configure({ frameloop: 'never' }) + .render() + .getState() + state.gl.xr.isPresenting = true + state.gl.xr.dispatchEvent({ type: 'sessionstart' }) + }) + + expect(respected).toEqual(true) + }) + + it('should set renderer props via gl prop', async () => { + const store = await act(async () => root.configure({ gl: { physicallyCorrectLights: true } }).render()) + const { gl } = store.getState() + + expect(gl.physicallyCorrectLights).toBe(true) + }) + + it('should update scene via scene prop', async () => { + let scene: THREE.Scene = null! + + await act(async () => { + scene = root + .configure({ scene: { name: 'test' } }) + .render() + .getState().scene + }) + + expect(scene.name).toBe('test') + }) + + it('should set a custom scene via scene prop', async () => { + let scene: THREE.Scene = null! + + const prop = new THREE.Scene() + + await act(async () => { + scene = root + .configure({ scene: prop }) + .render() + .getState().scene + }) + + expect(prop).toBe(scene) + }) + + it('should set a renderer via gl callback', async () => { + class Renderer extends THREE.WebGLRenderer {} + + let gl: Renderer = null! + await act(async () => { + gl = root + .configure({ gl: (canvas) => new Renderer({ canvas }) }) + .render() + .getState().gl + }) + + expect(gl instanceof Renderer).toBe(true) + }) + + it('should respect color management preferences via gl', async () => { + let gl: THREE.WebGLRenderer & { outputColorSpace?: string } = null! + let texture: THREE.Texture & { colorSpace?: string } = null! + + let key = 0 + function Test() { + gl = useThree((state) => state.gl) + texture = new THREE.Texture() + return + } + + const LinearEncoding = 3000 + const sRGBEncoding = 3001 + + await act(async () => createRoot().render()) + expect(gl.outputEncoding).toBe(sRGBEncoding) + expect(gl.toneMapping).toBe(THREE.ACESFilmicToneMapping) + expect(texture.encoding).toBe(sRGBEncoding) + + // @ts-ignore + THREE.WebGLRenderer.prototype.outputColorSpace ??= '' + // @ts-ignore + THREE.Texture.prototype.colorSpace ??= '' + + await act(async () => + createRoot() + .configure({ linear: true, flat: true }) + .render(), + ) + expect(gl.outputEncoding).toBe(LinearEncoding) + expect(gl.toneMapping).toBe(THREE.NoToneMapping) + expect(texture.encoding).toBe(LinearEncoding) + + // Sets outputColorSpace since r152 + const SRGBColorSpace = 'srgb' + const LinearSRGBColorSpace = 'srgb-linear' + const NoColorSpace = '' + + await act(async () => + createRoot() + .configure({ linear: true }) + .render(), + ) + expect(gl.outputColorSpace).toBe(LinearSRGBColorSpace) + expect(texture.colorSpace).toBe(NoColorSpace) + + await act(async () => + createRoot() + .configure({ linear: false }) + .render(), + ) + expect(gl.outputColorSpace).toBe(SRGBColorSpace) + expect(texture.colorSpace).toBe(SRGBColorSpace) + + // @ts-ignore + delete THREE.WebGLRenderer.prototype.outputColorSpace + // @ts-ignore + delete THREE.Texture.prototype.colorSpace + }) + + it('should respect legacy prop', async () => { + // <= r138 internal fallback + const material = React.createRef() + extend({ ColorManagement: null! }) + await act(async () => root.render()) + expect((THREE as any).ColorManagement.legacyMode).toBe(false) + expect(material.current!.color.toArray()).toStrictEqual(new THREE.Color('#111111').convertSRGBToLinear().toArray()) + extend({ ColorManagement: (THREE as any).ColorManagement }) + + // r139 legacyMode + await act(async () => { + root.configure({ legacy: true }).render() + }) + expect((THREE as any).ColorManagement.legacyMode).toBe(true) + + await act(async () => { + root.configure({ legacy: false }).render() + }) + expect((THREE as any).ColorManagement.legacyMode).toBe(false) + + // r150 !enabled + ;(THREE as any).ColorManagement.enabled = true + + await act(async () => { + root.configure({ legacy: true }).render() + }) + expect((THREE as any).ColorManagement.enabled).toBe(false) + + await act(async () => { + root.configure({ legacy: false }).render() + }) + expect((THREE as any).ColorManagement.enabled).toBe(true) + }) +}) + +describe('createPortal', () => { + it('should create a state enclave', async () => { + const scene = new THREE.Scene() + + let state: RootState = null! + let portalState: RootState = null! + + const Normal = () => { + const three = useThree() + state = three + + return + } + + const Portal = () => { + const three = useThree() + portalState = three + + return + } + + await act(async () => { + root.render( + <> + + {createPortal(, scene, { scene })} + , + ) + }) + + // Renders into portal target + expect(scene.children.length).not.toBe(0) + + // Creates an isolated state enclave + expect(state.scene).not.toBe(scene) + expect(portalState.scene).toBe(scene) + }) + + it('should handle unmounted containers', async () => { + let groupHandle!: THREE.Group | null + function Test(props: any) { + const [group, setGroup] = React.useState(null) + groupHandle = group + + return ( + + {group && createPortal(, group)} + + ) + } + + await act(async () => root.render()) + + expect(groupHandle).toBeDefined() + const prevUUID = groupHandle!.uuid + + await act(async () => root.render()) + + expect(groupHandle).toBeDefined() + expect(prevUUID).not.toBe(groupHandle!.uuid) + }) +}) + +function getExports(source: string): string[] { + const program = ts.createProgram([source], { jsx: ts.JsxEmit.React }) + const checker = program.getTypeChecker() + const sourceFile = program.getSourceFile(source)! + + const sourceFileSymbol = checker.getSymbolAtLocation(sourceFile)! + const moduleExports = checker.getExportsOfModule(sourceFileSymbol) + + return moduleExports.map(({ escapedName }) => escapedName).sort() as unknown as string[] +} + +describe('exports', () => { + it('matches public API', () => { + const webExports = getExports(path.resolve(__dirname, '../src/index.tsx')) + expect(webExports).toMatchSnapshot() + }) + + it('are consistent between targets', () => { + const webExports = getExports(path.resolve(__dirname, '../src/index.tsx')) + const nativeExports = getExports(path.resolve(__dirname, '../src/native.tsx')) + + expect(webExports).toStrictEqual(nativeExports) + }) +}) diff --git a/packages/fiber/tests/native/canvas.test.tsx b/packages/fiber/tests/native/canvas.test.tsx deleted file mode 100644 index d7fc3a4b6d..0000000000 --- a/packages/fiber/tests/native/canvas.test.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react' -import { View } from 'react-native' -import { act, create, ReactTestRenderer } from 'react-test-renderer' - -import { Canvas } from '../../src/native' - -describe('native Canvas', () => { - it('should correctly mount', async () => { - let renderer: ReactTestRenderer = null! - - await act(async () => { - renderer = create( - - - , - ) - }) - - expect(renderer.toJSON()).toMatchSnapshot() - }) - - it('should forward ref', async () => { - const ref = React.createRef() - - await act(async () => { - create( - - - , - ) - }) - - expect(ref.current).toBeDefined() - }) - - it('should correctly unmount', async () => { - let renderer: ReactTestRenderer = null! - - await act(async () => { - renderer = create( - - - , - ) - }) - - expect(() => renderer.unmount()).not.toThrow() - }) -}) diff --git a/packages/fiber/tests/native/polyfills.test.ts b/packages/fiber/tests/polyfills.test.ts similarity index 96% rename from packages/fiber/tests/native/polyfills.test.ts rename to packages/fiber/tests/polyfills.test.ts index 24c895d343..41921e69dc 100644 --- a/packages/fiber/tests/native/polyfills.test.ts +++ b/packages/fiber/tests/polyfills.test.ts @@ -1,5 +1,5 @@ import * as THREE from 'three' -import { polyfills } from '../../src/native/polyfills' +import { polyfills } from '../src/native/polyfills' polyfills() diff --git a/packages/fiber/tests/renderer.test.tsx b/packages/fiber/tests/renderer.test.tsx new file mode 100644 index 0000000000..5dee27194f --- /dev/null +++ b/packages/fiber/tests/renderer.test.tsx @@ -0,0 +1,751 @@ +import * as React from 'react' +import * as THREE from 'three' +import { ReconcilerRoot, createRoot, act, extend, ThreeElement, ThreeElements } from '../src/index' +import { suspend } from 'suspend-react' + +extend(THREE as any) + +class Mock extends THREE.Group { + static instances: string[] + constructor(name: string = '') { + super() + this.name = name + Mock.instances.push(name) + } +} + +declare module '@react-three/fiber' { + interface ThreeElements { + mock: ThreeElement + } +} + +extend({ Mock }) + +type ComponentMesh = THREE.Mesh + +const expectToThrow = async (callback: () => any, message: string) => { + let error: Error | undefined + try { + await callback() + } catch (e) { + error = e as Error + } + expect(error?.message).toBe(message) +} + +describe('renderer', () => { + let root: ReconcilerRoot = null! + + beforeEach(() => { + root = createRoot(document.createElement('canvas')) + Mock.instances = [] + }) + afterEach(async () => act(async () => root.unmount())) + + it('should render empty JSX', async () => { + const store = await act(async () => root.render(null)) + const { scene } = store.getState() + + expect(scene.children.length).toBe(0) + }) + + it('should render native elements', async () => { + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBeInstanceOf(THREE.Group) + expect(scene.children[0].name).toBe('native') + }) + + it('should render extended elements', async () => { + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBeInstanceOf(Mock) + expect(scene.children[0].name).toBe('mock') + + const Component = extend(THREE.Mesh) + await act(async () => root.render()) + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBeInstanceOf(THREE.Mesh) + }) + + it('should render primitives', async () => { + const object = new THREE.Object3D() + + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBe(object) + expect(object.name).toBe('primitive') + }) + + it('should remove children from primitive when unmounted', async () => { + const object = new THREE.Group() + + function Parent({ children, show }: { children: React.ReactNode; show: boolean }) { + return show ? {children} : null + } + + function Component({ show }: { show: boolean }) { + return ( + + + + + ) + } + + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBe(object) + expect(object.children.length).toBe(2) + + await act(async () => root.render()) + + expect(scene.children.length).toBe(0) + expect(object.children.length).toBe(0) + }) + + it('should remove then add children from primitive when key changes', async () => { + const object = new THREE.Group() + + function Parent({ children, primitiveKey }: { children: React.ReactNode; primitiveKey: string }) { + return ( + + {children} + + ) + } + + function Component({ primitiveKey }: { primitiveKey: string }) { + return ( + + + + + ) + } + + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBe(object) + expect(object.children.length).toBe(2) + + await act(async () => root.render()) + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBe(object) + expect(object.children.length).toBe(2) + }) + + it('should go through lifecycle', async () => { + const lifecycle: string[] = [] + + function Test() { + React.useInsertionEffect(() => void lifecycle.push('useInsertionEffect'), []) + React.useImperativeHandle(React.useRef(null), () => { + lifecycle.push('refCallback') + return null + }) + React.useLayoutEffect(() => void lifecycle.push('useLayoutEffect'), []) + React.useEffect(() => void lifecycle.push('useEffect'), []) + lifecycle.push('render') + return void lifecycle.push('ref')} /> + } + await act(async () => root.render()) + + expect(lifecycle).toStrictEqual([ + 'render', + 'useInsertionEffect', + 'ref', + 'refCallback', + 'useLayoutEffect', + 'useEffect', + ]) + }) + + it('should forward ref three object', async () => { + // Note: Passing directly should be less strict, and assigning current should be more strict + let immutableRef!: React.RefObject + let mutableRef!: React.RefObject + let mutableRefSpecific!: React.RefObject + + const RefTest = () => { + immutableRef = React.createRef() + mutableRef = React.useRef(null) + mutableRefSpecific = React.useRef(null) + + return ( + <> + + + (mutableRefSpecific.current = r)} /> + + ) + } + + await act(async () => root.render()) + + expect(immutableRef.current).toBeInstanceOf(THREE.Mesh) + expect(mutableRef.current).toBeInstanceOf(THREE.Mesh) + expect(mutableRefSpecific.current).toBeInstanceOf(THREE.Mesh) + }) + + it('should handle children', async () => { + const Test = () => ( + + + + ) + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBeInstanceOf(THREE.Group) + expect(scene.children[0].children.length).toBe(1) + expect(scene.children[0].children[0]).toBeInstanceOf(THREE.Mesh) + }) + + it('should handle attach', async () => { + const lifecycle: string[] = [] + + const Test = () => { + return ( + + + + + void lifecycle.push('mount')} + attach={() => (lifecycle.push('attach'), () => lifecycle.push('detach'))} + /> + + ) + } + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(1) + expect(scene.children[0]).toBeInstanceOf(THREE.Mesh) + // Handles geometry & material attach + expect((scene.children[0] as ComponentMesh).geometry).toBeInstanceOf(THREE.BoxGeometry) + expect((scene.children[0] as ComponentMesh).material).toBeInstanceOf(THREE.MeshStandardMaterial) + // Handles nested attach + expect(scene.children[0].userData.group).toBeInstanceOf(THREE.Group) + // attach bypasses scene-graph + expect(scene.children[0].children.length).toBe(0) + // attaches before presenting + expect(lifecycle).toStrictEqual(['attach', 'mount']) + }) + + it('should update props reactively', async () => { + const store = await act(async () => root.render()) + const { scene } = store.getState() + const group = scene.children[0] as THREE.Group + + // Initial + expect(group.name).toBe(new THREE.Group().name) + + // Set + await act(async () => root.render()) + expect(group.name).toBe('one') + + // Update + await act(async () => root.render()) + expect(group.name).toBe('two') + + // Unset + await act(async () => root.render()) + expect(group.name).toBe(new THREE.Group().name) + }) + + it('should handle event props reactively', async () => { + const store = await act(async () => root.render()) + const { scene, internal } = store.getState() + const mesh = scene.children[0] as ComponentMesh + mesh.name = 'current' + + // Initial + expect(internal.interaction.length).toBe(0) + + // Set + await act(async () => root.render( void 0} />)) + expect(internal.interaction.length).toBe(1) + expect(internal.interaction).toStrictEqual([mesh]) + + // Update + await act(async () => root.render( void 0} />)) + expect(internal.interaction.length).toBe(1) + expect(internal.interaction).toStrictEqual([mesh]) + + // Unset + await act(async () => root.render()) + expect(internal.interaction.length).toBe(0) + }) + + it('should handle the args prop reactively', async () => { + const ref = React.createRef() + const child = React.createRef() + const attachedChild = React.createRef() + + const Test = (props: ThreeElements['mesh']) => ( + + + + + ) + + // Initial + await act(async () => root.render()) + expect(ref.current!.geometry).toBeInstanceOf(THREE.BufferGeometry) + expect(ref.current!.geometry).not.toBeInstanceOf(THREE.BoxGeometry) + expect(ref.current!.material).toBeInstanceOf(THREE.Material) + expect(ref.current!.material).not.toBeInstanceOf(THREE.MeshStandardMaterial) + expect(ref.current!.children[0]).toBe(child.current) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + + // Throw on non-array value + await expectToThrow( + async () => await act(async () => root.render()), + 'R3F: The args prop must be an array!', + ) + + // Set + const geometry1 = new THREE.BoxGeometry() + const material1 = new THREE.MeshStandardMaterial() + await act(async () => root.render()) + expect(ref.current!.geometry).toBe(geometry1) + expect(ref.current!.material).toBe(material1) + expect(ref.current!.children[0]).toBe(child.current) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + + // Update + const geometry2 = new THREE.BoxGeometry() + const material2 = new THREE.MeshStandardMaterial() + await act(async () => root.render()) + expect(ref.current!.geometry).toBe(geometry2) + expect(ref.current!.material).toBe(material2) + expect(ref.current!.children[0]).toBe(child.current) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + + // Unset + await act(async () => root.render()) + expect(ref.current!.geometry).toBeInstanceOf(THREE.BufferGeometry) + expect(ref.current!.geometry).not.toBeInstanceOf(THREE.BoxGeometry) + expect(ref.current!.material).toBeInstanceOf(THREE.Material) + expect(ref.current!.material).not.toBeInstanceOf(THREE.MeshStandardMaterial) + expect(ref.current!.children[0]).toBe(child.current) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + }) + + it('should handle the object prop reactively', async () => { + const ref = React.createRef() + const child = React.createRef() + const attachedChild = React.createRef() + + const Test = (props: ThreeElements['primitive']) => ( + + + + + ) + + const object1 = new THREE.Object3D() + const child1 = new THREE.Object3D() + object1.add(child1) + + const object2 = new THREE.Object3D() + const child2 = new THREE.Object3D() + object2.add(child2) + + // Initial + await act(async () => root.render()) + expect(ref.current).toBe(object1) + expect(ref.current!.children).toStrictEqual([child1, child.current]) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + + // Throw on undefined + await expectToThrow( + async () => await act(async () => root.render()), + "R3F: Primitives without 'object' are invalid!", + ) + + // Update + await act(async () => root.render()) + expect(ref.current).toBe(object2) + expect(ref.current!.children).toStrictEqual([child2, child.current]) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + + // Revert + await act(async () => root.render()) + expect(ref.current).toBe(object1) + expect(ref.current!.children).toStrictEqual([child1, child.current]) + expect(ref.current!.userData.attach).toBe(attachedChild.current) + }) + + it('should handle unmount', async () => { + const dispose = jest.fn() + const childDispose = jest.fn() + const attachDispose = jest.fn() + const flagDispose = jest.fn() + + const attach = jest.fn() + const detach = jest.fn() + + const object = Object.assign(new THREE.Object3D(), { dispose: jest.fn() }) + const objectExternal = Object.assign(new THREE.Object3D(), { dispose: jest.fn() }) + object.add(objectExternal) + + const disposeDeclarativePrimitive = jest.fn() + + const Test = (props: ThreeElements['mesh']) => ( + { + if (!self) return + self.dispose = dispose + }} + onClick={() => void 0}> + { + if (!self) return + self.dispose = childDispose + }} + /> + { + if (!self) return + self.dispose = attachDispose + }} + attach={() => (attach(), detach)} + /> + { + if (!self) return + self.dispose = flagDispose + }} + /> + + { + if (!self) return + self.dispose = disposeDeclarativePrimitive + }} + /> + + + ) + + const store = await act(async () => root.render()) + await act(async () => root.render(null)) + + const { scene, internal } = store.getState() + + // Cleans up scene-graph + expect(scene.children.length).toBe(0) + // Removes events + expect(internal.interaction.length).toBe(0) + // Calls dispose on top-level instance + expect(dispose).toHaveBeenCalled() + // Also disposes of children + expect(childDispose).toHaveBeenCalled() + // Disposes of attached children + expect(attachDispose).toHaveBeenCalled() + // Properly detaches attached children + expect(attach).toHaveBeenCalledTimes(1) + expect(detach).toHaveBeenCalledTimes(1) + // Respects dispose={null} + expect(flagDispose).not.toHaveBeenCalled() + // Does not dispose of primitives + expect(object.dispose).not.toHaveBeenCalled() + // Only disposes of declarative primitive children + expect(objectExternal.dispose).not.toHaveBeenCalled() + expect(disposeDeclarativePrimitive).toHaveBeenCalled() + }) + + it('can swap 4 array primitives', async () => { + const a = new THREE.Group() + a.name = 'a' + const b = new THREE.Group() + b.name = 'b' + const c = new THREE.Group() + c.name = 'c' + const d = new THREE.Group() + d.name = 'd' + + const Test = ({ array }: { array: THREE.Group[] }) => ( + <> + {array.map((group, i) => ( + + ))} + + ) + + const array = [a, b, c, d] + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.map((o) => o.name)).toStrictEqual(array.map((o) => o.name)) + + const reversedArray = [d, c, b, a] + await act(async () => root.render()) + expect(scene.children.map((o) => o.name)).toStrictEqual(reversedArray.map((o) => o.name)) + + const mixedArray = [b, a, d, c] + await act(async () => root.render()) + expect(scene.children.map((o) => o.name)).toStrictEqual(mixedArray.map((o) => o.name)) + }) + + // https://github.com/pmndrs/react-three-fiber/issues/3125 + // https://github.com/pmndrs/react-three-fiber/issues/3143 + it('can swap 4 array primitives via attach', async () => { + const a = new THREE.Group() + a.name = 'a' + const b = new THREE.Group() + b.name = 'b' + const c = new THREE.Group() + c.name = 'c' + const d = new THREE.Group() + d.name = 'd' + const array = [a, b, c, d] + + const Test = ({ array }: { array: THREE.Group[] }) => ( + <> + {array.map((group, i) => ( + + ))} + + ) + + const store = await act(async () => root.render()) + const { scene } = store.getState() + + expect(scene.children.length).toBe(0) + expect(scene.userData.objects.map((o: THREE.Object3D) => o.name)).toStrictEqual(array.map((o) => o.name)) + + const reversedArray = [d, c, b, a] + await act(async () => root.render()) + expect(scene.children.length).toBe(0) + expect(scene.userData.objects.map((o: THREE.Object3D) => o.name)).toStrictEqual(reversedArray.map((o) => o.name)) + + const mixedArray = [b, a, d, c] + await act(async () => root.render()) + expect(scene.children.length).toBe(0) + expect(scene.userData.objects.map((o: THREE.Object3D) => o.name)).toStrictEqual(mixedArray.map((o) => o.name)) + }) + + it('should gracefully handle text', async () => { + // Mount + await act(async () => root.render(<>one)) + // Update + await act(async () => root.render(<>two)) + // Unmount + await act(async () => root.render(<>)) + // Suspense + const Test = () => suspend(async () => <>four, []) + await act(async () => root.render()) + }) + + it('should gracefully interrupt when building up the tree', async () => { + const calls: string[] = [] + let lastAttached!: string | undefined + let lastMounted!: string | undefined + + function SuspenseComponent({ reconstruct = false }: { reconstruct?: boolean }) { + suspend(async (reconstruct) => reconstruct, [reconstruct]) + + return ( + + void (lastMounted = self?.uuid)} + attach={(_, self) => { + calls.push('attach') + lastAttached = self.uuid + return () => calls.push('detach') + }} + /> + + ) + } + + function Test(props: { reconstruct?: boolean }) { + React.useLayoutEffect(() => void calls.push('useLayoutEffect'), []) + + return ( + + + + ) + } + + await act(async () => root.render()) + + // Should complete tree before layout-effects fire + expect(calls).toStrictEqual(['attach', 'useLayoutEffect']) + expect(lastAttached).toBe(lastMounted) + expect(Mock.instances).toStrictEqual(['suspense', 'parent', 'child']) + + await act(async () => root.render()) + + expect(calls).toStrictEqual(['attach', 'useLayoutEffect', 'detach', 'attach']) + expect(lastAttached).toBe(lastMounted) + expect(Mock.instances).toStrictEqual(['suspense', 'parent', 'child', 'parent', 'child']) + }) + + it('should toggle visibility during Suspense non-destructively', async () => { + const a = Promise.resolve(new THREE.Object3D()) + const b = Promise.resolve(new THREE.Object3D()) + + function AsyncPrimitive({ object }: { object: Promise }) { + return + } + + for (let i = 0; i < 3; i++) { + await act(async () => + root.render( + + + , + ), + ) + } + + expect((await a).visible).toBe(true) + expect((await b).visible).toBe(true) + }) + + it('should hide suspended objects when displaying fallback', async () => { + const a = new THREE.Object3D() + const b = new THREE.Object3D() + const fallback = new THREE.Object3D() + + let resolveA: () => void + const aPromise = new Promise((res) => { + resolveA = () => res(a) + }) + + let resolveB: () => void + const bPromise = new Promise((res) => { + resolveB = () => res(b) + }) + + function Fallback() { + return + } + + function AsyncPrimitive({ object }: { object: Promise }) { + return + } + + // Mount unresolved A promise. + // Fallback should be mounted and nothing else. + const store = await act(async () => + root.render( + }> + + , + ), + ) + + const scene = store.getState().scene as THREE.Scene + + expect(a.visible).toBe(true) + expect(b.visible).toBe(true) + expect(scene.children.includes(fallback)).toBe(true) + expect(scene.children.includes(a)).toBe(false) + + // Resolve A promise. + // A should be mounted and visible and fallback should be unmounted. + await act(async () => resolveA()) + await act(async () => + root.render( + }> + + , + ), + ) + + expect(a.visible).toBe(true) + expect(b.visible).toBe(true) + expect(scene.children.includes(fallback)).toBe(false) + expect(scene.children.includes(a)).toBe(true) + + // Mount unresolved B promise. + // A should remain mounted but be invisible, Fallback is mounted, B is unmounted. + await act(async () => + root.render( + }> + + , + ), + ) + + expect(a.visible).toBe(false) + expect(b.visible).toBe(true) + expect(scene.children.includes(fallback)).toBe(true) + expect(scene.children.includes(a)).toBe(true) + expect(scene.children.includes(b)).toBe(false) + + // Resolve B promise. + // B should be mounted and visible, fallback should be unmounted, A also unmounted and unhidden. + await act(async () => resolveB()) + await act(async () => + root.render( + }> + + , + ), + ) + + expect(a.visible).toBe(true) + expect(b.visible).toBe(true) + expect(scene.children.includes(fallback)).toBe(false) + expect(scene.children.includes(a)).toBe(false) + expect(scene.children.includes(b)).toBe(true) + + // Remount resolved A promise. + // A should be mounted and visible, B should be unmounted and visible (not hidden), fallback should be unmounted. + await act(async () => + root.render( + }> + + , + ), + ) + + expect(a.visible).toBe(true) + expect(b.visible).toBe(true) + expect(scene.children.includes(fallback)).toBe(false) + expect(scene.children.includes(a)).toBe(true) + expect(scene.children.includes(b)).toBe(false) + }) + + it('preserves camera frustum props for perspective', async () => { + const store = await act(async () => root.configure({ camera: { aspect: 0 } }).render(null)) + const camera = store.getState().camera as THREE.PerspectiveCamera + expect(camera.aspect).toBe(0) + }) + + it('preserves camera frustum props for orthographic', async () => { + const store = await act(async () => + root.configure({ orthographic: true, camera: { left: 0, right: 0, top: 0, bottom: 0 } }).render(null), + ) + const camera = store.getState().camera as THREE.OrthographicCamera + expect(camera.left).toBe(0) + expect(camera.right).toBe(0) + expect(camera.top).toBe(0) + expect(camera.bottom).toBe(0) + }) +}) diff --git a/packages/fiber/tests/setupTests.ts b/packages/fiber/tests/setupTests.ts deleted file mode 100644 index 25cf2d8636..0000000000 --- a/packages/fiber/tests/setupTests.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { WebGL2RenderingContext } from '@react-three/test-renderer/src/WebGL2RenderingContext' -import * as THREE from 'three' -import { extend } from '../src' - -globalThis.WebGL2RenderingContext = WebGL2RenderingContext as any -globalThis.WebGLRenderingContext = class WebGLRenderingContext extends WebGL2RenderingContext {} as any - -HTMLCanvasElement.prototype.getContext = function (this: HTMLCanvasElement) { - return new WebGL2RenderingContext(this) as any -} - -// Extend catalogue for render API in tests -extend(THREE) diff --git a/packages/fiber/tests/utils.test.ts b/packages/fiber/tests/utils.test.ts new file mode 100644 index 0000000000..eda8d7e41a --- /dev/null +++ b/packages/fiber/tests/utils.test.ts @@ -0,0 +1,471 @@ +import * as THREE from 'three' +import { type RootStore, type Instance, act, createRoot } from '../src' +import { + is, + dispose, + REACT_INTERNAL_PROPS, + getInstanceProps, + prepare, + resolve, + attach, + detach, + RESERVED_PROPS, + diffProps, + applyProps, + updateCamera, + findInitialRoot, +} from '../src/core/utils' + +function createMockStore(): RootStore { + let store!: RootStore + + try { + act(async () => (store = createRoot(document.createElement('canvas')).render(null))).then(() => null) + } catch (e) { + console.error(e) + } + + return store +} + +const store = createMockStore() + +describe('is', () => { + const myFunc = () => null + const myObj = { myProp: 'test-prop' } + const myStr = 'test-string' + const myNum = 1 + const myUnd = undefined + const myArr = [1, 2, 3] + + it('should tell me if something is a function', () => { + expect(is.fun(myFunc)).toBe(true) + + expect(is.fun(myObj)).toBe(false) + expect(is.fun(myStr)).toBe(false) + expect(is.fun(myNum)).toBe(false) + expect(is.fun(myUnd)).toBe(false) + expect(is.fun(myArr)).toBe(false) + }) + it('should tell me if something is an object', () => { + expect(is.obj(myFunc)).toBe(false) + + expect(is.obj(myObj)).toBe(true) + + expect(is.obj(myStr)).toBe(false) + expect(is.obj(myNum)).toBe(false) + expect(is.obj(myUnd)).toBe(false) + expect(is.obj(myArr)).toBe(false) + }) + it('should tell me if something is a string', () => { + expect(is.str(myFunc)).toBe(false) + expect(is.str(myObj)).toBe(false) + + expect(is.str(myStr)).toBe(true) + + expect(is.str(myNum)).toBe(false) + expect(is.str(myUnd)).toBe(false) + expect(is.str(myArr)).toBe(false) + }) + it('should tell me if something is a number', () => { + expect(is.num(myFunc)).toBe(false) + expect(is.num(myObj)).toBe(false) + expect(is.num(myStr)).toBe(false) + + expect(is.num(myNum)).toBe(true) + + expect(is.num(myUnd)).toBe(false) + expect(is.num(myArr)).toBe(false) + }) + it('should tell me if something is undefined', () => { + expect(is.und(myFunc)).toBe(false) + expect(is.und(myObj)).toBe(false) + expect(is.und(myStr)).toBe(false) + expect(is.und(myNum)).toBe(false) + + expect(is.und(myUnd)).toBe(true) + + expect(is.und(myArr)).toBe(false) + }) + it('should tell me if something is an array', () => { + expect(is.arr(myFunc)).toBe(false) + expect(is.arr(myObj)).toBe(false) + expect(is.arr(myStr)).toBe(false) + expect(is.arr(myNum)).toBe(false) + expect(is.arr(myUnd)).toBe(false) + + expect(is.arr(myArr)).toBe(true) + }) + it('should tell me if something is equal', () => { + expect(is.equ([], '')).toBe(false) + + expect(is.equ('hello', 'hello')).toBe(true) + expect(is.equ(1, 1)).toBe(true) + + const obj = { type: 'Mesh' } + expect(is.equ(obj, obj)).toBe(true) + expect(is.equ({}, {})).toBe(false) + expect(is.equ({}, {}, { objects: 'reference' })).toBe(false) + expect(is.equ({}, {}, { objects: 'shallow' })).toBe(true) + expect(is.equ({ a: 1 }, { a: 1 })).toBe(false) + expect(is.equ({ a: 1 }, { a: 1 }, { objects: 'reference' })).toBe(false) + expect(is.equ({ a: 1 }, { a: 1 }, { objects: 'shallow' })).toBe(true) + expect(is.equ({ a: 1, b: 1 }, { a: 1 }, { objects: 'shallow' })).toBe(false) + expect(is.equ({ a: 1 }, { a: 1, b: 1 }, { objects: 'shallow' })).toBe(false) + expect(is.equ({ a: 1 }, { a: 1, b: 1 }, { objects: 'shallow', strict: false })).toBe(true) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3] }, { arrays: 'reference', objects: 'reference' })).toBe(false) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3] }, { objects: 'reference' })).toBe(false) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3] }, { objects: 'shallow' })).toBe(true) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3, 4] }, { objects: 'shallow' })).toBe(false) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3, 4] }, { objects: 'shallow', strict: false })).toBe(true) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3], b: 1 }, { objects: 'shallow' })).toBe(false) + expect(is.equ({ a: [1, 2, 3] }, { a: [1, 2, 3], b: 1 }, { objects: 'shallow', strict: false })).toBe(true) + + const arr = [1, 2, 3] + expect(is.equ(arr, arr)).toBe(true) + expect(is.equ([], [])).toBe(true) + expect(is.equ([], [], { arrays: 'reference' })).toBe(false) + expect(is.equ([], [], { arrays: 'shallow' })).toBe(true) + expect(is.equ([1, 2, 3], [1, 2, 3])).toBe(true) + expect(is.equ([1, 2, 3], [1, 2, 3], { arrays: 'shallow' })).toBe(true) + expect(is.equ([1, 2, 3], [1, 2, 3], { arrays: 'reference' })).toBe(false) + expect(is.equ([1, 2], [1, 2, 3])).toBe(false) + expect(is.equ([1, 2, 3, 4], [1, 2, 3])).toBe(false) + expect(is.equ([1, 2], [1, 2, 3], { strict: false })).toBe(true) + }) +}) + +describe('dispose', () => { + it('should dispose of objects and their properties', () => { + const mesh = Object.assign(new THREE.Mesh(), { dispose: jest.fn() }) + mesh.material.dispose = jest.fn() + mesh.geometry.dispose = jest.fn() + + dispose(mesh) + expect(mesh.dispose).toHaveBeenCalled() + expect(mesh.material.dispose).toHaveBeenCalled() + expect(mesh.geometry.dispose).toHaveBeenCalled() + }) + + it('should not dispose of a THREE.Scene', () => { + const scene = Object.assign(new THREE.Scene(), { dispose: jest.fn() }) + + dispose(scene) + expect(scene.dispose).not.toHaveBeenCalled() + + const disposable = { dispose: jest.fn(), scene } + dispose(disposable) + expect(disposable.dispose).toHaveBeenCalled() + expect(disposable.scene.dispose).not.toHaveBeenCalled() + }) +}) + +describe('getInstanceProps', () => { + it('should filter internal props without accessing them', () => { + const get = jest.fn() + const set = jest.fn() + + const props = { foo: true } + const filtered = getInstanceProps( + REACT_INTERNAL_PROPS.reduce((acc, key) => ({ ...acc, [key]: { get, set } }), props), + ) + + expect(filtered).toStrictEqual(props) + expect(get).not.toHaveBeenCalled() + expect(set).not.toHaveBeenCalled() + }) +}) + +describe('prepare', () => { + it('should create an instance descriptor', () => { + const object = new THREE.Object3D() + const instance = prepare(object, store, 'object3D', { name: 'object' }) + + expect(instance.root).toBe(store) + expect(instance.type).toBe('object3D') + expect(instance.props.name).toBe('object') + expect(instance.object).toBe(object) + expect((object as Instance['object']).__r3f).toBe(instance) + }) + + it('should not overwrite descriptors', () => { + const containerDesc = {} + const container = { __r3f: containerDesc } + + const instance = prepare(container, store, 'container', {}) + expect(container.__r3f).toBe(containerDesc) + expect(instance).toBe(containerDesc) + }) +}) + +describe('resolve', () => { + it('should resolve pierced props', () => { + const object = { foo: { bar: 1 } } + const { root, key, target } = resolve(object, 'foo-bar') + + expect(root).toBe(object['foo']) + expect(key).toBe('bar') + expect(target).toBe(root[key]) + }) + + it('should switch roots for atomic targets', () => { + const bar = new THREE.Vector3() + const object = { foo: { bar } } + const { root, key, target } = resolve(object, 'foo-bar') + + expect(root).toBe(object) + expect(key).toBe('bar') + expect(target).toBe(bar) + }) +}) + +describe('attach / detach', () => { + it('should attach & detach using string values', () => { + const parent = prepare({ prop: null }, store, '', {}) + const child = prepare({}, store, '', { attach: 'prop' }) + + attach(parent, child) + expect(parent.object.prop).toBe(child.object) + expect(child.previousAttach).toBe(null) + + detach(parent, child) + expect(parent.object.prop).toBe(null) + expect(child.previousAttach).toBe(undefined) + }) + + it('should attach & detach using attachFns', () => { + const mount = jest.fn() + const unmount = jest.fn() + + const parent = prepare({}, store, '', {}) + const child = prepare({}, store, '', { attach: () => (mount(), unmount) }) + + attach(parent, child) + expect(mount).toBeCalledTimes(1) + expect(unmount).toBeCalledTimes(0) + expect(child.previousAttach).toBe(unmount) + + detach(parent, child) + expect(mount).toBeCalledTimes(1) + expect(unmount).toBeCalledTimes(1) + expect(child.previousAttach).toBe(undefined) + }) + + it('should create array when using array-index syntax', () => { + const parent = prepare({ prop: null }, store, '', {}) + const child = prepare({}, store, '', { attach: 'prop-0' }) + + attach(parent, child) + expect(parent.object.prop).toStrictEqual([child.object]) + expect(child.previousAttach).toBe(undefined) + + detach(parent, child) + expect((parent.object.prop as unknown as Array).length).toBe(1) + expect((parent.object.prop as unknown as Array)[0]).toBe(undefined) + expect(child.previousAttach).toBe(undefined) + }) +}) + +describe('diffProps', () => { + it('should filter changed props', () => { + const instance = prepare({}, store, '', { foo: true }) + const newProps = { foo: true, bar: false } + + const filtered = diffProps(instance, newProps) + expect(filtered).toStrictEqual({ bar: false }) + }) + + it('invalidates pierced props when root is changed', async () => { + const texture1 = { needsUpdate: false, name: '' } as THREE.Texture + const texture2 = { needsUpdate: false, name: '' } as THREE.Texture + + const oldProps = { map: texture1, 'map-needsUpdate': true, 'map-name': 'test' } + const newProps = { map: texture2, 'map-needsUpdate': true, 'map-name': 'test' } + + const instance = prepare({}, store, '', oldProps) + const filtered = diffProps(instance, newProps) + expect(filtered).toStrictEqual(newProps) + }) + + it('should pick removed props for HMR', () => { + const instance = prepare(new THREE.Object3D(), store, '', { position: [0, 0, 1] }) + const newProps = {} + + const filtered = diffProps(instance, newProps) + expect(filtered).toStrictEqual({ position: new THREE.Object3D().position }) + }) + + it('should reset removed props for HMR', () => { + const instance = prepare(new THREE.Object3D(), store, '', { scale: 10 }) + const filtered = diffProps(instance, {}) + expect((filtered.scale as THREE.Vector3).toArray()).toStrictEqual([1, 1, 1]) + }) + + it('should filter reserved props without accessing them', () => { + const get = jest.fn() + const set = jest.fn() + + const props = { foo: true } + const filtered = diffProps( + prepare({}, store, '', {}), + RESERVED_PROPS.reduce((acc, key) => ({ ...acc, [key]: { get, set } }), props), + ) + + expect(filtered).toStrictEqual(props) + expect(get).not.toHaveBeenCalled() + expect(set).not.toHaveBeenCalled() + }) +}) + +describe('applyProps', () => { + it('should apply props to foreign objects', () => { + const target = new THREE.Object3D() + expect(() => applyProps(target, {})).not.toThrow() + }) + + it('should filter reserved props without accessing them', () => { + const get = jest.fn() + const set = jest.fn() + + const props = { foo: true } + const target = {} + applyProps( + target, + RESERVED_PROPS.reduce((acc, key) => ({ ...acc, [key]: { get, set } }), props), + ) + + expect(target).toStrictEqual(props) + expect(get).not.toHaveBeenCalled() + expect(set).not.toHaveBeenCalled() + }) + + it('should overwrite non-atomic properties', () => { + const foo = { value: true } + const target = { foo } + applyProps(target, { foo: { value: false } }) + + expect(target.foo).not.toBe(foo) + expect(target.foo.value).toBe(false) + }) + + it('should prefer to copy from external props', async () => { + const copyMock = jest.fn() + + class MockedColor extends THREE.Color { + override copy(other: MockedColor) { + copyMock() + return super.copy(other) + } + } + + const color = new MockedColor() + + const target = { color, layer: new THREE.Layers() } + + // Same constructor, copy + applyProps(target, { color: new MockedColor() }) + expect(target.color).toBeInstanceOf(MockedColor) + expect(copyMock).toHaveBeenCalledTimes(1) + + // Same constructor, Layers + const layer = new THREE.Layers() + layer.mask = 5 + applyProps(target, { layer }) + expect(target.layer).toBeInstanceOf(THREE.Layers) + expect(target.layer.mask).toBe(layer.mask) + + // Different constructor, overwrite + applyProps(target, { color: new THREE.Vector3() }) + expect(target.color).toBeInstanceOf(THREE.Vector3) + expect(copyMock).toHaveBeenCalledTimes(1) + }) + + it('should prefer to set when props are an array', async () => { + const target = new THREE.Object3D() + applyProps(target, { position: [1, 2, 3] }) + + expect(target.position.toArray()).toStrictEqual([1, 2, 3]) + }) + + it('should set with scalar shorthand where applicable', async () => { + // Vector3#setScalar + const target = new THREE.Object3D() + applyProps(target, { scale: 5 }) + expect(target.scale.toArray()).toStrictEqual([5, 5, 5]) + + // Color#set + const material = new THREE.MeshBasicMaterial() + applyProps(material, { color: 0x000000 }) + expect(material.color.getHex()).toBe(0x000000) + + // No-op on undefined + const mesh = new THREE.Mesh() + applyProps(mesh, { position: undefined }) + expect(mesh.position.toArray()).toStrictEqual([0, 0, 0]) + }) + + it('should pierce into nested properties', () => { + const target = new THREE.Mesh() + applyProps(target, { 'material-color': 0x000000 }) + + expect(target.material.color.getHex()).toBe(0x000000) + }) + + it('should not apply a prop if it is undefined', async () => { + const target = { value: 'initial' } + applyProps(target, { value: undefined }) + + expect(target.value).toBe('initial') + }) +}) + +describe('updateCamera', () => { + it('updates camera matrices', () => { + const size = { width: 1280, height: 800, left: 0, top: 0 } + + const perspective = new THREE.PerspectiveCamera() + perspective.updateProjectionMatrix = jest.fn() + updateCamera(perspective, size) + expect(perspective.updateProjectionMatrix).toHaveBeenCalled() + expect(perspective.projectionMatrix.toArray()).toMatchSnapshot() + + const orthographic = new THREE.OrthographicCamera() + orthographic.updateProjectionMatrix = jest.fn() + updateCamera(orthographic, size) + expect(orthographic.updateProjectionMatrix).toHaveBeenCalled() + expect(orthographic.projectionMatrix.toArray()).toMatchSnapshot() + }) + + it('respects camera.manual', () => { + const size = { width: 0, height: 0, left: 0, top: 0 } + + const perspective = Object.assign(new THREE.PerspectiveCamera(), { manual: true }) + perspective.updateProjectionMatrix = jest.fn() + updateCamera(perspective, size) + expect(perspective.updateProjectionMatrix).not.toHaveBeenCalled() + + const orthographic = Object.assign(new THREE.OrthographicCamera(), { manual: true }) + orthographic.updateProjectionMatrix = jest.fn() + updateCamera(orthographic, size) + expect(orthographic.updateProjectionMatrix).not.toHaveBeenCalled() + }) +}) + +describe('findInitialRoot', () => { + it('finds the nearest root for portals', () => { + const portalStore = createMockStore() + portalStore.getState().previousRoot = store + + const instance = prepare(new THREE.Object3D(), portalStore, '', {}) + const root = findInitialRoot(instance) + + expect(root).toBe(store) + }) + + it('falls back to the local root', () => { + const instance = prepare(new THREE.Object3D(), store, '', {}) + const root = findInitialRoot(instance) + + expect(root).toBe(store) + }) +}) diff --git a/packages/shared/pointerEventPolyfill.ts b/packages/shared/pointerEventPolyfill.ts deleted file mode 100644 index 2eb497e381..0000000000 --- a/packages/shared/pointerEventPolyfill.ts +++ /dev/null @@ -1,32 +0,0 @@ -// PointerEvent is not in JSDOM -// https://github.com/jsdom/jsdom/pull/2666#issuecomment-691216178 -export const pointerEventPolyfill = () => { - if (!global.PointerEvent) { - class PointerEvent extends MouseEvent { - public height?: number - public isPrimary?: boolean - public pointerId?: number - public pointerType?: string - public pressure?: number - public tangentialPressure?: number - public tiltX?: number - public tiltY?: number - public twist?: number - public width?: number - - constructor(type: string, params: PointerEventInit = {}) { - super(type, params) - this.pointerId = params.pointerId - this.width = params.width - this.height = params.height - this.pressure = params.pressure - this.tangentialPressure = params.tangentialPressure - this.tiltX = params.tiltX - this.tiltY = params.tiltY - this.pointerType = params.pointerType - this.isPrimary = params.isPrimary - } - } - global.PointerEvent = PointerEvent as any - } -} diff --git a/packages/shared/setupTests.ts b/packages/shared/setupTests.ts index 7b0e01e629..640b6f69d4 100644 --- a/packages/shared/setupTests.ts +++ b/packages/shared/setupTests.ts @@ -1,21 +1,48 @@ -import 'regenerator-runtime/runtime' -import { pointerEventPolyfill } from './pointerEventPolyfill' +import * as THREE from 'three' +import { WebGL2RenderingContext } from '@react-three/test-renderer/src/WebGL2RenderingContext' +import { extend } from '@react-three/fiber' declare global { var IS_REACT_ACT_ENVIRONMENT: boolean + var IS_REACT_NATIVE_TEST_ENVIRONMENT: boolean // https://github.com/facebook/react/pull/28419 } // Let React know that we'll be testing effectful components global.IS_REACT_ACT_ENVIRONMENT = true +global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true // hide react-test-renderer warnings -pointerEventPolyfill() +// PointerEvent is not in JSDOM +// https://github.com/jsdom/jsdom/pull/2666#issuecomment-691216178 +// https://w3c.github.io/pointerevents/#pointerevent-interface +if (!global.PointerEvent) { + global.PointerEvent = class extends MouseEvent implements PointerEvent { + readonly pointerId: number = 0 + readonly width: number = 1 + readonly height: number = 1 + readonly pressure: number = 0 + readonly tangentialPressure: number = 0 + readonly tiltX: number = 0 + readonly tiltY: number = 0 + readonly twist: number = 0 + readonly pointerType: string = '' + readonly isPrimary: boolean = false -// Mock scheduler to test React features -jest.mock('scheduler', () => require('scheduler/unstable_mock')) + constructor(type: string, params: PointerEventInit = {}) { + super(type, params) + Object.assign(this, params) + } -// Silence react-dom & react-dom/client mismatch in RTL -const logError = global.console.error -global.console.error = (...args: any[]) => { - if (args.join('').startsWith('Warning')) return - return logError(...args) + getCoalescedEvents = () => [] + getPredictedEvents = () => [] + } } + +globalThis.WebGL2RenderingContext = WebGL2RenderingContext as any +globalThis.WebGLRenderingContext = class WebGLRenderingContext extends WebGL2RenderingContext {} as any + +HTMLCanvasElement.prototype.getContext = function (this: HTMLCanvasElement) { + return new WebGL2RenderingContext(this) as any +} + +// Extend catalogue for render API in tests +extend(THREE as any) diff --git a/packages/test-renderer/package.json b/packages/test-renderer/package.json index 1589204b31..3ad8bcec3f 100644 --- a/packages/test-renderer/package.json +++ b/packages/test-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@react-three/test-renderer", - "version": "8.2.1", + "version": "9.0.0-rc.0", "description": "Test Renderer for react-three-fiber", "author": "Josh Ellis", "license": "MIT", @@ -22,8 +22,8 @@ ] }, "peerDependencies": { - "react": ">=17.0", - "@react-three/fiber": ">=8.0.0", - "three": ">=0.126" + "react": ">=19.0", + "@react-three/fiber": "9.0.0-rc.0", + "three": ">=0.141" } } diff --git a/packages/test-renderer/src/__tests__/RTTR.core.test.tsx b/packages/test-renderer/src/__tests__/RTTR.core.test.tsx index 68c424d8df..c5bef5ae3b 100644 --- a/packages/test-renderer/src/__tests__/RTTR.core.test.tsx +++ b/packages/test-renderer/src/__tests__/RTTR.core.test.tsx @@ -25,7 +25,7 @@ describe('ReactThreeTestRenderer Core', () => { it('renders a simple component with hooks', async () => { const Mesh = () => { - const meshRef = React.useRef>() + const meshRef = React.useRef>(null) useFrame(() => void (meshRef.current!.position.x += 0.01)) return ( @@ -46,7 +46,7 @@ describe('ReactThreeTestRenderer Core', () => { const [name, setName] = React.useState() React.useLayoutEffect(() => { - ;(React as any).startTransition(() => void setName('mesh')) + React.startTransition(() => void setName('mesh')) }) return ( @@ -99,19 +99,7 @@ describe('ReactThreeTestRenderer Core', () => { const renderer = await ReactThreeTestRenderer.create() - expect(renderer.toGraph()).toEqual([ - { - type: 'Group', - name: '', - children: [ - { - type: 'Mesh', - name: '', - children: [], - }, - ], - }, - ]) + expect(renderer.toGraph()).toMatchSnapshot() }) it('renders some basics with an update', async () => { @@ -184,7 +172,7 @@ describe('ReactThreeTestRenderer Core', () => { }) it('exposes the instance', async () => { - class Mesh extends React.PureComponent { + class Instance extends React.PureComponent { state = { standardMat: false } handleStandard() { @@ -201,51 +189,17 @@ describe('ReactThreeTestRenderer Core', () => { } } - const renderer = await ReactThreeTestRenderer.create() + const renderer = await ReactThreeTestRenderer.create() - expect(renderer.toTree()).toEqual([ - { - type: 'mesh', - props: { - args: [], - }, - children: [ - { type: 'boxGeometry', props: { args: [2, 2] }, children: [] }, - { - type: 'meshBasicMaterial', - props: { - args: [], - }, - children: [], - }, - ], - }, - ]) + expect(renderer.toTree()).toMatchSnapshot() - const instance = renderer.getInstance() as Mesh + const instance = renderer.getInstance() as Instance await ReactThreeTestRenderer.act(async () => { instance.handleStandard() }) - expect(renderer.toTree()).toEqual([ - { - type: 'mesh', - props: { - args: [], - }, - children: [ - { type: 'boxGeometry', props: { args: [2, 2] }, children: [] }, - { - type: 'meshStandardMaterial', - props: { - args: [], - }, - children: [], - }, - ], - }, - ]) + expect(renderer.toTree()).toMatchSnapshot() }) it('updates children', async () => { @@ -333,15 +287,7 @@ describe('ReactThreeTestRenderer Core', () => { ) const renderer = await ReactThreeTestRenderer.create() - expect(renderer.toTree()).toEqual([ - { - type: 'group', - props: { - args: [], - }, - children: [], - }, - ]) + expect(renderer.toTree()).toMatchSnapshot() }) it('correctly builds a tree', async () => { @@ -363,7 +309,7 @@ describe('ReactThreeTestRenderer Core', () => { return ( - + diff --git a/packages/test-renderer/src/__tests__/RTTR.hooks.test.tsx b/packages/test-renderer/src/__tests__/RTTR.hooks.test.tsx index 1af14242d6..9f9e1a796c 100644 --- a/packages/test-renderer/src/__tests__/RTTR.hooks.test.tsx +++ b/packages/test-renderer/src/__tests__/RTTR.hooks.test.tsx @@ -1,9 +1,6 @@ import * as React from 'react' -import * as Stdlib from 'three-stdlib' import * as THREE from 'three' - import { useFrame, useLoader, useThree } from '@react-three/fiber' -import { waitFor } from '@react-three/test-renderer' import ReactThreeTestRenderer from '../index' @@ -34,34 +31,24 @@ describe('ReactThreeTestRenderer Hooks', () => { expect(result.camera instanceof THREE.Camera).toBeTruthy() expect(result.scene instanceof THREE.Scene).toBeTruthy() expect(result.raycaster instanceof THREE.Raycaster).toBeTruthy() - expect(result.size).toEqual({ height: 800, width: 1280, top: 0, left: 0, updateStyle: true }) + expect(result.size).toEqual({ height: 800, width: 1280, top: 0, left: 0 }) }) it('can handle useLoader hook', async () => { const MockMesh = new THREE.Mesh() - jest.spyOn(Stdlib, 'GLTFLoader').mockImplementation( - () => - ({ - load: jest.fn().mockImplementation((_url, onLoad) => { - onLoad(MockMesh) - }), - } as unknown as Stdlib.GLTFLoader), - ) + class Loader extends THREE.Loader { + load(url: string, onLoad: (mesh: THREE.Mesh) => void): void { + onLoad(MockMesh) + } + } const Component = () => { - const model = useLoader(Stdlib.GLTFLoader, '/suzanne.glb') + const model = useLoader(Loader, '/suzanne.glb') return } - const renderer = await ReactThreeTestRenderer.create( - - - , - ) - - await waitFor(() => expect(renderer.scene.children[0]).toBeDefined()) - + const renderer = await ReactThreeTestRenderer.create() expect(renderer.scene.children[0].instance).toBe(MockMesh) }) diff --git a/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap b/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap index 3f068db859..9bc3b5fc58 100644 --- a/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap +++ b/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap @@ -1,9 +1,53 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`ReactThreeTestRenderer Core can render a composite component & correctly build simple graph 1`] = ` +Array [ + Object { + "children": Array [ + Object { + "children": Array [], + "name": "", + "type": undefined, + }, + Object { + "children": Array [ + Object { + "children": Array [], + "name": "", + "type": "BoxGeometry", + }, + Object { + "children": Array [], + "name": "", + "type": "MeshBasicMaterial", + }, + ], + "name": "", + "type": "Mesh", + }, + ], + "name": "", + "type": "Group", + }, +] +`; + exports[`ReactThreeTestRenderer Core correctly builds a tree 1`] = ` Array [ Object { "children": Array [ + Object { + "children": Array [], + "props": Object { + "args": Array [ + 0, + 0, + 255, + ], + "attach": "background", + }, + "type": "color", + }, Object { "children": Array [ Object { @@ -11,66 +55,53 @@ Array [ Object { "children": Array [], "props": Object { - "args": Array [], - "array": Float32Array [ - -1, - -1, - 1, - 1, - -1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - -1, - 1, - 1, - -1, - -1, - 1, + "args": Array [ + Float32Array [ + -1, + -1, + 1, + 1, + -1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + 1, + 1, + -1, + -1, + 1, + ], + 3, ], - "count": 6, - "itemSize": 3, + "attach": "attributes-position", }, "type": "bufferAttribute", }, ], "props": Object { - "args": Array [], + "attach": "geometry", }, "type": "bufferGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [], + "attach": "material", "color": "hotpink", }, "type": "meshBasicMaterial", }, ], - "props": Object { - "args": Array [], - }, + "props": Object {}, "type": "mesh", }, - Object { - "children": Array [], - "props": Object { - "args": Array [ - 0, - 0, - 255, - ], - }, - "type": "color", - }, ], "props": Object { - "args": Array [], "position": Array [ 1, 2, @@ -82,6 +113,64 @@ Array [ ] `; +exports[`ReactThreeTestRenderer Core exposes the instance 1`] = ` +Array [ + Object { + "children": Array [ + Object { + "children": Array [], + "props": Object { + "args": Array [ + 2, + 2, + ], + "attach": "geometry", + }, + "type": "boxGeometry", + }, + Object { + "children": Array [], + "props": Object { + "attach": "material", + }, + "type": "meshBasicMaterial", + }, + ], + "props": Object {}, + "type": "mesh", + }, +] +`; + +exports[`ReactThreeTestRenderer Core exposes the instance 2`] = ` +Array [ + Object { + "children": Array [ + Object { + "children": Array [], + "props": Object { + "args": Array [ + 2, + 2, + ], + "attach": "geometry", + }, + "type": "boxGeometry", + }, + Object { + "children": Array [], + "props": Object { + "attach": "material", + }, + "type": "meshStandardMaterial", + }, + ], + "props": Object {}, + "type": "mesh", + }, +] +`; + exports[`ReactThreeTestRenderer Core toTree() handles complicated tree of fragments 1`] = ` Array [ Object { @@ -94,13 +183,12 @@ Array [ 0, 0, ], + "attach": "background", }, "type": "color", }, ], - "props": Object { - "args": Array [], - }, + "props": Object {}, "type": "group", }, Object { @@ -113,13 +201,12 @@ Array [ 0, 255, ], + "attach": "background", }, "type": "color", }, ], - "props": Object { - "args": Array [], - }, + "props": Object {}, "type": "group", }, Object { @@ -132,13 +219,22 @@ Array [ 0, 0, ], + "attach": "background", }, "type": "color", }, ], - "props": Object { - "args": Array [], - }, + "props": Object {}, + "type": "group", + }, +] +`; + +exports[`ReactThreeTestRenderer Core toTree() handles nested Fragments 1`] = ` +Array [ + Object { + "children": Array [], + "props": Object {}, "type": "group", }, ] @@ -157,19 +253,19 @@ Array [ 2, 2, ], + "attach": "geometry", }, "type": "boxGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [], + "attach": "material", }, "type": "meshBasicMaterial", }, ], "props": Object { - "args": Array [], "position-z": 12, }, "type": "mesh", @@ -183,19 +279,19 @@ Array [ 4, 4, ], + "attach": "geometry", }, "type": "boxGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [], + "attach": "material", }, "type": "meshBasicMaterial", }, ], "props": Object { - "args": Array [], "position-y": 12, }, "type": "mesh", @@ -209,27 +305,25 @@ Array [ 6, 6, ], + "attach": "geometry", }, "type": "boxGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [], + "attach": "material", }, "type": "meshBasicMaterial", }, ], "props": Object { - "args": Array [], "position-x": 12, }, "type": "mesh", }, ], - "props": Object { - "args": Array [], - }, + "props": Object {}, "type": "group", }, ] @@ -248,19 +342,19 @@ Array [ 6, 6, ], + "attach": "geometry", }, "type": "boxGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [], + "attach": "material", }, "type": "meshBasicMaterial", }, ], "props": Object { - "args": Array [], "rotation-x": 1, }, "type": "mesh", @@ -274,32 +368,25 @@ Array [ 4, 4, ], + "attach": "geometry", }, "type": "boxGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [], + "attach": "material", }, "type": "meshBasicMaterial", }, ], "props": Object { - "args": Array [], "position-y": 12, }, "type": "mesh", }, Object { "children": Array [ - Object { - "children": Array [], - "props": Object { - "args": Array [], - }, - "type": "meshBasicMaterial", - }, Object { "children": Array [], "props": Object { @@ -307,20 +394,25 @@ Array [ 2, 2, ], + "attach": "geometry", }, "type": "boxGeometry", }, + Object { + "children": Array [], + "props": Object { + "attach": "material", + }, + "type": "meshBasicMaterial", + }, ], "props": Object { - "args": Array [], "position-x": 12, }, "type": "mesh", }, ], - "props": Object { - "args": Array [], - }, + "props": Object {}, "type": "group", }, ] diff --git a/packages/test-renderer/src/__tests__/is.test.ts b/packages/test-renderer/src/__tests__/is.test.ts deleted file mode 100644 index ce3ea3f0ba..0000000000 --- a/packages/test-renderer/src/__tests__/is.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { is } from '../helpers/is' - -describe('is', () => { - const myFunc = () => { - return null - } - const myObj = { - myProp: 'test-prop', - } - const myStr = 'test-string' - const myNum = 1 - const myUnd = undefined - const myArr = [1, 2, 3] - - it('should tell me if something IS a function', () => { - expect(is.fun(myFunc)).toBe(true) - - expect(is.fun(myObj)).toBe(false) - expect(is.fun(myStr)).toBe(false) - expect(is.fun(myNum)).toBe(false) - expect(is.fun(myUnd)).toBe(false) - expect(is.fun(myArr)).toBe(false) - }) - it('should tell me if something IS an object', () => { - expect(is.obj(myFunc)).toBe(false) - - expect(is.obj(myObj)).toBe(true) - - expect(is.obj(myStr)).toBe(false) - expect(is.obj(myNum)).toBe(false) - expect(is.obj(myUnd)).toBe(false) - expect(is.obj(myArr)).toBe(false) - }) - it('should tell me if something IS a string', () => { - expect(is.str(myFunc)).toBe(false) - expect(is.str(myObj)).toBe(false) - - expect(is.str(myStr)).toBe(true) - - expect(is.str(myNum)).toBe(false) - expect(is.str(myUnd)).toBe(false) - expect(is.str(myArr)).toBe(false) - }) - it('should tell me if something IS a number', () => { - expect(is.num(myFunc)).toBe(false) - expect(is.num(myObj)).toBe(false) - expect(is.num(myStr)).toBe(false) - - expect(is.num(myNum)).toBe(true) - - expect(is.num(myUnd)).toBe(false) - expect(is.num(myArr)).toBe(false) - }) - it('should tell me if something IS undefined', () => { - expect(is.und(myFunc)).toBe(false) - expect(is.und(myObj)).toBe(false) - expect(is.und(myStr)).toBe(false) - expect(is.und(myNum)).toBe(false) - - expect(is.und(myUnd)).toBe(true) - - expect(is.und(myArr)).toBe(false) - }) - it('should tell me if something is an array', () => { - expect(is.arr(myFunc)).toBe(false) - expect(is.arr(myObj)).toBe(false) - expect(is.arr(myStr)).toBe(false) - expect(is.arr(myNum)).toBe(false) - expect(is.arr(myUnd)).toBe(false) - - expect(is.arr(myArr)).toBe(true) - }) - it('should tell me if something is equal', () => { - expect(is.equ([], '')).toBe(false) - - expect(is.equ('hello', 'hello')).toBe(true) - expect(is.equ(1, 1)).toBe(true) - expect(is.equ(myObj, myObj)).toBe(true) - expect(is.equ(myArr, myArr)).toBe(true) - expect(is.equ([1, 2, 3], [1, 2, 3])).toBe(true) - }) -}) diff --git a/packages/test-renderer/src/createTestInstance.ts b/packages/test-renderer/src/createTestInstance.ts index 69a4b3b28c..d47cdf6d09 100644 --- a/packages/test-renderer/src/createTestInstance.ts +++ b/packages/test-renderer/src/createTestInstance.ts @@ -1,30 +1,35 @@ -import { Object3D } from 'three' +import type * as THREE from 'three' +import type { Instance } from '@react-three/fiber' -import type { MockInstance, MockScene, Obj, TestInstanceChildOpts } from './types/internal' +import type { Obj, TestInstanceChildOpts } from './types/internal' import { expectOne, matchProps, findAll } from './helpers/testInstance' -export class ReactThreeTestInstance { - _fiber: MockInstance +export class ReactThreeTestInstance { + _fiber: Instance - constructor(fiber: MockInstance | MockScene) { - this._fiber = fiber as MockInstance + constructor(fiber: Instance) { + this._fiber = fiber } - public get instance(): Object3D { - return this._fiber as unknown as TInstance + public get fiber(): Instance { + return this._fiber + } + + public get instance(): TObject { + return this._fiber.object } public get type(): string { - return this._fiber.type + return this._fiber.object.type } public get props(): Obj { - return this._fiber.__r3f.memoizedProps + return this._fiber.props } public get parent(): ReactThreeTestInstance | null { - const parent = this._fiber.__r3f.parent + const parent = this._fiber.parent if (parent !== null) { return wrapFiber(parent) } @@ -40,47 +45,35 @@ export class ReactThreeTestInstance { } private getChildren = ( - fiber: MockInstance, + fiber: Instance, opts: TestInstanceChildOpts = { exhaustive: false }, - ): ReactThreeTestInstance[] => { - if (opts.exhaustive) { - /** - * this will return objects like - * color or effects etc. - */ - return [ - ...(fiber.children || []).map((fib) => wrapFiber(fib as MockInstance)), - ...fiber.__r3f.objects.map((fib) => wrapFiber(fib as MockInstance)), - ] - } else { - return (fiber.children || []).map((fib) => wrapFiber(fib as MockInstance)) - } - } - - public find = (decider: (node: ReactThreeTestInstance) => boolean): ReactThreeTestInstance => - expectOne(findAll(this, decider), `matching custom checker: ${decider.toString()}`) + ): ReactThreeTestInstance[] => + fiber.children.filter((child) => !child.props.attach || opts.exhaustive).map((fib) => wrapFiber(fib as Instance)) public findAll = (decider: (node: ReactThreeTestInstance) => boolean): ReactThreeTestInstance[] => - findAll(this, decider) + findAll(this as unknown as ReactThreeTestInstance, decider) + + public find = (decider: (node: ReactThreeTestInstance) => boolean): ReactThreeTestInstance => + expectOne(this.findAll(decider), `matching custom checker: ${decider.toString()}`) public findByType = (type: string): ReactThreeTestInstance => expectOne( - findAll(this, (node) => Boolean(node.type && node.type === type)), + this.findAll((node) => Boolean(node.type && node.type === type)), `with node type: "${type || 'Unknown'}"`, ) public findAllByType = (type: string): ReactThreeTestInstance[] => - findAll(this, (node) => Boolean(node.type && node.type === type)) + this.findAll((node) => Boolean(node.type && node.type === type)) public findByProps = (props: Obj): ReactThreeTestInstance => expectOne(this.findAllByProps(props), `with props: ${JSON.stringify(props)}`) public findAllByProps = (props: Obj): ReactThreeTestInstance[] => - findAll(this, (node: ReactThreeTestInstance) => Boolean(node.props && matchProps(node.props, props))) + this.findAll((node: ReactThreeTestInstance) => Boolean(node.props && matchProps(node.props, props))) } -const fiberToWrapper = new WeakMap() -export const wrapFiber = (fiber: MockInstance | MockScene): ReactThreeTestInstance => { +const fiberToWrapper = new WeakMap() +export const wrapFiber = (fiber: Instance): ReactThreeTestInstance => { let wrapper = fiberToWrapper.get(fiber) if (wrapper === undefined) { wrapper = new ReactThreeTestInstance(fiber) diff --git a/packages/test-renderer/src/fireEvent.ts b/packages/test-renderer/src/fireEvent.ts index 8f0fd3dd27..a2ebdc3c6f 100644 --- a/packages/test-renderer/src/fireEvent.ts +++ b/packages/test-renderer/src/fireEvent.ts @@ -1,16 +1,13 @@ -import ReactReconciler from 'react-reconciler' +import type { RootStore } from '@react-three/fiber' import { toEventHandlerName } from './helpers/strings' import { ReactThreeTestInstance } from './createTestInstance' -import type { MockSyntheticEvent } from './types/public' -import type { MockUseStoreState, MockEventData } from './types/internal' +import type { Act, MockSyntheticEvent } from './types/public' +import type { MockEventData } from './types/internal' -export const createEventFirer = ( - act: ReactReconciler.Reconciler['act'], - store: MockUseStoreState, -) => { +export const createEventFirer = (act: Act, store: RootStore) => { const findEventHandler = ( element: ReactThreeTestInstance, eventName: string, diff --git a/packages/test-renderer/src/helpers/graph.ts b/packages/test-renderer/src/helpers/graph.ts index 0266dbaa11..36359ebec5 100644 --- a/packages/test-renderer/src/helpers/graph.ts +++ b/packages/test-renderer/src/helpers/graph.ts @@ -1,4 +1,4 @@ -import type { MockScene, MockSceneChild } from '../types/internal' +import type { Instance } from '@react-three/fiber' import type { SceneGraphItem } from '../types/public' const graphObjectFactory = ( @@ -11,5 +11,5 @@ const graphObjectFactory = ( children, }) -export const toGraph = (object: MockScene | MockSceneChild): SceneGraphItem[] => - object.children.map((child) => graphObjectFactory(child.type, child.name || '', toGraph(child))) +export const toGraph = (object: Instance): SceneGraphItem[] => + object.children.map((child) => graphObjectFactory(child.object.type, child.object.name ?? '', toGraph(child))) diff --git a/packages/test-renderer/src/helpers/is.ts b/packages/test-renderer/src/helpers/is.ts deleted file mode 100644 index 4733da0c59..0000000000 --- a/packages/test-renderer/src/helpers/is.ts +++ /dev/null @@ -1,21 +0,0 @@ -export const is = { - obj: (a: any) => a === Object(a) && !is.arr(a) && typeof a !== 'function', - fun: (a: any) => typeof a === 'function', - str: (a: any) => typeof a === 'string', - num: (a: any) => typeof a === 'number', - und: (a: any) => a === void 0, - arr: (a: any) => Array.isArray(a), - equ(a: any, b: any) { - // Wrong type or one of the two undefined, doesn't match - if (typeof a !== typeof b || !!a !== !!b) return false - // Atomic, just compare a against b - if (is.str(a) || is.num(a) || is.obj(a)) return a === b - // Array, shallow compare first to see if it's a match - if (is.arr(a) && a == b) return true - // Last resort, go through keys - let i - for (i in a) if (!(i in b)) return false - for (i in b) if (a[i] !== b[i]) return false - return is.und(i) ? a === b : true - }, -} diff --git a/packages/test-renderer/src/helpers/testInstance.ts b/packages/test-renderer/src/helpers/testInstance.ts index 0b7ba964ed..cb75990666 100644 --- a/packages/test-renderer/src/helpers/testInstance.ts +++ b/packages/test-renderer/src/helpers/testInstance.ts @@ -1,4 +1,4 @@ -import { ReactThreeTestInstance } from '../createTestInstance' +import type { ReactThreeTestInstance } from '../createTestInstance' import type { Obj } from '../types/internal' export const expectOne = (items: TItem[], msg: string) => { diff --git a/packages/test-renderer/src/helpers/tree.ts b/packages/test-renderer/src/helpers/tree.ts index d69f20f2f8..46095bda3f 100644 --- a/packages/test-renderer/src/helpers/tree.ts +++ b/packages/test-renderer/src/helpers/tree.ts @@ -1,5 +1,5 @@ +import type { Instance } from '@react-three/fiber' import type { TreeNode, Tree } from '../types/public' -import type { MockSceneChild, MockScene } from '../types/internal' import { lowerCaseFirstLetter } from './strings' const treeObjectFactory = ( @@ -12,20 +12,13 @@ const treeObjectFactory = ( children, }) -const toTreeBranch = (obj: MockSceneChild[]): TreeNode[] => - obj.map((child) => { +const toTreeBranch = (children: Instance[]): TreeNode[] => + children.map((child) => { return treeObjectFactory( - lowerCaseFirstLetter(child.type || child.constructor.name), - { ...child.__r3f.memoizedProps }, - toTreeBranch([...(child.children || []), ...child.__r3f.objects]), + lowerCaseFirstLetter(child.object.type || child.object.constructor.name), + child.props, + toTreeBranch(child.children), ) }) -export const toTree = (root: MockScene): Tree => - root.children.map((obj) => - treeObjectFactory( - lowerCaseFirstLetter(obj.type), - { ...obj.__r3f.memoizedProps }, - toTreeBranch([...(obj.children as MockSceneChild[]), ...(obj.__r3f.objects as MockSceneChild[])]), - ), - ) +export const toTree = (root: Instance): Tree => toTreeBranch(root.children) diff --git a/packages/test-renderer/src/helpers/waitFor.ts b/packages/test-renderer/src/helpers/waitFor.ts index d80d2aec30..1cb20c8361 100644 --- a/packages/test-renderer/src/helpers/waitFor.ts +++ b/packages/test-renderer/src/helpers/waitFor.ts @@ -1,6 +1,4 @@ -import * as React from 'react' - -const act: (cb: () => Promise) => Promise = (React as any).unstable_act +import { act } from '@react-three/fiber' export interface WaitOptions { interval?: number diff --git a/packages/test-renderer/src/index.tsx b/packages/test-renderer/src/index.tsx index 810f867396..76b2039b0d 100644 --- a/packages/test-renderer/src/index.tsx +++ b/packages/test-renderer/src/index.tsx @@ -1,24 +1,20 @@ import * as React from 'react' import * as THREE from 'three' -import { extend, _roots as mockRoots, createRoot, reconciler, act as _act } from '@react-three/fiber' +import { extend, _roots as mockRoots, createRoot, reconciler, act, Instance } from '@react-three/fiber' import { toTree } from './helpers/tree' import { toGraph } from './helpers/graph' -import { is } from './helpers/is' import { createCanvas } from './createTestCanvas' import { createEventFirer } from './fireEvent' -import type { MockScene } from './types/internal' -import type { CreateOptions, Renderer, Act } from './types/public' +import type { CreateOptions, Renderer } from './types/public' import { wrapFiber } from './createTestInstance' import { waitFor, WaitOptions } from './helpers/waitFor' // Extend catalogue for render API in tests. -extend(THREE) - -const act = _act as unknown as Act +extend(THREE as any) const create = async (element: React.ReactNode, options?: Partial): Promise => { const canvas = createCanvas(options) @@ -31,7 +27,6 @@ const create = async (element: React.ReactNode, options?: Partial height: options?.height ?? 800, top: 0, left: 0, - updateStyle: typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement, }, ...options, events: undefined, @@ -39,12 +34,14 @@ const create = async (element: React.ReactNode, options?: Partial const _store = mockRoots.get(canvas)!.store await act(async () => _root.render(element)) - const scene = _store.getState().scene as unknown as MockScene + const _scene = (_store.getState().scene as Instance['object']).__r3f! return { - scene: wrapFiber(scene), + scene: wrapFiber(_scene), async unmount() { - await act(async () => _root.unmount()) + await act(async () => { + _root.unmount() + }) }, getInstance() { // Bail if canvas is unmounted @@ -60,13 +57,15 @@ const create = async (element: React.ReactNode, options?: Partial async update(newElement: React.ReactNode) { if (!mockRoots.has(canvas)) return console.warn('RTTR: attempted to update an unmounted root!') - await act(async () => _root.render(newElement)) + await act(async () => { + _root.render(newElement) + }) }, toTree() { - return toTree(scene) + return toTree(_scene) }, toGraph() { - return toGraph(scene) + return toGraph(_scene) }, fireEvent: createEventFirer(act, _store), async advanceFrames(frames: number, delta: number | number[] = 1) { @@ -75,9 +74,9 @@ const create = async (element: React.ReactNode, options?: Partial const promises: Promise[] = [] - for (const subscriber of storeSubscribers) { + storeSubscribers.forEach((subscriber) => { for (let i = 0; i < frames; i++) { - if (is.arr(delta)) { + if (Array.isArray(delta)) { promises.push( new Promise(() => subscriber.ref.current(state, (delta as number[])[i] || (delta as number[])[-1])), ) @@ -85,7 +84,7 @@ const create = async (element: React.ReactNode, options?: Partial promises.push(new Promise(() => subscriber.ref.current(state, delta as number))) } } - } + }) Promise.all(promises) }, diff --git a/packages/test-renderer/src/types/internal.ts b/packages/test-renderer/src/types/internal.ts index d4b54d936b..ab1a89a13a 100644 --- a/packages/test-renderer/src/types/internal.ts +++ b/packages/test-renderer/src/types/internal.ts @@ -1,26 +1,3 @@ -import * as THREE from 'three' -import { UseBoundStore } from 'zustand' - -import type { BaseInstance, LocalState, RootState } from '@react-three/fiber' - -export type MockUseStoreState = UseBoundStore - -export interface MockInstance extends Omit { - __r3f: Omit & { - root: MockUseStoreState - objects: MockSceneChild[] - parent: MockInstance - } -} - -export interface MockSceneChild extends Omit { - children: MockSceneChild[] -} - -export interface MockScene extends Omit, Pick { - children: MockSceneChild[] -} - export type CreateCanvasParameters = { beforeReturn?: (canvas: HTMLCanvasElement) => void width?: number diff --git a/packages/test-renderer/src/types/public.ts b/packages/test-renderer/src/types/public.ts index 35229ee446..62c9840a06 100644 --- a/packages/test-renderer/src/types/public.ts +++ b/packages/test-renderer/src/types/public.ts @@ -17,8 +17,6 @@ export type MockSyntheticEvent = { export type CreateOptions = CreateCanvasParameters & RenderProps -export type Act = (cb: () => Promise) => Promise - export type Renderer = { scene: ReactThreeTestInstance unmount: () => Promise @@ -47,3 +45,5 @@ export interface TreeNode { } export type Tree = TreeNode[] + +export type { Act } from '@react-three/fiber' diff --git a/readme.md b/readme.md index a6d1a7d62b..0c017cf55e 100644 --- a/readme.md +++ b/readme.md @@ -8,7 +8,7 @@ [![ETH](https://img.shields.io/badge/ETH-f5f5f5?style=flat&colorA=000000&colorB=000000)](https://blockchain.com/eth/address/0x6E3f79Ea1d0dcedeb33D3fC6c34d2B1f156F2682) [![BTC](https://img.shields.io/badge/BTC-f5f5f5?style=flat&colorA=000000&colorB=000000)](https://blockchain.com/btc/address/36fuguTPxGCNnYZSRdgdh6Ea94brCAjMbH) - + react-three-fiber is a React renderer for threejs. @@ -18,6 +18,17 @@ Build your scene declaratively with re-usable, self-contained components that re npm install three @types/three @react-three/fiber ``` +--- + +

+ +--- + #### Does it have limitations? None. Everything that works in Threejs will work here without exception. @@ -217,7 +228,7 @@ Some helpful material: - [Discover Threejs](https://discoverthreejs.com), especially the [Tips and Tricks](https://discoverthreejs.com/tips-and-tricks) chapter for best practices - [Bruno Simons Threejs Jouney](https://threejs-journey.com), arguably the best learning resource, now includes a full [R3F chapter](https://threejs-journey.com/lessons/what-are-react-and-react-three-fiber) - + # Ecosystem @@ -249,7 +260,7 @@ There is a vibrant and extensive eco system around three-fiber, full of librarie - [`maath`](https://github.com/pmndrs/maath) – a kitchen sink for math helpers - [`miniplex`](https://github.com/hmans/miniplex) – ECS (entity management system) - [`composer-suite`](https://github.com/hmans/composer-suite) – composing shaders, particles, effects and game mechanics -- [`triplex`](https://triplex.dev/) – scene editor for react-three-fiber +- [`triplex`](https://triplex.dev/) – visual editor for react-three-fiber - [`koestlich`](https://github.com/coconut-xr/koestlich) – UI component library for react-three-fiber [Usage Trend of the @react-three Family](https://npm-compare.com/@react-three/a11y,@react-three/cannon,@react-three/csg,@react-three/drei,@react-three/flex,@react-three/gltfjsx,@react-three/gpu-pathtracer,@react-three/offscreen,@react-three/p2,@react-three/postprocessing,@react-three/rapier,@react-three/test-renderer,@react-three/uikit,@react-three/xr) diff --git a/yarn.lock b/yarn.lock index 56c9a1abf3..01f90c4357 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,45 +2,38 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== +"@ampproject/remapping@^2.1.0", "@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2", "@babel/code-frame@^7.5.5": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" -"@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@~7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== - -"@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" + integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== "@babel/core@7.17.8": version "7.17.8" @@ -63,94 +56,52 @@ json5 "^2.1.2" semver "^6.3.0" -"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.14.8", "@babel/core@^7.7.2", "@babel/core@^7.7.7", "@babel/core@^7.8.0": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.23.5": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.0", "@babel/core@^7.14.8", "@babel/core@^7.23.5", "@babel/core@^7.23.9", "@babel/core@^7.7.2", "@babel/core@^7.7.7", "@babel/core@^7.8.0": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" + integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.1" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.24.1" + "@babel/parser" "^7.24.1" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.14.0", "@babel/generator@^7.17.7", "@babel/generator@^7.20.7", "@babel/generator@^7.7.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.14.0", "@babel/generator@^7.17.7", "@babel/generator@^7.24.1", "@babel/generator@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" + integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== @@ -161,67 +112,59 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" - integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz#db58bf57137b623b916e24874ab7188d93d7f68f" + integrity sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-define-polyfill-provider@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" + integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-function-name@^7.23.0": +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== @@ -229,13 +172,6 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.23.0" -"@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -243,42 +179,21 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7", "@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" + "@babel/types" "^7.24.0" -"@babel/helper-module-transforms@^7.23.3": +"@babel/helper-module-transforms@^7.17.7", "@babel/helper-module-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== @@ -289,49 +204,35 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/types" "^7.22.5" -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== dependencies: - "@babel/types" "^7.20.2" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -340,19 +241,12 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" @@ -361,243 +255,206 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.17.8", "@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/helpers@^7.23.7": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" - integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: + "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/types" "^7.22.19" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/helpers@^7.17.8", "@babel/helpers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" + integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.8", "@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.8", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" + integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== +"@babel/plugin-proposal-async-generator-functions@^7.0.0", "@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz#a40ab158ca55627b71c5513f03d3469026a9e929" - integrity sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz#d242019488277c9a5a8035e5b70de54402644b89" + integrity sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-default-from" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-export-default-from" "^7.24.1" "@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + version "7.21.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c" + integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -634,12 +491,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz#fa89cf13b60de2c3f79acdc2b52a21174c6de060" - integrity sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz#a92852e694910ae4295e6e51e87b83507ed5e6e8" + integrity sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -648,12 +505,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0", "@babel/plugin-syntax-flow@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz#875c25e3428d7896c87589765fc8b9d32f24bd8d" + integrity sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -669,12 +526,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.16.7", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -732,359 +589,349 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== +"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz#27af183d7f6dad890531256c7a45019df768ac1f" + integrity sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" + integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" "@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.16.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" - integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" + integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" - integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz#fa8d0a146506ea195da1671d38eed459242b2dcc" + integrity sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-flow" "^7.24.1" "@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.7.5": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" - integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.24.1", "@babel/plugin-transform-modules-commonjs@^7.7.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-simple-access" "^7.22.5" "@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" - integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-identifier" "^7.22.20" "@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8" - integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q== +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.16.7": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.20.7": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" + integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" + integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" - -"@babel/plugin-transform-react-jsx-self@^7.0.0", "@babel/plugin-transform-react-jsx-self@^7.14.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" - integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx-self@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" - integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== +"@babel/plugin-transform-react-jsx-self@^7.0.0", "@babel/plugin-transform-react-jsx-self@^7.14.5", "@babel/plugin-transform-react-jsx-self@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" + integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.14.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" - integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== +"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.14.5", "@babel/plugin-transform-react-jsx-source@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" + integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-jsx-source@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" - integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" - integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" "@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" + integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c" - integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ== +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== dependencies: - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.24.0" + regenerator-transform "^0.15.2" "@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-runtime@^7.0.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz#dc58ad4a31810a890550365cc922e1ff5acb5d7f" + integrity sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ== + dependencies: + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-plugin-utils" "^7.24.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" + integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.5.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== +"@babel/plugin-transform-typescript@^7.24.1", "@babel/plugin-transform-typescript@^7.5.0": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz#5c05e28bb76c7dfe7d6c5bed9951324fd2d3ab07" + integrity sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-typescript" "^7.24.1" "@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/preset-env@7.16.11": version "7.16.11" @@ -1166,19 +1013,19 @@ core-js-compat "^3.20.2" semver "^6.3.0" -"@babel/preset-flow@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" - integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== +"@babel/preset-flow@^7.13.13": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.1.tgz#da7196c20c2d7dd4e98cfd8b192fe53b5eb6f0bb" + integrity sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-flow-strip-types" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-transform-flow-strip-types" "^7.24.1" "@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + version "0.1.6" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6.tgz#31bcdd8f19538437339d17af00d177d854d9d458" + integrity sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1198,96 +1045,69 @@ "@babel/plugin-transform-react-jsx-development" "^7.16.7" "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" + integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-syntax-jsx" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-typescript" "^7.24.1" -"@babel/register@^7.0.0": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.7.tgz#5eef3e0f4afc07e25e847720e7b987ae33f08d0b" - integrity sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA== +"@babel/register@^7.13.16": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" + integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.5" + pirates "^4.0.6" source-map-support "^0.5.16" -"@babel/runtime@^7.10.4", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" + integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + regenerator-runtime "^0.14.0" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" - integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== +"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - debug "^4.1.0" - globals "^11.1.0" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== +"@babel/traverse@^7.14.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.24.1", "@babel/traverse@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1298,179 +1118,187 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@changesets/apply-release-plan@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.0.0.tgz#6c663ff99d919bba3902343d76c35cbbbb046520" - integrity sha512-gp6nIdVdfYdwKww2+f8whckKmvfE4JEm4jJgBhTmooi0uzHWhnxvk6JIzQi89qEAMINN0SeVNnXiAtbFY0Mj3w== - dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/config" "^2.0.0" - "@changesets/get-version-range-type" "^0.3.2" - "@changesets/git" "^1.3.2" - "@changesets/types" "^5.0.0" +"@changesets/apply-release-plan@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.0.tgz#ce3c3dfc5720550a5d592b54ad2f411f816ec5ff" + integrity sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/config" "^3.0.0" + "@changesets/get-version-range-type" "^0.4.0" + "@changesets/git" "^3.0.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" detect-indent "^6.0.0" fs-extra "^7.0.1" lodash.startcase "^4.4.0" outdent "^0.5.0" - prettier "^1.19.1" + prettier "^2.7.1" resolve-from "^5.0.0" - semver "^5.4.1" + semver "^7.5.3" -"@changesets/assemble-release-plan@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.1.2.tgz#63ed3a00f62b5af08a82e83801a252ac9726c625" - integrity sha512-nOFyDw4APSkY/vh5WNwGEtThPgEjVShp03PKVdId6wZTJALVcAALCSLmDRfeqjE2z9EsGJb7hZdDlziKlnqZgw== +"@changesets/assemble-release-plan@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.0.tgz#c69969b4bef7c32a8544b6941d1053260ca47e05" + integrity sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw== dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/errors" "^0.1.4" - "@changesets/get-dependents-graph" "^1.3.2" - "@changesets/types" "^5.0.0" + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" - semver "^5.4.1" + semver "^7.5.3" "@changesets/changelog-git@^0.1.11": - version "0.1.11" - resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.1.11.tgz#80eb45d3562aba2164f25ccc31ac97b9dcd1ded3" - integrity sha512-sWJvAm+raRPeES9usNpZRkooeEB93lOpUN0Lmjz5vhVAb7XGIZrHEJ93155bpE1S0c4oJ5Di9ZWgzIwqhWP/Wg== + version "0.1.14" + resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.1.14.tgz#852caa7727dcf91497c131d05bc2cd6248532ada" + integrity sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA== + dependencies: + "@changesets/types" "^5.2.1" + +"@changesets/changelog-git@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.2.0.tgz#1f3de11becafff5a38ebe295038a602403c93a86" + integrity sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ== dependencies: - "@changesets/types" "^5.0.0" + "@changesets/types" "^6.0.0" "@changesets/cli@^2.22.0": - version "2.22.0" - resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.22.0.tgz#3bdbfb4a7a81ef37f63114e77da84e23f906b763" - integrity sha512-4bA3YoBkd5cm5WUxmrR2N9WYE7EeQcM+R3bVYMUj2NvffkQVpU3ckAI+z8UICoojq+HRl2OEwtz+S5UBmYY4zw== - dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/apply-release-plan" "^6.0.0" - "@changesets/assemble-release-plan" "^5.1.2" - "@changesets/changelog-git" "^0.1.11" - "@changesets/config" "^2.0.0" - "@changesets/errors" "^0.1.4" - "@changesets/get-dependents-graph" "^1.3.2" - "@changesets/get-release-plan" "^3.0.8" - "@changesets/git" "^1.3.2" - "@changesets/logger" "^0.0.5" - "@changesets/pre" "^1.0.11" - "@changesets/read" "^0.5.5" - "@changesets/types" "^5.0.0" - "@changesets/write" "^0.1.8" + version "2.27.1" + resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.27.1.tgz#abce480fd30b9abbe2cfcf07d5d668c364ce2804" + integrity sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/apply-release-plan" "^7.0.0" + "@changesets/assemble-release-plan" "^6.0.0" + "@changesets/changelog-git" "^0.2.0" + "@changesets/config" "^3.0.0" + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/get-release-plan" "^4.0.0" + "@changesets/git" "^3.0.0" + "@changesets/logger" "^0.1.0" + "@changesets/pre" "^2.0.0" + "@changesets/read" "^0.6.0" + "@changesets/types" "^6.0.0" + "@changesets/write" "^0.3.0" "@manypkg/get-packages" "^1.1.3" - "@types/is-ci" "^3.0.0" - "@types/semver" "^6.0.0" + "@types/semver" "^7.5.0" + ansi-colors "^4.1.3" chalk "^2.1.0" + ci-info "^3.7.0" enquirer "^2.3.0" external-editor "^3.1.0" fs-extra "^7.0.1" human-id "^1.0.2" - is-ci "^3.0.1" meow "^6.0.0" outdent "^0.5.0" p-limit "^2.2.0" preferred-pm "^3.0.0" resolve-from "^5.0.0" - semver "^5.4.1" + semver "^7.5.3" spawndamnit "^2.0.0" term-size "^2.1.0" - tty-table "^2.8.10" + tty-table "^4.1.5" -"@changesets/config@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.0.0.tgz#1770fdfeba2155cf07154c37e96b55cbd27969f0" - integrity sha512-r5bIFY6CN3K6SQ+HZbjyE3HXrBIopONR47mmX7zUbORlybQXtympq9rVAOzc0Oflbap8QeIexc+hikfZoREXDg== +"@changesets/config@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@changesets/config/-/config-3.0.0.tgz#a1a1cafc77134b117b4a9266459c84fdd360a6be" + integrity sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA== dependencies: - "@changesets/errors" "^0.1.4" - "@changesets/get-dependents-graph" "^1.3.2" - "@changesets/logger" "^0.0.5" - "@changesets/types" "^5.0.0" + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/logger" "^0.1.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" fs-extra "^7.0.1" micromatch "^4.0.2" -"@changesets/errors@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.1.4.tgz#f79851746c43679a66b383fdff4c012f480f480d" - integrity sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q== +"@changesets/errors@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.2.0.tgz#3c545e802b0f053389cadcf0ed54e5636ff9026a" + integrity sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow== dependencies: extendable-error "^0.1.5" -"@changesets/get-dependents-graph@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.2.tgz#f3ec7ce75f4afb6e3e4b6a87fde065f552c85998" - integrity sha512-tsqA6qZRB86SQuApSoDvI8yEWdyIlo/WLI4NUEdhhxLMJ0dapdeT6rUZRgSZzK1X2nv5YwR0MxQBbDAiDibKrg== +"@changesets/get-dependents-graph@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.0.0.tgz#97f0cc9fbec436e0d6ab95a6a59c08acf21ac714" + integrity sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA== dependencies: - "@changesets/types" "^5.0.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" chalk "^2.1.0" fs-extra "^7.0.1" - semver "^5.4.1" - -"@changesets/get-release-plan@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.8.tgz#2ac7c4f7903aedede3d27af66311ad1db7937e5d" - integrity sha512-TJYiWNuP0Lzu2dL/KHuk75w7TkiE5HqoYirrXF7SJIxkhlgH9toQf2C7IapiFTObtuF1qDN8HJAX1CuIOwXldg== - dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/assemble-release-plan" "^5.1.2" - "@changesets/config" "^2.0.0" - "@changesets/pre" "^1.0.11" - "@changesets/read" "^0.5.5" - "@changesets/types" "^5.0.0" + semver "^7.5.3" + +"@changesets/get-release-plan@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.0.tgz#8cb057da90a08796a335dfd18073234d33902069" + integrity sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/assemble-release-plan" "^6.0.0" + "@changesets/config" "^3.0.0" + "@changesets/pre" "^2.0.0" + "@changesets/read" "^0.6.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" -"@changesets/get-version-range-type@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz#8131a99035edd11aa7a44c341cbb05e668618c67" - integrity sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg== +"@changesets/get-version-range-type@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz#429a90410eefef4368502c41c63413e291740bf5" + integrity sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ== -"@changesets/git@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@changesets/git/-/git-1.3.2.tgz#336051d9a6d965806b1bc473559a9a2cc70773a6" - integrity sha512-p5UL+urAg0Nnpt70DLiBe2iSsMcDubTo9fTOD/61krmcJ466MGh71OHwdAwu1xG5+NKzeysdy1joRTg8CXcEXA== +"@changesets/git@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@changesets/git/-/git-3.0.0.tgz#e71d003752a97bc27988db6d410e0038a4a88055" + integrity sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w== dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/errors" "^0.1.4" - "@changesets/types" "^5.0.0" + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.2.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" is-subdir "^1.1.1" + micromatch "^4.0.2" spawndamnit "^2.0.0" -"@changesets/logger@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.0.5.tgz#68305dd5a643e336be16a2369cb17cdd8ed37d4c" - integrity sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw== +"@changesets/logger@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.0.tgz#2d2a58536c5beeeaef52ab464931d99fcf24f17b" + integrity sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g== dependencies: chalk "^2.1.0" -"@changesets/parse@^0.3.13": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.3.13.tgz#82788c1fc18da4750b07357a7a06142d0d975aa1" - integrity sha512-wh9Ifa0dungY6d2nMz6XxF6FZ/1I7j+mEgPAqrIyKS64nifTh1Ua82qKKMMK05CL7i4wiB2NYc3SfnnCX3RVeA== +"@changesets/parse@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.4.0.tgz#5cabbd9844b3b213cb83f5edb5768454c70dd2b4" + integrity sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw== dependencies: - "@changesets/types" "^5.0.0" + "@changesets/types" "^6.0.0" js-yaml "^3.13.1" -"@changesets/pre@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-1.0.11.tgz#46a56790fdceabd03407559bbf91340c8e83fb6a" - integrity sha512-CXZnt4SV9waaC9cPLm7818+SxvLKIDHUxaiTXnJYDp1c56xIexx1BNfC1yMuOdzO2a3rAIcZua5Odxr3dwSKfg== +"@changesets/pre@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.0.tgz#ad3edf3d6ac287991d7ef5e26cf280d03c9e3764" + integrity sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw== dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/errors" "^0.1.4" - "@changesets/types" "^5.0.0" + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.2.0" + "@changesets/types" "^6.0.0" "@manypkg/get-packages" "^1.1.3" fs-extra "^7.0.1" -"@changesets/read@^0.5.5": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.5.5.tgz#9ed90ef3e9f1ba3436ba5580201854a3f4163058" - integrity sha512-bzonrPWc29Tsjvgh+8CqJ0apQOwWim0zheeD4ZK44ApSa/GudnZJTODtA3yNOOuQzeZmL0NUebVoHIurtIkA7w== - dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/git" "^1.3.2" - "@changesets/logger" "^0.0.5" - "@changesets/parse" "^0.3.13" - "@changesets/types" "^5.0.0" +"@changesets/read@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.6.0.tgz#27e13b58d0b0eb3b0a5cba48a3f4f71f05ef4610" + integrity sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/git" "^3.0.0" + "@changesets/logger" "^0.1.0" + "@changesets/parse" "^0.4.0" + "@changesets/types" "^6.0.0" chalk "^2.1.0" fs-extra "^7.0.1" p-filter "^2.1.0" @@ -1480,56 +1308,26 @@ resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0" integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw== -"@changesets/types@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.0.0.tgz#d5eb52d074bc0358ce47d54bca54370b907812a0" - integrity sha512-IT1kBLSbAgTS4WtpU6P5ko054hq12vk4tgeIFRVE7Vnm4a/wgbNvBalgiKP0MjEXbCkZbItiGQHkCGxYWR55sA== +"@changesets/types@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.2.1.tgz#a228c48004aa8a93bce4be2d1d31527ef3bf21f6" + integrity sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg== + +"@changesets/types@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-6.0.0.tgz#e46abda9890610dd1fbe1617730173d2267544bd" + integrity sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ== -"@changesets/write@^0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.1.8.tgz#feed408f644c496bc52afc4dd1353670b4152ecb" - integrity sha512-oIHeFVMuP6jf0TPnKPpaFpvvAf3JBc+s2pmVChbeEgQTBTALoF51Z9kqxQfG4XONZPHZnqkmy564c7qohhhhTQ== +"@changesets/write@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.3.0.tgz#c6c5bc390cce4031da20eab8a4ca2d71453a1985" + integrity sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw== dependencies: - "@babel/runtime" "^7.10.4" - "@changesets/types" "^5.0.0" + "@babel/runtime" "^7.20.1" + "@changesets/types" "^6.0.0" fs-extra "^7.0.1" human-id "^1.0.2" - prettier "^1.19.1" - -"@chevrotain/cst-dts-gen@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.1.2.tgz#4ee6eff237bb47f4990cfb76c18ee2e71237929c" - integrity sha512-E/XrL0QlzExycPzwhOEZGVOheJ/Clr5uNv3oCds88MiNqEmg3UU1iauZk7DhjsUo3jgEW4lf0I5HRl7/HC5ZkQ== - dependencies: - "@chevrotain/gast" "^10.1.2" - "@chevrotain/types" "^10.1.2" - lodash "4.17.21" - -"@chevrotain/gast@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-10.1.2.tgz#91d5b342480d7532118a6cf3958955f86c9cc03e" - integrity sha512-er+TcxUOMuGOPoiOq8CJsRm92zGE4YPIYtyxJfxoVwVgtj4AMrPNCmrHvYaK/bsbt2DaDuFdcbbAfM9bcBXW6Q== - dependencies: - "@chevrotain/types" "^10.1.2" - lodash "4.17.21" - -"@chevrotain/types@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-10.1.2.tgz#f4caa373b1cd14d13ecb61c77dfee2456eef1ab3" - integrity sha512-4qF9SmmWKv8AIG/3d+71VFuqLumNCQTP5GoL0CW6x7Ay2OdXm6FUgWFLTMneGUjYUk2C+MSCf7etQfdq3LEr1A== - -"@chevrotain/utils@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-10.1.2.tgz#d2fb7b968141139e5c2419553e5295382c265e7d" - integrity sha512-bbZIpW6fdyf7FMaeDmw3cBbkTqsecxEkwlVKgVfqqXWBPLH6azxhPA2V9F7OhoZSVrsnMYw7QuyK6qutXPjEew== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + prettier "^2.7.1" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -1538,146 +1336,141 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@emotion/is-prop-valid@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" - integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: - "@emotion/memoize" "^0.8.1" + eslint-visitor-keys "^3.3.0" -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@emotion/unitless@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== - -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - -"@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - -"@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - -"@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1685,25 +1478,126 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@hapi/hoek@^9.0.0": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" - integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@expo/config-plugins@~7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-7.6.0.tgz#8183051a40e5d529a19d3135fd52253a85dc6586" + integrity sha512-2YX5xQhxSWVFS2BzMo8SVJPGuc6R/Ci2o4oeMT5F/JvdUut56pBCZietkkAxX9gOcIYMMTYFJllMn/Ecb5v4yQ== + dependencies: + "@expo/config-types" "^50.0.0-alpha.1" + "@expo/fingerprint" "^0.4.0" + "@expo/json-file" "~8.2.37" + "@expo/plist" "^0.0.20" + "@expo/sdk-runtime-versions" "^1.0.0" + "@react-native/normalize-color" "^2.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" + getenv "^1.0.0" + glob "7.1.6" + resolve-from "^5.0.0" + semver "^7.5.3" + slash "^3.0.0" + xcode "^3.0.1" + xml2js "0.6.0" + +"@expo/config-types@^50.0.0-alpha.1": + version "50.0.0" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-50.0.0.tgz#b534d3ec997ec60f8af24f6ad56244c8afc71a0b" + integrity sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw== + +"@expo/config@~8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-8.4.0.tgz#75e89c89f4c35b98b7c7b3343971e1881b659ec0" + integrity sha512-m3LkkONHrGsoFASyi3VuxJON/McRwMOtU9tw9PC/XEhRy1HfRALxdqTMl0W5X79ra7kCXd8H5EVTbTl9pvU+bw== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "~7.6.0" + "@expo/config-types" "^50.0.0-alpha.1" + "@expo/json-file" "^8.2.37" + getenv "^1.0.0" + glob "7.1.6" + require-from-string "^2.0.2" + resolve-from "^5.0.0" + semver "7.5.3" + slugify "^1.3.4" + sucrase "^3.20.0" + +"@expo/fingerprint@^0.4.0": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.4.1.tgz#345cfac07da7a9ccfc7384f99562bffa1c17a2d6" + integrity sha512-OjL/moP9IV5fV0oQc/cOcNNTW/FlwK4fUHtgeka/Fk4A7L4evpXOt9hfQgDtY6Ig0QHINAYvKpWrfCkPxEh2/Q== + dependencies: + "@expo/spawn-async" "^1.5.0" + chalk "^4.1.2" + debug "^4.3.4" + find-up "^5.0.0" + minimatch "^3.0.4" + p-limit "^3.1.0" + resolve-from "^5.0.0" + +"@expo/json-file@^8.2.37": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.3.0.tgz#fc84af77b532a4e9bfb5beafd0e3b7f692b6bd7e" + integrity sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^2.2.2" + write-file-atomic "^2.3.0" + +"@expo/json-file@~8.2.37": + version "8.2.37" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.37.tgz#9c02d3b42134907c69cc0a027b18671b69344049" + integrity sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^2.2.2" + write-file-atomic "^2.3.0" + +"@expo/plist@^0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.20.tgz#a6b3124438031c02b762bad5a47b70584d3c0072" + integrity sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA== + dependencies: + "@xmldom/xmldom" "~0.7.7" + base64-js "^1.2.3" + xmlbuilder "^14.0.0" + +"@expo/sdk-runtime-versions@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" + integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== -"@hapi/topo@^5.0.0": +"@expo/spawn-async@^1.5.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" + integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== + dependencies: + cross-spawn "^7.0.3" + +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1711,10 +1605,22 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -1727,7 +1633,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1744,16 +1650,16 @@ jest-util "^27.5.1" slash "^3.0.0" -"@jest/console@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.3.1.tgz#3e3f876e4e47616ea3b1464b9fbda981872e9583" - integrity sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" "@jest/core@^27.5.1": @@ -1790,37 +1696,37 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/core@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.3.1.tgz#bff00f413ff0128f4debec1099ba7dcd649774a1" - integrity sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^29.3.1" - "@jest/reporters" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.2.0" - jest-config "^29.3.1" - jest-haste-map "^29.3.1" - jest-message-util "^29.3.1" - jest-regex-util "^29.2.0" - jest-resolve "^29.3.1" - jest-resolve-dependencies "^29.3.1" - jest-runner "^29.3.1" - jest-runtime "^29.3.1" - jest-snapshot "^29.3.1" - jest-util "^29.3.1" - jest-validate "^29.3.1" - jest-watcher "^29.3.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - pretty-format "^29.3.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" @@ -1841,30 +1747,30 @@ "@types/node" "*" jest-mock "^27.5.1" -"@jest/environment@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.3.1.tgz#eb039f726d5fcd14698acd072ac6576d41cfcaa6" - integrity sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.3.1" + jest-mock "^29.7.0" -"@jest/expect-utils@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" - integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - jest-get-type "^29.2.0" + jest-get-type "^29.6.3" -"@jest/expect@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.3.1.tgz#456385b62894349c1d196f2d183e3716d4c6a6cd" - integrity sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg== +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: - expect "^29.3.1" - jest-snapshot "^29.3.1" + expect "^29.7.0" + jest-snapshot "^29.7.0" "@jest/fake-timers@^27.5.1": version "27.5.1" @@ -1878,17 +1784,17 @@ jest-mock "^27.5.1" jest-util "^27.5.1" -"@jest/fake-timers@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.3.1.tgz#b140625095b60a44de820876d4c14da1aa963f67" - integrity sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^29.3.1" - "@sinonjs/fake-timers" "^9.1.2" + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.3.1" - jest-mock "^29.3.1" - jest-util "^29.3.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" "@jest/globals@^27.5.1": version "27.5.1" @@ -1899,15 +1805,15 @@ "@jest/types" "^27.5.1" expect "^27.5.1" -"@jest/globals@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.3.1.tgz#92be078228e82d629df40c3656d45328f134a0c6" - integrity sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^29.3.1" - "@jest/expect" "^29.3.1" - "@jest/types" "^29.3.1" - jest-mock "^29.3.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" "@jest/reporters@^27.5.1": version "27.5.1" @@ -1940,17 +1846,17 @@ terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/reporters@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.3.1.tgz#9a6d78c109608e677c25ddb34f907b90e07b4310" - integrity sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -1958,24 +1864,24 @@ glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.3.1" - jest-util "^29.3.1" - jest-worker "^29.3.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: - "@sinclair/typebox" "^0.24.1" + "@sinclair/typebox" "^0.27.8" "@jest/source-map@^27.5.1": version "27.5.1" @@ -1986,12 +1892,12 @@ graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/source-map@^29.2.0": - version "29.2.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" - integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: - "@jridgewell/trace-mapping" "^0.3.15" + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" @@ -2005,13 +1911,13 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.3.1.tgz#92cd5099aa94be947560a24610aa76606de78f50" - integrity sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" @@ -2025,14 +1931,14 @@ jest-haste-map "^27.5.1" jest-runtime "^27.5.1" -"@jest/test-sequencer@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz#fa24b3b050f7a59d48f7ef9e0b782ab65123090d" - integrity sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^29.3.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" + jest-haste-map "^29.7.0" slash "^3.0.0" "@jest/transform@^27.5.1": @@ -2056,26 +1962,26 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.3.1.tgz#1e6bd3da4af50b5c82a539b7b1f3770568d6e36d" - integrity sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.3.1" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" - jest-regex-util "^29.2.0" - jest-util "^29.3.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - write-file-atomic "^4.0.1" + write-file-atomic "^4.0.2" "@jest/types@^26.6.2": version "26.6.2" @@ -2099,57 +2005,46 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" - integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.0.0" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -2162,18 +2057,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.21" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz#5dc1df7b3dc4a6209e503a924e1ca56097a2bb15" - integrity sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2205,6 +2092,13 @@ resolved "https://registry.yarnpkg.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.8.tgz#a78e137018a19933b7a1d0e887d553d4ab833d10" integrity sha512-Rp7ll8BHrKB3wXaRFKhrltwZl1CiXGdibPxuWXvqGnKTnv8fqa/nvftYNuSbf+pbJWKYCXdBtYTITdAUTGGh0Q== +"@monogrid/gainmap-js@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@monogrid/gainmap-js/-/gainmap-js-3.0.5.tgz#8c736088012ae8cd1f7b3d5adbd221c3905ab4ed" + integrity sha512-53sCTG4FaJBaAq/tcufARtVYDMDGqyBT9i7F453pWGhZ5LqubDHDWtYoHo9VhQqMcHTEexdJqSsR58y+9HVmQA== + dependencies: + promise-worker-transferable "^1.0.4" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2226,10 +2120,15 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@preconstruct/cli@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@preconstruct/cli/-/cli-2.1.5.tgz#f7f6d06809f382521589af15f67b87009b240c58" - integrity sha512-bMnGTkaotxq+xoOkXoUOfTFvxBX/ZUxukcacf3mx3G7Iz5m/T4ZGzSOU12pxl64e+rVWGTKlUsgaDSgyFkup0A== + version "2.8.3" + resolved "https://registry.yarnpkg.com/@preconstruct/cli/-/cli-2.8.3.tgz#1d483dc4d00726965a9293391ac9b3cd060ebf01" + integrity sha512-4PNEPcp8REUdqZIjtpXF1fqECuHt+pIS6k0PluSRcgX0KwPtfSw407Y2B/ItndgtRD3rKHXI6cKkwh/6Mc4TXg== dependencies: "@babel/code-frame" "^7.5.5" "@babel/core" "^7.7.7" @@ -2239,10 +2138,11 @@ "@rollup/plugin-alias" "^3.1.1" "@rollup/plugin-commonjs" "^15.0.0" "@rollup/plugin-json" "^4.1.0" - "@rollup/plugin-node-resolve" "^9.0.0" + "@rollup/plugin-node-resolve" "^11.2.1" "@rollup/plugin-replace" "^2.4.1" builtin-modules "^3.1.0" chalk "^4.1.0" + ci-info "^3.8.0" dataloader "^2.0.0" detect-indent "^6.0.0" enquirer "^2.3.6" @@ -2250,10 +2150,9 @@ fast-deep-equal "^2.0.1" fast-glob "^3.2.4" fs-extra "^9.0.1" - is-ci "^2.0.0" is-reference "^1.2.1" jest-worker "^26.3.0" - magic-string "^0.25.7" + magic-string "^0.30.0" meow "^7.1.0" ms "^2.1.2" normalize-path "^3.0.0" @@ -2264,10 +2163,11 @@ quick-lru "^5.1.1" resolve "^1.17.0" resolve-from "^5.0.0" - rollup "^2.32.0" + rollup "^2.79.1" semver "^7.3.4" - terser "^5.2.1" + terser "^5.16.8" v8-compile-cache "^2.1.1" + zod "^3.21.4" "@preconstruct/hook@^0.4.0": version "0.4.0" @@ -2279,30 +2179,73 @@ pirates "^4.0.1" source-map-support "^0.5.16" -"@react-native-community/cli-debugger-ui@^6.0.0-rc.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-6.0.0.tgz#ef9eb1268d85c1bd3caf2c4d36dc350bb080f254" - integrity sha512-onf6vtvqSzOr6bNEWhPzgcJP2UQhA0VY6c8tXwNczIONC/ahnN93LPBB/uXDbn9d/kLMvE7oUJiqRadZWHk6aA== +"@react-native-community/cli-clean@^8.0.4": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-8.0.4.tgz#97e16a20e207b95de12e29b03816e8f2b2c80cc7" + integrity sha512-IwS1M1NHg6+qL8PThZYMSIMYbZ6Zbx+lIck9PLBskbosFo24M3lCOflOl++Bggjakp6mR+sRXxLMexid/GeOsQ== + dependencies: + "@react-native-community/cli-tools" "^8.0.4" + chalk "^4.1.2" + execa "^1.0.0" + prompts "^2.4.0" + +"@react-native-community/cli-config@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-8.0.6.tgz#041eee7dd8fdef595bf7a3f24228c173bf294a44" + integrity sha512-mjVpVvdh8AviiO8xtqeX+BkjqE//NMDnISwsLWSJUfNCwTAPmdR8PGbhgP5O4hWHyJ3WkepTopl0ya7Tfi3ifw== + dependencies: + "@react-native-community/cli-tools" "^8.0.4" + cosmiconfig "^5.1.0" + deepmerge "^3.2.0" + glob "^7.1.3" + joi "^17.2.1" + +"@react-native-community/cli-debugger-ui@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-8.0.0.tgz#98263dc525e65015e2d6392c940114028f87e8e9" + integrity sha512-u2jq06GZwZ9sRERzd9FIgpW6yv4YOW4zz7Ym/B8eSzviLmy3yI/8mxJtvlGW+J8lBsfMcQoqJpqI6Rl1nZy9yQ== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-hermes@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz#92b2f07d08626a60f6893c3e3d57c1538c8fb5a7" - integrity sha512-Uhbm9bubyZLZ12vFCIfWbE/Qi3SBTbYIN/TC08EudTLhv/KbPomCQnmFsnJ7AXQFuOZJs73mBxoEAYSbRbwyVA== +"@react-native-community/cli-doctor@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-8.0.6.tgz#954250155ab2f3a66a54821e071bc4a631d2dfff" + integrity sha512-ZQqyT9mJMVeFEVIwj8rbDYGCA2xXjJfsQjWk2iTRZ1CFHfhPSUuUiG8r6mJmTinAP9t+wYcbbIYzNgdSUKnDMw== dependencies: - "@react-native-community/cli-platform-android" "^6.3.0" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-config" "^8.0.6" + "@react-native-community/cli-platform-ios" "^8.0.6" + "@react-native-community/cli-tools" "^8.0.4" + chalk "^4.1.2" + command-exists "^1.2.8" + envinfo "^7.7.2" + execa "^1.0.0" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" + node-stream-zip "^1.9.1" + ora "^5.4.1" + prompts "^2.4.0" + semver "^6.3.0" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" + +"@react-native-community/cli-hermes@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-8.0.5.tgz#639edc6b0ce73f705e4b737e3de1cc47d42516ff" + integrity sha512-Zm0wM6SfgYAEX1kfJ1QBvTayabvh79GzmjHyuSnEROVNPbl4PeCG4WFbwy489tGwOP9Qx9fMT5tRIFCD8bp6/g== + dependencies: + "@react-native-community/cli-platform-android" "^8.0.5" + "@react-native-community/cli-tools" "^8.0.4" chalk "^4.1.2" hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-platform-android@^6.0.0", "@react-native-community/cli-platform-android@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz#ab7d156bd69a392493323eeaba839a874c0e201f" - integrity sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ== +"@react-native-community/cli-platform-android@^8.0.2", "@react-native-community/cli-platform-android@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.5.tgz#da11d2678adeca98e83494d68de80e50571b4af4" + integrity sha512-z1YNE4T1lG5o9acoQR1GBvf7mq6Tzayqo/za5sHVSOJAC9SZOuVN/gg/nkBa9a8n5U7qOMFXfwhTMNqA474gXA== dependencies: - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-tools" "^8.0.4" chalk "^4.1.2" execa "^1.0.0" fs-extra "^8.1.0" @@ -2311,110 +2254,105 @@ lodash "^4.17.15" logkitty "^0.7.1" slash "^3.0.0" - xmldoc "^1.1.2" -"@react-native-community/cli-platform-ios@^6.0.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-6.2.0.tgz#ceaa23995511a8e400b506632ac7e6a66a17ec2a" - integrity sha512-k15MhExxLiLDDZOeuPgvTxbp0CsoLQQpk2Du0HjZDePqqWcKJylQqMZru1o8HuQHPcEr+b71HIs5V+lKyFYpfg== +"@react-native-community/cli-platform-ios@^8.0.2", "@react-native-community/cli-platform-ios@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.6.tgz#ab80cd4eb3014b8fcfc9bd1b53ec0a9f8e5d1430" + integrity sha512-CMR6mu/LVx6JVfQRDL9uULsMirJT633bODn+IrYmrwSz250pnhON16We8eLPzxOZHyDjm7JPuSgHG3a/BPiRuQ== dependencies: - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-tools" "^8.0.4" chalk "^4.1.2" + execa "^1.0.0" glob "^7.1.3" js-yaml "^3.13.1" lodash "^4.17.15" - ora "^3.4.0" + ora "^5.4.1" plist "^3.0.2" - xcode "^2.0.0" -"@react-native-community/cli-plugin-metro@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.4.0.tgz#70b7908d6b548481f37ed58167f9460d325ae21c" - integrity sha512-lcrNODvHd3ZVhiEshXAjyBoqP44rjhkytkOSUpnZHAcmMLiguxDmvhWeWqbwu3XqSX/f0gVKmfj81t+opI1bSw== +"@react-native-community/cli-plugin-metro@^8.0.7": + version "8.0.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.7.tgz#ece95b62cd529bcdf916e8633909a6d7778c1a3a" + integrity sha512-RK08Fqh//+9nDntCeKBq2LskWp4rD64q56/PxboZZBu5Z8KANJ4OBUzBLxm0rD0h+l9j6AASlO907HooBTWxrA== dependencies: - "@react-native-community/cli-server-api" "^6.4.0" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-server-api" "^8.0.4" + "@react-native-community/cli-tools" "^8.0.4" chalk "^4.1.2" - metro "^0.66.1" - metro-config "^0.66.1" - metro-core "^0.66.1" - metro-react-native-babel-transformer "^0.66.1" - metro-resolver "^0.66.1" - metro-runtime "^0.66.1" + metro "^0.70.4" + metro-config "^0.70.4" + metro-core "^0.70.4" + metro-react-native-babel-transformer "^0.70.4" + metro-resolver "^0.70.4" + metro-runtime "^0.70.4" readline "^1.3.0" -"@react-native-community/cli-server-api@^6.4.0": - version "6.4.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-6.4.3.tgz#b52444454f40bfb54a84ab52bf42e9f8002917f5" - integrity sha512-Ywy2x+PhIUZXgE74YiCYXylSVnuEBcq5cNfYLR3AwOvrILjh03smXfCca8s2V2LWUlzmWN6+L85FJGsT92MUJA== +"@react-native-community/cli-server-api@^8.0.4": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-8.0.4.tgz#d45d895a0a6e8b960c9d677188d414a996faa4d3" + integrity sha512-Orr14njx1E70CVrUA8bFdl+mrnbuXUjf1Rhhm0RxUadFpvkHuOi5dh8Bryj2MKtf8eZrpEwZ7tuQPhJEULW16A== dependencies: - "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-debugger-ui" "^8.0.0" + "@react-native-community/cli-tools" "^8.0.4" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.0" - nocache "^2.1.0" + nocache "^3.0.1" pretty-format "^26.6.2" serve-static "^1.13.1" - ws "^1.1.0" + ws "^7.5.1" -"@react-native-community/cli-tools@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz#8f4adc2d83ab96e5654348533c8fa602742c4fce" - integrity sha512-08ssz4GMEnRxC/1FgTTN/Ud7mExQi5xMphItPjfHiTxpZPhrFn+IMx6mya0ncFEhhxQ207wYlJMRLPRRdBZ8oA== +"@react-native-community/cli-tools@^8.0.4": + version "8.0.4" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-8.0.4.tgz#994b9d56c84472491c876b71acd4356773fcbe65" + integrity sha512-ePN9lGxh6LRFiotyddEkSmuqpQhnq2iw9oiXYr4EFWpIEy0yCigTuSTiDF68+c8M9B+7bTwkRpz/rMPC4ViO5Q== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" + find-up "^5.0.0" lodash "^4.17.15" mime "^2.4.1" node-fetch "^2.6.0" open "^6.2.0" + ora "^5.4.1" semver "^6.3.0" - shell-quote "1.6.1" + shell-quote "^1.7.3" -"@react-native-community/cli-types@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-6.0.0.tgz#90269fbdc7229d5e3b8f2f3e029a94083551040d" - integrity sha512-K493Fk2DMJC0ZM8s8gnfseKxGasIhuDaCUDeLZcoCSFlrjKEuEs1BKKEJiev0CARhKEXKOyyp/uqYM9nWhisNw== +"@react-native-community/cli-types@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-8.0.0.tgz#72d24178e5ed1c2d271da43e0a4a4f59178f261a" + integrity sha512-1lZS1PEvMlFaN3Se1ksyoFWzMjk+YfKi490GgsqKJln9gvFm8tqVPdnXttI5Uf2DQf3BMse8Bk8dNH4oV6Ewow== dependencies: - ora "^3.4.0" + joi "^17.2.1" -"@react-native-community/cli@^6.0.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-6.4.0.tgz#0b61a4b5f11293b0b79a0e78f80777387a9529a9" - integrity sha512-UNvYnWaALa4mJEaWdLY3fVK+csZzx/Ja/FGvXISPJ9W9lrKvGtyXkidViUCPbPtMsJUi7teA4uIShHn0mbGmnQ== - dependencies: - "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" - "@react-native-community/cli-hermes" "^6.3.0" - "@react-native-community/cli-plugin-metro" "^6.4.0" - "@react-native-community/cli-server-api" "^6.4.0" - "@react-native-community/cli-tools" "^6.2.0" - "@react-native-community/cli-types" "^6.0.0" - appdirsjs "^1.2.4" +"@react-native-community/cli@^8.0.3": + version "8.0.7" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-8.0.7.tgz#0d28519d3b4e3557d0c30007716978e2c7f3d3b3" + integrity sha512-DCSf77c0RvTCvNLKxFwuGBMFFIRwDiZWLo6znM2oNCFRkN2gmSQsYm1twdAh5asuNmetEiPoHdGT289SMWSjSQ== + dependencies: + "@react-native-community/cli-clean" "^8.0.4" + "@react-native-community/cli-config" "^8.0.6" + "@react-native-community/cli-debugger-ui" "^8.0.0" + "@react-native-community/cli-doctor" "^8.0.6" + "@react-native-community/cli-hermes" "^8.0.5" + "@react-native-community/cli-plugin-metro" "^8.0.7" + "@react-native-community/cli-server-api" "^8.0.4" + "@react-native-community/cli-tools" "^8.0.4" + "@react-native-community/cli-types" "^8.0.0" chalk "^4.1.2" - command-exists "^1.2.8" commander "^2.19.0" - cosmiconfig "^5.1.0" - deepmerge "^3.2.0" - envinfo "^7.7.2" execa "^1.0.0" find-up "^4.1.0" fs-extra "^8.1.0" - glob "^7.1.3" graceful-fs "^4.1.3" - joi "^17.2.1" leven "^3.1.0" lodash "^4.17.15" minimist "^1.2.0" - node-stream-zip "^1.9.1" - ora "^3.4.0" - pretty-format "^26.6.2" prompts "^2.4.0" semver "^6.3.0" - serve-static "^1.13.1" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" + +"@react-native/assets-registry@~0.72.0": + version "0.72.0" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.72.0.tgz#c82a76a1d86ec0c3907be76f7faf97a32bbed05d" + integrity sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ== "@react-native/assets@1.0.0": version "1.0.0" @@ -2426,6 +2364,11 @@ resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== +"@react-native/normalize-color@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" + integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== + "@react-native/polyfills@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" @@ -2516,35 +2459,34 @@ resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.7.3.tgz#ea78fd447cbc2612c1f5d55852e3c331e8172a0b" integrity sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw== -"@react-three/drei@^9.93.0": - version "9.93.0" - resolved "https://registry.yarnpkg.com/@react-three/drei/-/drei-9.93.0.tgz#85d352340fecb00017f3e4720f9e823947337723" - integrity sha512-G59IZqPzpIZPvVLmzdCITXJQB+mnKMtFv7FvSRFogeelLzOFkyfnkED9QiY0WQCBMFOFLnSx6vb5xzmbQjHyQA== +"@react-three/drei@^9.105.5": + version "9.105.5" + resolved "https://registry.yarnpkg.com/@react-three/drei/-/drei-9.105.5.tgz#440b345c781a2c8674c82be1f081e240828782ca" + integrity sha512-qo5ys8y1tNJ9cUloBXJHvtMLVY7mrH8XAgLzFxo6Wr6IzJM3lAOcOucbZehpl/6iZFmWaqbhLXg/YTQpHUJpEQ== dependencies: "@babel/runtime" "^7.11.2" "@mediapipe/tasks-vision" "0.10.8" + "@monogrid/gainmap-js" "^3.0.5" "@react-spring/three" "~9.6.1" "@use-gesture/react" "^10.2.24" camera-controls "^2.4.2" cross-env "^7.0.3" detect-gpu "^5.0.28" glsl-noise "^0.0.0" - lodash.clamp "^4.0.3" - lodash.omit "^4.5.0" - lodash.pick "^4.4.0" + hls.js "1.3.5" maath "^0.10.7" meshline "^3.1.6" react-composer "^5.0.3" - react-merge-refs "^1.1.0" stats-gl "^2.0.0" stats.js "^0.17.0" suspend-react "^0.1.3" - three-mesh-bvh "^0.6.7" - three-stdlib "^2.28.0" - troika-three-text "^0.47.2" + three-mesh-bvh "^0.7.0" + three-stdlib "^2.29.9" + troika-three-text "^0.49.0" + tunnel-rat "^0.1.2" utility-types "^3.10.0" uuid "^9.0.1" - zustand "^3.5.13" + zustand "^3.7.1" "@rollup/plugin-alias@^3.1.1": version "3.1.9" @@ -2573,17 +2515,17 @@ dependencies: "@rollup/pluginutils" "^3.0.8" -"@rollup/plugin-node-resolve@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" - integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg== +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== dependencies: "@rollup/pluginutils" "^3.1.0" "@types/resolve" "1.17.1" builtin-modules "^3.1.0" deepmerge "^4.2.2" is-module "^1.0.0" - resolve "^1.17.0" + resolve "^1.19.0" "@rollup/plugin-replace@^2.4.1": version "2.4.2" @@ -2610,100 +2552,119 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rollup/rollup-android-arm-eabi@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz#b752b6c88a14ccfcbdf3f48c577ccc3a7f0e66b9" - integrity sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA== - -"@rollup/rollup-android-arm64@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz#33757c3a448b9ef77b6f6292d8b0ec45c87e9c1a" - integrity sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg== - -"@rollup/rollup-darwin-arm64@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz#5234ba62665a3f443143bc8bcea9df2cc58f55fb" - integrity sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w== - -"@rollup/rollup-darwin-x64@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz#981256c054d3247b83313724938d606798a919d1" - integrity sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA== - -"@rollup/rollup-linux-arm-gnueabihf@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz#120678a5a2b3a283a548dbb4d337f9187a793560" - integrity sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g== - -"@rollup/rollup-linux-arm64-gnu@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz#c99d857e2372ece544b6f60b85058ad259f64114" - integrity sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA== - -"@rollup/rollup-linux-arm64-musl@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz#3064060f568a5718c2a06858cd6e6d24f2ff8632" - integrity sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ== - -"@rollup/rollup-linux-riscv64-gnu@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz#987d30b5d2b992fff07d055015991a57ff55fbad" - integrity sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA== - -"@rollup/rollup-linux-x64-gnu@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz#85946ee4d068bd12197aeeec2c6f679c94978a49" - integrity sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA== - -"@rollup/rollup-linux-x64-musl@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz#fe0b20f9749a60eb1df43d20effa96c756ddcbd4" - integrity sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg== - -"@rollup/rollup-win32-arm64-msvc@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz#422661ef0e16699a234465d15b2c1089ef963b2a" - integrity sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ== - -"@rollup/rollup-win32-ia32-msvc@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz#7b73a145891c202fbcc08759248983667a035d85" - integrity sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA== - -"@rollup/rollup-win32-x64-msvc@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz#10491ccf4f63c814d4149e0316541476ea603602" - integrity sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ== - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== +"@rollup/rollup-android-arm-eabi@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.1.tgz#88ba199f996e0000689130ed69e47df8b0dfbc70" + integrity sha512-4C4UERETjXpC4WpBXDbkgNVgHyWfG3B/NKY46e7w5H134UDOFqUJKpsLm0UYmuupW+aJmRgeScrDNfvZ5WV80A== + +"@rollup/rollup-android-arm64@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.1.tgz#c89a55670e1179ed7ba3db06cee0d7da7b3d35ce" + integrity sha512-TrTaFJ9pXgfXEiJKQ3yQRelpQFqgRzVR9it8DbeRzG0RX7mKUy0bqhCFsgevwXLJepQKTnLl95TnPGf9T9AMOA== + +"@rollup/rollup-darwin-arm64@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.1.tgz#52e3496fa66d761833df23a9b4860e517efc7d1d" + integrity sha512-fz7jN6ahTI3cKzDO2otQuybts5cyu0feymg0bjvYCBrZQ8tSgE8pc0sSNEuGvifrQJWiwx9F05BowihmLxeQKw== + +"@rollup/rollup-darwin-x64@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.1.tgz#7678922773a8b53d8b4b3c3cc3e77b65fc71b489" + integrity sha512-WTvdz7SLMlJpektdrnWRUN9C0N2qNHwNbWpNo0a3Tod3gb9leX+yrYdCeB7VV36OtoyiPAivl7/xZ3G1z5h20g== + +"@rollup/rollup-linux-arm-gnueabihf@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.1.tgz#69c3b896e3ee1c3487492323a02c2a3ae0d4b2e7" + integrity sha512-dBHQl+7wZzBYcIF6o4k2XkAfwP2ks1mYW2q/Gzv9n39uDcDiAGDqEyml08OdY0BIct0yLSPkDTqn4i6czpBLLw== + +"@rollup/rollup-linux-arm64-gnu@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.1.tgz#13353f0ab65f4add0241f97f7ccc640b3a2b5cf2" + integrity sha512-bur4JOxvYxfrAmocRJIW0SADs3QdEYK6TQ7dTNz6Z4/lySeu3Z1H/+tl0a4qDYv0bCdBpUYM0sYa/X+9ZqgfSQ== + +"@rollup/rollup-linux-arm64-musl@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.1.tgz#bf64eaa29b2b1e6bc9195f04bb30b2a4ffdc25ae" + integrity sha512-ssp77SjcDIUSoUyj7DU7/5iwM4ZEluY+N8umtCT9nBRs3u045t0KkW02LTyHouHDomnMXaXSZcCSr2bdMK63kA== + +"@rollup/rollup-linux-riscv64-gnu@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.1.tgz#ec05966a4ed1b3338c8842108353ac6d3443dc6a" + integrity sha512-Jv1DkIvwEPAb+v25/Unrnnq9BO3F5cbFPT821n3S5litkz+O5NuXuNhqtPx5KtcwOTtaqkTsO+IVzJOsxd11aQ== + +"@rollup/rollup-linux-s390x-gnu@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.1.tgz#c10a1f1522f0c9191ee45f677bd08763ddfdc039" + integrity sha512-U564BrhEfaNChdATQaEODtquCC7Ez+8Hxz1h5MAdMYj0AqD0GA9rHCpElajb/sQcaFL6NXmHc5O+7FXpWMa73Q== + +"@rollup/rollup-linux-x64-gnu@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.1.tgz#836f948b6efc53f05f57d1d9ba92e90d629b3f22" + integrity sha512-zGRDulLTeDemR8DFYyFIQ8kMP02xpUsX4IBikc7lwL9PrwR3gWmX2NopqiGlI2ZVWMl15qZeUjumTwpv18N7sQ== + +"@rollup/rollup-linux-x64-musl@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.1.tgz#07e0351cc18eeef026f903189d8312833cb6bd1f" + integrity sha512-VTk/MveyPdMFkYJJPCkYBw07KcTkGU2hLEyqYMsU4NjiOfzoaDTW9PWGRsNwiOA3qI0k/JQPjkl/4FCK1smskQ== + +"@rollup/rollup-win32-arm64-msvc@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.1.tgz#6f9359bbec6cb4a2c002642c63e3704b0b5e68b7" + integrity sha512-L+hX8Dtibb02r/OYCsp4sQQIi3ldZkFI0EUkMTDwRfFykXBPptoz/tuuGqEd3bThBSLRWPR6wsixDSgOx/U3Zw== + +"@rollup/rollup-win32-ia32-msvc@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.1.tgz#d6545a29ac9dd8b39a9161b87924f13471eb992e" + integrity sha512-+dI2jVPfM5A8zme8riEoNC7UKk0Lzc7jCj/U89cQIrOjrZTCWZl/+IXUeRT2rEZ5j25lnSA9G9H1Ob9azaF/KQ== + +"@rollup/rollup-win32-x64-msvc@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.1.tgz#d1b221daca9afca1885b91a311c6f4a04b0deeb5" + integrity sha512-YY1Exxo2viZ/O2dMHuwQvimJ0SqvL+OAWQLLY6rvXavgQKjhQUzn7nc1Dd29gjB5Fqi00nrBWctJBOyfVMIVxw== + +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== dependencies: "@hapi/hoek" "^9.0.0" -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers@^8.0.1": version "8.1.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" @@ -2711,34 +2672,27 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@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== +"@testing-library/dom@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.0.0.tgz#ae1ab88aad35a728a38264041163174cafd7e8dd" + integrity sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" chalk "^4.1.0" dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" + lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/react@^13.0.0-alpha.5": - version "13.0.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.0.1.tgz#00d223e182923d341a9610590561fb9dd1324110" - integrity sha512-zeHx3PohYYp+4bTJwrixQY8zSBZjWUGwYc7OhD1EpWTHS92RleApLoP72NdwaWxOrM1P1Uezt3XvGf6t2XSWPQ== +"@testing-library/react@^15.0.2": + version "15.0.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-15.0.2.tgz#d0fd7e9c41b819557639acf5f18e4cd1007ec295" + integrity sha512-5mzIpuytB1ctpyywvyaY2TAAUQVCZIGqwiqFQf6u9lvj/SJQepGUzNV18Xpk+NLCaCE2j7CWrZE0tEf9xLZYiQ== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.5.0" + "@testing-library/dom" "^10.0.0" "@types/react-dom" "^18.0.0" "@tootallnate/once@1": @@ -2747,9 +2701,9 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -2762,27 +2716,16 @@ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== - -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== -"@types/babel__core@^7.20.5": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== @@ -2794,26 +2737,26 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.17.0.tgz#7a9b80f712fe2052bc20da153ff1e552404d8e4b" - integrity sha512-r8aveDbd+rzGP+ykSdF3oPuTVRWRfbBiHl0rVDM2yNEmSMXfkObQLV46b4RnCv3Lra51OlfnZhkkFaDl2MIRaA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.20.7" "@types/debounce@^1.2.1": version "1.2.4" @@ -2821,197 +2764,162 @@ integrity sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw== "@types/draco3d@^1.4.0": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/draco3d/-/draco3d-1.4.2.tgz#7faccb809db2a5e19b9efb97c5f2eb9d64d527ea" - integrity sha512-goh23EGr6CLV6aKPwN1p8kBD/7tT5V/bLpToSbarKrwVejqNrspVrv8DhliteYkkhZYrlq/fwKZRRUzH4XN88w== + version "1.4.9" + resolved "https://registry.yarnpkg.com/@types/draco3d/-/draco3d-1.4.9.tgz#eb3eb7c5fd6f3490ab86ed7ebf36e595a9dc179b" + integrity sha512-4MMUjMQb4yA5fJ4osXx+QxGHt0/ZSy4spT6jL1HM7Tn8OJEC35siqdnpOo+HxPhYjqEFumKfGVF9hJfdyKBIBA== "@types/eslint@^8.4.10": - version "8.4.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" - integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + version "8.56.6" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.6.tgz#d5dc16cac025d313ee101108ba5714ea10eb3ed0" + integrity sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@*", "@types/estree@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - "@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@*": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/is-ci@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.0.tgz#7e8910af6857601315592436f030aaa3ed9783c3" - integrity sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ== - dependencies: - ci-info "^3.1.0" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^29.2.5": - version "29.2.5" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.5.tgz#c27f41a9d6253f288d1910d3c5f09484a56b73c0" - integrity sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.191": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.24.tgz#20ba1bf69c1b4ab405c7a01e950c4f446b05029f" - integrity sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g== + version "20.11.30" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f" + integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw== + dependencies: + undici-types "~5.26.4" "@types/node@^12.7.1": - version "12.20.48" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.48.tgz#55f70bd432b6515828c0298689776861b90ca4fa" - integrity sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ== + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/offscreencanvas@^2019.6.4": - version "2019.7.0" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" - integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== + version "2019.7.3" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz#90267db13f64d6e9ccb5ae3eac92786a7c77a516" + integrity sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A== "@types/prettier@^2.1.5": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" - integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*": - 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== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.1.tgz#cb3cc10ea91141b12c71001fede1017acfbce4db" - integrity sha512-jCwTXvHtRLiyVvKm9aEdHXs8rflVOGd5Sl913JZrPshfXjn8NYsTNZOz70bCsA31IR0TOqwi3ad+X4tSCBoMTw== +"@types/react-dom@^18.0.0": + version "18.2.22" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.22.tgz#d332febf0815403de6da8a97e5fe282cbe609bae" + integrity sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ== dependencies: "@types/react" "*" -"@types/react-native@0.67.4": - version "0.67.4" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.67.4.tgz#97a8d3cff2a7606f247008e93d9fe2a3879bc84e" - integrity sha512-L81CB6W1m0s7d+TH/loP318+VKPwwjWQBUTVYQ1+lQTWiE5jHxyihgCmd7JbwLICo708FRSDwJW7pJoiZHy6yg== +"@types/react-dom@npm:types-react-dom@beta": + version "19.0.0-beta.1" + resolved "https://registry.yarnpkg.com/types-react-dom/-/types-react-dom-19.0.0-beta.1.tgz#393901da15ad756f0ce101f12a1e3256d2ce1256" + integrity sha512-fXQfv6OQOXxmgNQ7RuhX615Wx4680LqVbrEbxch+ZQ56ZDAZKXptLl3XoHaHU31Yd2xiig/VlXzohCexKXNzBQ== dependencies: "@types/react" "*" -"@types/react-reconciler@^0.26.7": - version "0.26.7" - resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz#0c4643f30821ae057e401b0d9037e03e8e9b2a36" - integrity sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ== +"@types/react-native@0.69.5": + version "0.69.5" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.69.5.tgz#7709fdbff031a5ecf1956705e6c4a07cdfe6867c" + integrity sha512-mSUCuGUsW2kJlZiu4GmdYVDKZX/52iyC9rm6dxAmflJj1b7kSO/CMSDy5WbcfS8QerxTqbYGTrIwHD0GnXHzbQ== dependencies: "@types/react" "*" -"@types/react-reconciler@^0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.0.tgz#513acbed173140e958c909041ca14eb40412077f" - integrity sha512-5cjk9ottZAj7eaTsqzPUIlrVbh3hBAO2YaEL1rkjHKB3xNAId7oU8GhzvAX+gfmlfoxTwJnBjPxEHyxkEA1Ffg== +"@types/react-reconciler@^0.28.0", "@types/react-reconciler@^0.28.8": + version "0.28.8" + resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" + integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== dependencies: "@types/react" "*" -"@types/react-test-renderer@^17.0.1": - version "17.0.2" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-17.0.2.tgz#5f800a39b12ac8d2a2149e7e1885215bcf4edbbf" - integrity sha512-+F1KONQTBHDBBhbHuT2GNydeMpPuviduXIVJRB7Y4nma4NR5DrTJfMMZ+jbhEHbpwL+Uqhs1WXh4KHiyrtYTPg== - dependencies: - "@types/react" "^17" - -"@types/react@*", "@types/react@^18.0.5": - version "18.0.5" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.5.tgz#1a4d4b705ae6af5aed369dec22800b20f89f5301" - integrity sha512-UPxNGInDCIKlfqBrm8LDXYWNfLHwIdisWcsH5GpMyGjhEDLFgTtlRBaoWuCua9HcyuE0rMkmAeZ3FXV1pYLIYQ== +"@types/react-test-renderer@18.0.7": + version "18.0.7" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.7.tgz#2cfe657adb3688cdf543995eceb2e062b5a68728" + integrity sha512-1+ANPOWc6rB3IkSnElhjv6VLlKg2dSv/OWClUyZimbLsQyBn8Js9Vtdsi3UICJ2rIQ3k2la06dkB+C92QfhKmg== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" + "@types/react" "*" -"@types/react@^17": - version "17.0.44" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.44.tgz#c3714bd34dd551ab20b8015d9d0dbec812a51ec7" - integrity sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g== +"@types/react@*": + version "18.2.73" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.73.tgz#0579548ad122660d99e00499d22e33b81e73ed94" + integrity sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^18.2.47": - version "18.2.47" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" - integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== +"@types/react@npm:types-react@beta": + version "19.0.0-beta.1" + resolved "https://registry.yarnpkg.com/types-react/-/types-react-19.0.0-beta.1.tgz#0a5ee6e0c8eb3d238c3f8ad61bb5820faa53c84d" + integrity sha512-gQpuPdi+Gu+nIFmhnFLINkGQ4j0eRY7olV3lzncFJy2g5TfnSEFD1xU86u5KgRytFswwZ5pGEPWEizefwPaxTw== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -3021,187 +2929,159 @@ dependencies: "@types/node" "*" -"@types/scheduler@*", "@types/scheduler@^0.16.2": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/semver@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa" - integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== +"@types/scheduler@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" + integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/semver@^7.3.12", "@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/styled-components@^5.1.34": - version "5.1.34" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.34.tgz#4107df8ef8a7eaba4fa6b05f78f93fba4daf0300" - integrity sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA== +"@types/three@^0.141.0": + version "0.141.0" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.141.0.tgz#d9d81a54b28ebc2a56931dfd4d9c54d25c20d6c8" + integrity sha512-OJdKDgTPVBUgc+s74DYoy4aLznbFFC38Xm4ElmU1YwGNgR7GGFVvFCX7lpVgOsT6S1zSJtGdajTsOYE8/xY9nA== dependencies: - "@types/hoist-non-react-statics" "*" - "@types/react" "*" - csstype "^3.0.2" - -"@types/stylis@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.0.tgz#199a3f473f0c3a6f6e4e1b17cdbc967f274bdc6b" - integrity sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw== + "@types/webxr" "*" -"@types/three@^0.139.0": - version "0.139.0" - resolved "https://registry.yarnpkg.com/@types/three/-/three-0.139.0.tgz#69af1f0c52f8eea390f513e05478af1dd7f49e6f" - integrity sha512-4V/jZhyq7Mv05coUzxL3bz8AuBOSi/1F0RY7ujisHTV0Amy/fnYJ+s7TSJ1/hXjZukSkpuFRgV+wvWUEMbsMbQ== - -"@types/webxr@*": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.6.tgz#835c7ac9983a732e2e849d0d302bc735aa455126" - integrity sha512-/uWg82/WT+Pl18b2kkG6nlbiiaNIb8RN2mvvcGexGvwLvUrEhDhGBzYHiwa5nQPtin0hISyrXkKOKVScTK+kKg== - -"@types/webxr@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.2.tgz#5d9627b0ffe223aa3b166de7112ac8a9460dc54f" - integrity sha512-szL74BnIcok9m7QwYtVmQ+EdIKwbjPANudfuvDrAF8Cljg9MKUlIoc1w5tjj9PMpeSH3U1Xnx//czQybJ0EfSw== +"@types/webxr@*", "@types/webxr@^0.5.2": + version "0.5.14" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.14.tgz#9a03121a4912ea113b31e5c9c17f164d4fff8a1f" + integrity sha512-UEMMm/Xn3DtEa+gpzUrOcDj+SJS1tk5YodjwOxcqStNhCfPcwgyC5Srg2ToVKyg2Fhq16Ffpb0UWUQHqoT9AMA== "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + version "15.0.19" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" + integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== dependencies: "@types/yargs-parser" "*" "@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.19.tgz#8dbecdc9ab48bee0cb74f6e3327de3fa0d0c98ae" - integrity sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ== + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c" - integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ== +"@typescript-eslint/eslint-plugin@^5.17.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/type-utils" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" + graphemer "^1.4.0" ignore "^5.2.0" natural-compare-lite "^1.4.0" - regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" - integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA== +"@typescript-eslint/parser@^5.17.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d" - integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412" - integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ== +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: - "@typescript-eslint/typescript-estree" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" - integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056" - integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.1", "@typescript-eslint/utils@^5.10.0": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9" - integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA== +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb" - integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@use-gesture/core@10.2.11": - version "10.2.11" - resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.2.11.tgz#914c36f190bcf452500d11a11fc294fe56e5dc2f" - integrity sha512-5YeVrT9prf9UeaAO+2fIuiKdZ01uVBvVsjG79berGZPTHVkz01eFX2ODWJG05uQTqmRw6olz1J80yt6qcGPdvA== - -"@use-gesture/core@10.2.24": - version "10.2.24" - resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.2.24.tgz#88d13a60954ba62463c774acb92d12bf7b3d810c" - integrity sha512-ZL7F9mgOn3Qlnp6QLI9jaOfcvqrx6JPE/BkdVSd8imveaFTm/a3udoO6f5Us/1XtqnL4347PsIiK6AtCvMHk2Q== +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@use-gesture/react@^10.2.24": - version "10.2.24" - resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.2.24.tgz#bc13780381e786b286f099f69ea3801bb9ed27a5" - integrity sha512-rAZ8Nnpu1g4eFzqCPlaq+TppJpMy0dTpYOQx5KpfoBF4P3aWnCqwj7eKxcmdIb1NJKpIJj50DPugUH4mq5cpBg== - dependencies: - "@use-gesture/core" "10.2.24" +"@use-gesture/core@10.3.1": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.3.1.tgz#976c9421e905f0079d49822cfd5c2e56b808fc56" + integrity sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw== -"@use-gesture/react@latest": - version "10.2.11" - resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.2.11.tgz#f23776050aeaee3b18f80df9cd2b765229bbfa66" - integrity sha512-yATjHv6ZNe9Jar1YtJvcb6KxwpcGGW/X8FEUY6xo2mDxHkP7dCsnhZZm7I+giGlrJKBMvpVBARsbUhwQP6v6nA== +"@use-gesture/react@^10.2.24", "@use-gesture/react@latest": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.3.1.tgz#17a743a894d9bd9a0d1980c618f37f0164469867" + integrity sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g== dependencies: - "@use-gesture/core" "10.2.11" + "@use-gesture/core" "10.3.1" "@vitejs/plugin-react-refresh@^1.3.6": version "1.3.6" @@ -3225,15 +3105,20 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" -"@webgpu/glslang@^0.0.15": - version "0.0.15" - resolved "https://registry.yarnpkg.com/@webgpu/glslang/-/glslang-0.0.15.tgz#f5ccaf6015241e6175f4b90906b053f88483d1f2" - integrity sha512-niT+Prh3Aff8Uf1MVBVUsaNjFj9rJAKDXuoHIKiQbB+6IUP/3J3JIhBNyZ7lDhytvXxw6ppgnwKZdDJ08UMj4Q== +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +"@xmldom/xmldom@~0.7.7": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3" + integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g== abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abort-controller@^3.0.0: version "3.0.0" @@ -3245,7 +3130,7 @@ abort-controller@^3.0.0: absolute-path@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" - integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= + integrity sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA== accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7: version "1.3.8" @@ -3274,19 +3159,19 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== agent-base@6: version "6.0.2" @@ -3303,7 +3188,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3318,10 +3203,10 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" @@ -3373,31 +3258,28 @@ 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== -ansi-styles@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" appdirsjs@^1.2.4: - version "1.2.6" - resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.6.tgz#fccf9ee543315492867cacfcfd4a2b32257d30ac" - integrity sha512-D8wJNkqMCeQs3kLasatELsddox/Xqkhp+J07iXGyL54fVN7oc+nmNfYzGuCs1IEP6uBw+TfpuO3JKwc+lECy4w== + version "1.2.7" + resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3" + integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw== arg@^4.1.0: version "4.1.3" @@ -3416,15 +3298,17 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -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== +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -3434,39 +3318,28 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - -array-includes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -3475,47 +3348,101 @@ array-union@^2.1.0: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== +array.prototype.findlast@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== ast-types@0.14.2: version "0.14.2" @@ -3539,17 +3466,15 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" +async@^3.2.2: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -3561,6 +3486,13 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" @@ -3580,26 +3512,19 @@ babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-jest@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" - integrity sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^29.3.1" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.2.0" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -3621,10 +3546,10 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" - integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -3632,20 +3557,37 @@ babel-plugin-jest-hoist@^29.2.0: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" + integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.1" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.1: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" + babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" babel-plugin-polyfill-regenerator@^0.3.0: @@ -3655,6 +3597,13 @@ babel-plugin-polyfill-regenerator@^0.3.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" + integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.1" + babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" @@ -3719,12 +3668,12 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" -babel-preset-jest@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" - integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^29.2.0" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -3732,7 +3681,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.1.2, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3758,16 +3707,25 @@ better-path-resolve@1.0.0: is-windows "^1.0.0" bidi-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.2.tgz#1a497a762c2ddea377429d2649c9ce0f8a91527f" - integrity sha512-rzSy/k7WdX5zOyeHHCOixGXbCHkyogkxPKL2r8QtzHmVQDiWCXUWa18bLdMWT9CYMLOYTjWpTHawuev2ouYJVw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" + integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== dependencies: require-from-string "^2.0.2" big-integer@1.6.x: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" blueimp-md5@^2.10.0: version "2.19.0" @@ -3796,6 +3754,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -3820,9 +3785,9 @@ braces@^3.0.2: fill-range "^7.0.1" breakword@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.5.tgz#fd420a417f55016736b5b615161cae1c8f819810" - integrity sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg== + version "1.0.6" + resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.6.tgz#242506e7b871b7fad1bce8dc05cb0f2a129c12bd" + integrity sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw== dependencies: wcwidth "^1.0.1" @@ -3831,23 +3796,13 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.20.2, browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== +browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -3881,13 +3836,21 @@ buffer-alloc@^1.1.0: buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -3897,14 +3860,14 @@ buffer@^6.0.3: ieee754 "^1.2.1" builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== cache-base@^1.0.1: version "1.0.1" @@ -3921,32 +3884,35 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== callsites@^3.0.0: version "3.1.0" @@ -3972,34 +3938,17 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" - integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= - camera-controls@^2.4.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-2.7.3.tgz#99e0449f68d203bf5f98f6c4ac0021c10b5c13a8" - integrity sha512-L4mxjBd3u8qiOLozdWrH2P8ZybSsDXBF7iyNyqNEFJhPUkovmuARWR8JTc1B/qlclOIg6FvZZA/0uAZMMim0mw== - -caniuse-lite@^1.0.30001400: - version "1.0.30001444" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001444.tgz#c0a530776eb44d933b493de1d05346f2527b30fc" - integrity sha512-ecER9xgJQVMqcrxThKptsW0pPxSae8R2RB87LNa+ivW9ppNWRHEplXcDzkCOP4LYWGj8hunXLqaiC41iBATNyg== + version "2.8.3" + resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-2.8.3.tgz#54c296d21564dede84e56ffd6b75b3daa3c76e90" + integrity sha512-zFjqUR6onLkG+z1A6vAWfzovxZxWVSvp6e5t3lfZgfgPZtX3n74aykNAUaoRbq8Y3tOxadHkDjbfGDOP9hFf2w== -caniuse-lite@^1.0.30001565: - version "1.0.30001576" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" - integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== +caniuse-lite@^1.0.30001587: + version "1.0.30001600" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079" + integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4008,14 +3957,6 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -4034,32 +3975,20 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chevrotain@^10.1.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-10.1.2.tgz#c990ab43e32fd0bfb176ad1cbdebf48302ac8542" - integrity sha512-hvRiQuhhTZxkPMGD/dke+s1EGo8AkKDBU05CcufBO278qgAQSwIC4QyLdHz0CFHVtqVYWjlAS5D1KwvBbaHT+w== - dependencies: - "@chevrotain/cst-dts-gen" "^10.1.2" - "@chevrotain/gast" "^10.1.2" - "@chevrotain/types" "^10.1.2" - "@chevrotain/utils" "^10.1.2" - lodash "4.17.21" - regexp-to-ast "0.5.0" - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.1.0, ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== +ci-info@^3.2.0, ci-info@^3.7.0, ci-info@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== class-utils@^0.3.5: version "0.3.6" @@ -4076,13 +4005,6 @@ 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-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -4090,10 +4012,10 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.0.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-truncate@^2.1.0: version "2.1.0" @@ -4150,22 +4072,22 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -4187,7 +4109,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" @@ -4200,14 +4122,9 @@ colorette@^1.0.7: integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== colorette@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combined-stream@^1.0.8: version "1.0.8" @@ -4226,10 +4143,15 @@ commander@^2.19.0, commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^9.3.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== commander@~2.13.0: version "2.13.0" @@ -4239,12 +4161,12 @@ commander@~2.13.0: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== compressible@~2.0.16: version "2.0.18" @@ -4269,7 +4191,7 @@ compression@^1.7.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== connect@^3.6.5: version "3.7.0" @@ -4282,11 +4204,9 @@ connect@^3.6.5: utils-merge "1.0.1" convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" @@ -4296,15 +4216,14 @@ convert-source-map@^2.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.22.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.0.tgz#7ce17ab57c378be2c717c7c8ed8f82a50a25b3e4" - integrity sha512-WwA7xbfRGrk8BGaaHlakauVXrlYmAIkk8PNGb1FDQS+Rbrewc3pgFfwJFRw6psmJVAll7Px9UHRYE16oRQnwAQ== +core-js-compat@^3.20.2, core-js-compat@^3.21.0, core-js-compat@^3.36.1: + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" + integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== dependencies: - browserslist "^4.20.2" - semver "7.0.0" + browserslist "^4.23.0" core-util-is@~1.0.0: version "1.0.3" @@ -4321,6 +4240,19 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -4336,7 +4268,7 @@ cross-env@^7.0.3: cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -4362,20 +4294,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= - -css-to-react-native@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" - integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^4.0.2" - cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -4393,15 +4311,10 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - csstype@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" - integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== csv-generate@^3.4.3: version "3.4.3" @@ -4418,7 +4331,7 @@ csv-stringify@^5.6.5: resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== -csv@^5.3.1: +csv@^5.5.3: version "5.5.3" resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== @@ -4437,29 +4350,56 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + dataloader@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" - integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" + integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== dayjs@^1.8.15: - version "1.11.1" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.1.tgz#90b33a3dda3417258d48ad2771b415def6545eb0" - integrity sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA== + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4474,9 +4414,9 @@ debug@^3.2.7: ms "^2.1.1" decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -4484,24 +4424,29 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -4512,36 +4457,46 @@ deepmerge@^3.2.0: integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" -define-properties@^1.1.3: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -4556,27 +4511,32 @@ define-property@^2.0.2: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== denodeify@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= + integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg== depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-gpu@^5.0.28: - version "5.0.37" - resolved "https://registry.yarnpkg.com/detect-gpu/-/detect-gpu-5.0.37.tgz#27febe44d478ef4d35cd38007355da795ba075d5" - integrity sha512-EraWs84faI4iskB4qvE39bevMIazEvd1RpoyGLOBesRLbiz6eMeJqqRPHjEFClfRByYZzi9IzU35rBXIO76oDw== + version "5.0.38" + resolved "https://registry.yarnpkg.com/detect-gpu/-/detect-gpu-5.0.38.tgz#1c05ce728ea1229d16db15b865631609bf0d6952" + integrity sha512-36QeGHSXYcJ/RfrnPEScR8GDprbXFG4ZhXsfVNVHztZr38+fRxgHnJl3CjYXXjbeRUhu3ZZBJh6Lg0A9v0Qd8A== dependencies: webgl-constants "^1.1.1" @@ -4595,10 +4555,10 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" - integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: version "4.0.2" @@ -4627,9 +4587,9 @@ doctrine@^3.0.0: esutils "^2.0.2" dom-accessibility-api@^0.5.9: - version "0.5.13" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" - integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== domexception@^2.0.1: version "2.0.1" @@ -4639,9 +4599,9 @@ domexception@^2.0.1: webidl-conversions "^5.0.0" draco3d@^1.4.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.2.tgz#a09604a9e6bbf4e5a69208af4622038c55ef4ca7" - integrity sha512-AeRQ25Fb29c14vpjnh167UGW0nGY0ZpEM3ld+zEXoEySlmEXcXfsCHZeTgo5qXH925V1JsdjrzasdaQ22/vXog== + version "1.5.7" + resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.7.tgz#94f9bce293eb8920c159dc91a4ce9124a9e899e0" + integrity sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ== eastasianwidth@^0.2.0: version "0.2.0" @@ -4651,17 +4611,12 @@ eastasianwidth@^0.2.0: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.601: - version "1.4.629" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.629.tgz#9cbffe1b08a5627b6a25118360f7fd3965416caf" - integrity sha512-5UUkr3k3CZ/k+9Sw7vaaIMyOzMC0XbPyprKI3n0tbKDqkzTDOjK4izm7DxlkueRMim6ZZQ1ja9F7hoFVplHihA== +electron-to-chromium@^1.4.668: + version "1.4.719" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz#22a94ce7a5150511ba88e900836039e159efe22c" + integrity sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q== emittery@^0.13.1: version "0.13.1" @@ -4686,7 +4641,7 @@ emoji-regex@^9.2.2: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0: version "1.4.4" @@ -4696,16 +4651,17 @@ end-of-stream@^1.1.0: once "^1.4.0" enquirer@^2.3.0, enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" envinfo@^7.7.2: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.11.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" + integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== error-ex@^1.3.1: version "1.3.2" @@ -4715,11 +4671,11 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" - integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: - stackframe "^1.1.1" + stackframe "^1.3.4" errorhandler@^1.5.0: version "1.5.1" @@ -4729,38 +4685,112 @@ errorhandler@^1.5.0: accepts "~1.3.7" escape-html "~1.0.3" -es-abstract@^1.19.1, es-abstract@^1.19.2: - version "1.19.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.5.tgz#a2cb01eb87f724e815b278b0dd0d00f36ca9a7f1" - integrity sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA== - dependencies: - call-bind "^1.0.2" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.2.tgz#693312f3940f967b8dd3eebacb590b01712622e0" + integrity sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" + is-typed-array "^1.1.13" is-weakref "^1.0.2" - object-inspect "^1.12.0" + object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" -es-shim-unscopables@^1.0.0: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.17: + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -4771,49 +4801,49 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.19.3: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" @@ -4826,100 +4856,107 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-import-resolver-alias@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.13.0" + resolve "^1.22.4" -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== +eslint-module-utils@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" - find-up "^2.1.0" eslint-plugin-import@^2.25.4: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" eslint-plugin-jest@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.1.tgz#b85b4adf41c682ea29f1f01c8b11ccc39b5c672c" - integrity sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg== + version "27.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" + integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== dependencies: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-prettier@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" - integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-plugin-react-hooks@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz#71c39e528764c848d8253e1aa2c7024ed505f6c4" - integrity sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ== + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.29.4: - version "7.29.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" - integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== - dependencies: - array-includes "^3.1.4" - array.prototype.flatmap "^1.2.5" + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.0" - object.values "^1.1.5" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.6" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" eslint-scope@^5.1.1: version "5.1.1" @@ -4929,94 +4966,81 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.12.0, eslint@^8.32.0: - version "8.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" - integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.12.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -5055,18 +5079,13 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0, event-target-shim@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -5080,7 +5099,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0: +execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -5113,12 +5132,12 @@ execa@^5.0.0, execa@^5.1.1: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5138,59 +5157,68 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -expect@^29.0.0, expect@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" - integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/expect-utils" "^29.3.1" - jest-get-type "^29.2.0" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" -expo-asset@^8.4.6: - version "8.4.6" - resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.4.6.tgz#1c40e9badac66dbd3d2be2810711937e5b9b09bd" - integrity sha512-Kpzcmmf1lceHnZkAdJOvq7l7SU/hCL59vAj2xUZS66U6lFkUf7LNEA/NzILA56loCd4cka5ShYlWs+BMchyFDQ== +expo-asset@^8.6.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.14.0.tgz#ac5afd1716cee3afc3818de53ed5228ae1b862b5" + integrity sha512-XovwM6RsOdTSw9yEw2gonkOnM8Yw5HoADZhoX4yhBRi/P5YSckJR9ipiQSOJBnHFU1JlxT9+AeAPTqnTqT8tyg== dependencies: + "@react-native/assets-registry" "~0.72.0" blueimp-md5 "^2.10.0" + expo-constants "~15.3.0" + expo-file-system "~15.9.0" invariant "^2.2.4" md5-file "^3.2.3" - path-browserify "^1.0.0" - url-parse "^1.4.4" -expo-file-system@^15.4.3: - version "15.4.3" - resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.4.3.tgz#0cb2464c6e663ad8e8a742d5c538ed8ff1013b11" - integrity sha512-HaaCBTUATs2+i7T4jxIvoU9rViAHMvOD2eBaJ1H7xPHlwZlMORjQs7bsNKonR/TQoduxZBJLVZGawvaAJNCH8g== +expo-constants@~15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-15.3.0.tgz#18f33b9774fc2477065b1d935fb22c7ba49c0d3f" + integrity sha512-3HbZOBn4IAtBFvzifQRNebcqW6t2q9QobSwYpaW74Wjq1cu8sV3ZWHCM9cHyW3Rr2lElRReq/ViEYCvrYc0cEQ== + dependencies: + "@expo/config" "~8.4.0" + uuid "^3.3.2" + +expo-file-system@^15.4.3, expo-file-system@~15.9.0: + version "15.9.0" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.9.0.tgz#b048b9168875634efcce0aa002ee0eec31ed42a8" + integrity sha512-ikzqBGpbSzp/57+aruXzRR2s0HEVYxdd1o3RxfswJRujjT/6X128xmUTTFDaQUr+zydyvxvY7Mo0szWpXhPyLA== dependencies: uuid "^3.4.0" -expo-gl-cpp@~11.1.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/expo-gl-cpp/-/expo-gl-cpp-11.1.1.tgz#883781535658a3598f2262425b1d3527b0e72760" - integrity sha512-BWcJ3cZAo0ZlKueKwb3uRYrRjZPF/CfgE96hBCnLhYBs2TOWt/iV8s5+H0fvZuHBKo13AK/9NdyVRaAb88DKqg== +expo-gl-cpp@~11.4.0: + version "11.4.0" + resolved "https://registry.yarnpkg.com/expo-gl-cpp/-/expo-gl-cpp-11.4.0.tgz#62b4b5c61ef065e94aa790a872aad2eee2ae11ea" + integrity sha512-vt9QYKX/4TxMaNnbv9ww5KILwyCmg91gqwA/6xuo4MqWxGkZoxy+b8lqsQthuPdn+FHgF0BNcvFW9nbN+JeSRg== -expo-gl@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/expo-gl/-/expo-gl-11.1.2.tgz#e0864f7a50d85f3d7242b545096acf1be6fd7d39" - integrity sha512-sNdJObyPUimpWlna4ttdwR9rRHvMn03kqzqc6BVYOWidaPA/T3VsXuuYkPNKc8ps//17U1jvMSl/8FmE0jqRzA== +expo-gl@^11.4.0: + version "11.4.0" + resolved "https://registry.yarnpkg.com/expo-gl/-/expo-gl-11.4.0.tgz#0aa6b05908f1a8405f804f3e1a360a215569b9f2" + integrity sha512-Q0/4git7mNanxPe4/DMC6dk9F1Xu2ACTmacWdoLjS3NByUzFt25vFtrbf9R3FCgWcBlA9ncfVp1CsYgA4+61Dg== dependencies: - expo-gl-cpp "~11.1.0" + expo-gl-cpp "~11.4.0" invariant "^2.2.4" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -5226,7 +5254,7 @@ extglob@^2.0.4: fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -5234,14 +5262,14 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.4, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5254,22 +5282,22 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-sta resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -5288,7 +5316,7 @@ file-entry-cache@^6.0.1: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -5324,13 +5352,6 @@ find-cache-dir@^2.0.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -5346,7 +5367,7 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^5.0.0: +find-up@^5.0.0, find-up@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -5363,32 +5384,48 @@ find-yarn-workspace-root2@1.2.16: pkg-dir "^4.2.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flow-parser@0.*: - version "0.176.2" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.176.2.tgz#e04ac9f766ea9491fd515c84a82ef360e3a0c659" - integrity sha512-unqoh60i18C67h2rvK0SCFUBac/waUcx7CF1a5E4D0Cwj1NErTP42RF7yb7+dy25Tpyzt7uwVtXw13Wr17VzWA== + version "0.232.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.232.0.tgz#db93a660e7017bd366290944c3328ca506ca7d2b" + integrity sha512-U8vcKyYdM+Kb0tPzfPJ5JyPMU0uXKwHxp0L6BcEc+wBlbTW9qRhOqV5DeGXclgclVvtqQNGEG8Strj/b6c/IxA== flow-parser@^0.121.0: version "0.121.0" resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.121.0.tgz#9f9898eaec91a9f7c323e9e992d81ab5c58e618f" integrity sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" form-data@^3.0.0: version "3.0.1" @@ -5402,19 +5439,19 @@ form-data@^3.0.0: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= + integrity sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ== dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -5451,27 +5488,32 @@ fs-extra@^9.0.1: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.3: +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -functions-have-names@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" - integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -5483,14 +5525,16 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -5516,23 +5560,29 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +getenv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" + integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + integrity sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA== dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -5540,7 +5590,7 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + integrity sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w== dependencies: is-glob "^2.0.0" @@ -5558,10 +5608,10 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5570,18 +5620,48 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.0.0, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -5597,61 +5677,78 @@ globby@^11.0.0, globby@^11.1.0: glsl-noise@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/glsl-noise/-/glsl-noise-0.0.0.tgz#367745f3a33382c0eeec4cb54b7e99cfc1d7670b" - integrity sha1-NndF86MzgsDu7Ey1S36Zz8HXZws= + integrity sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w== + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.1.1" + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -5660,7 +5757,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -5669,32 +5766,39 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" + +hermes-engine@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" + integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== -hermes-engine@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.9.0.tgz#84d9cfe84e8f6b1b2020d6e71b350cec84ed982f" - integrity sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw== +hermes-estree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.6.0.tgz#e866fddae1b80aec65fe2ae450a5f2070ad54033" + integrity sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w== -hermes-parser@0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.4.7.tgz#410f5129d57183784d205a0538e6fbdcf614c9ea" - integrity sha512-jc+zCtXbtwTiXoMAoXOHepxAaGVFIp89wwE9qcdwnMd/uGVEtPoY8FaFSsx0ThPvyKirdR2EsIIDVrpbSXz1Ag== +hermes-parser@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.6.0.tgz#00d14e91bca830b3c1457050fa4187400cb96328" + integrity sha512-Vf58jBZca2+QBLR9h7B7mdg8oFz2g5ILz1iVouZ5DOrOrAfBmPfJjdjDT8jrO0f+iJ4/hSRrQHqHIjSnTaLUDQ== + dependencies: + hermes-estree "0.6.0" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -5703,12 +5807,10 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -hoist-non-react-statics@^3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" +hls.js@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-1.3.5.tgz#0e8b0799ecf2feb7ba199f5e95f35ba9552e04f4" + integrity sha512-uybAvKS6uDe0MnWNEPnO0krWVr+8m2R0hJ/viql8H3MVK+itq8gGQuIYoFHL3rECkIpNH98Lw8YuuWMKZxp3Ew== hosted-git-info@^2.1.4: version "2.8.9" @@ -5782,7 +5884,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -5794,25 +5896,30 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore@^5.1.4, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.0, ignore@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== image-size@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5831,7 +5938,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -5841,23 +5948,23 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" invariant@^2.2.4: @@ -5868,28 +5975,36 @@ invariant@^2.2.4: loose-envify "^1.0.0" ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + version "1.1.9" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" + integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== dependencies: - kind-of "^3.0.2" + hasown "^2.0.0" -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: - kind-of "^6.0.0" + call-bind "^1.0.2" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" is-bigint@^1.0.1: version "1.0.4" @@ -5911,47 +6026,33 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.2.0, is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== dependencies: - kind-of "^3.0.2" + hasown "^2.0.0" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== dependencies: - kind-of "^6.0.0" + is-typed-array "^1.1.13" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -5959,37 +6060,35 @@ is-date-object@^1.0.1: has-tostringtag "^1.0.0" is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + integrity sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -6001,17 +6100,24 @@ is-extendable@^1.0.1: is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6028,10 +6134,17 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== dependencies: is-extglob "^1.0.0" @@ -6042,15 +6155,25 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -6062,7 +6185,7 @@ is-number-object@^1.0.4: is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -6079,7 +6202,7 @@ is-path-inside@^3.0.3: is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -6093,6 +6216,11 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -6108,17 +6236,22 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" @@ -6146,10 +6279,27 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -6158,6 +6308,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6166,39 +6324,44 @@ is-windows@^1.0.0, is-windows@^1.0.2: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -6206,13 +6369,24 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -6225,20 +6399,40 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -its-fine@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.0.6.tgz#087b14d71137816dab676d8b57c35a6cd5d2b021" - integrity sha512-VZJZPwVT2kxe5KQv+TxCjojfLiUIut8zXDNLTxcM7gJ/xQ/bSPk5M0neZ+j3myy45KKkltY1mm1jyJgx3Fxsdg== +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +its-fine@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.2.5.tgz#5466c287f86a0a73e772c8d8d515626c97195dc9" + integrity sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA== dependencies: "@types/react-reconciler" "^0.28.0" +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-changed-files@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" @@ -6248,12 +6442,13 @@ jest-changed-files@^27.5.1: execa "^5.0.0" throat "^6.0.1" -jest-changed-files@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" - integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" + jest-util "^29.7.0" p-limit "^3.1.0" jest-circus@^27.5.1: @@ -6281,28 +6476,29 @@ jest-circus@^27.5.1: stack-utils "^2.0.3" throat "^6.0.1" -jest-circus@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.3.1.tgz#177d07c5c0beae8ef2937a67de68f1e17bbf1b4a" - integrity sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg== +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: - "@jest/environment" "^29.3.1" - "@jest/expect" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^29.3.1" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-runtime "^29.3.1" - jest-snapshot "^29.3.1" - jest-util "^29.3.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" p-limit "^3.1.0" - pretty-format "^29.3.1" + pretty-format "^29.7.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" @@ -6324,22 +6520,21 @@ jest-cli@^27.5.1: prompts "^2.0.1" yargs "^16.2.0" -jest-cli@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.3.1.tgz#e89dff427db3b1df50cea9a393ebd8640790416d" - integrity sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.3.1" - jest-util "^29.3.1" - jest-validate "^29.3.1" - prompts "^2.0.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" yargs "^17.3.1" jest-config@^27.5.1: @@ -6372,31 +6567,31 @@ jest-config@^27.5.1: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-config@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.3.1.tgz#0bc3dcb0959ff8662957f1259947aedaefb7f3c6" - integrity sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg== +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.3.1" - "@jest/types" "^29.3.1" - babel-jest "^29.3.1" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.3.1" - jest-environment-node "^29.3.1" - jest-get-type "^29.2.0" - jest-regex-util "^29.2.0" - jest-resolve "^29.3.1" - jest-runner "^29.3.1" - jest-util "^29.3.1" - jest-validate "^29.3.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.3.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -6410,15 +6605,15 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" - integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^29.3.1" - jest-get-type "^29.2.0" - pretty-format "^29.3.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-docblock@^27.5.1: version "27.5.1" @@ -6427,10 +6622,10 @@ jest-docblock@^27.5.1: dependencies: detect-newline "^3.0.0" -jest-docblock@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" - integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" @@ -6445,16 +6640,16 @@ jest-each@^27.5.1: jest-util "^27.5.1" pretty-format "^27.5.1" -jest-each@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.3.1.tgz#bc375c8734f1bb96625d83d1ca03ef508379e132" - integrity sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^29.2.0" - jest-util "^29.3.1" - pretty-format "^29.3.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" jest-environment-jsdom@^27.5.1: version "27.5.1" @@ -6481,17 +6676,17 @@ jest-environment-node@^27.5.1: jest-mock "^27.5.1" jest-util "^27.5.1" -jest-environment-node@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.3.1.tgz#5023b32472b3fba91db5c799a0d5624ad4803e74" - integrity sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag== +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== dependencies: - "@jest/environment" "^29.3.1" - "@jest/fake-timers" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.3.1" - jest-util "^29.3.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" jest-get-type@^26.3.0: version "26.3.0" @@ -6503,33 +6698,12 @@ jest-get-type@^27.5.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" - integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== - -jest-haste-map@^26.5.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: +jest-haste-map@^27.3.1, jest-haste-map@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== @@ -6549,20 +6723,20 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-haste-map@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.3.1.tgz#af83b4347f1dae5ee8c2fb57368dc0bb3e5af843" - integrity sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^29.2.0" - jest-util "^29.3.1" - jest-worker "^29.3.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: @@ -6599,13 +6773,13 @@ jest-leak-detector@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-leak-detector@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz#95336d020170671db0ee166b75cd8ef647265518" - integrity sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^29.2.0" - pretty-format "^29.3.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-matcher-utils@^27.5.1: version "27.5.1" @@ -6617,15 +6791,15 @@ jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" - integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^29.3.1" - jest-get-type "^29.2.0" - pretty-format "^29.3.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" jest-message-util@^27.5.1: version "27.5.1" @@ -6642,18 +6816,18 @@ jest-message-util@^27.5.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" - integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.3.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" @@ -6665,34 +6839,29 @@ jest-mock@^27.5.1: "@jest/types" "^27.5.1" "@types/node" "*" -jest-mock@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.3.1.tgz#60287d92e5010979d01f218c6b215b688e0f313e" - integrity sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-util "^29.3.1" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-regex-util@^29.2.0: - version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" - integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== jest-resolve-dependencies@^27.5.1: version "27.5.1" @@ -6703,13 +6872,13 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve-dependencies@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz#a6a329708a128e68d67c49f38678a4a4a914c3bf" - integrity sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - jest-regex-util "^29.2.0" - jest-snapshot "^29.3.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" jest-resolve@^27.5.1: version "27.5.1" @@ -6727,19 +6896,19 @@ jest-resolve@^27.5.1: resolve.exports "^1.1.0" slash "^3.0.0" -jest-resolve@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.3.1.tgz#9a4b6b65387a3141e4a40815535c7f196f1a68a7" - integrity sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.3.1" - jest-validate "^29.3.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" jest-runner@^27.5.1: @@ -6769,30 +6938,30 @@ jest-runner@^27.5.1: source-map-support "^0.5.6" throat "^6.0.1" -jest-runner@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.3.1.tgz#a92a879a47dd096fea46bb1517b0a99418ee9e2d" - integrity sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^29.3.1" - "@jest/environment" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^29.2.0" - jest-environment-node "^29.3.1" - jest-haste-map "^29.3.1" - jest-leak-detector "^29.3.1" - jest-message-util "^29.3.1" - jest-resolve "^29.3.1" - jest-runtime "^29.3.1" - jest-util "^29.3.1" - jest-watcher "^29.3.1" - jest-worker "^29.3.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" p-limit "^3.1.0" source-map-support "0.5.13" @@ -6824,42 +6993,34 @@ jest-runtime@^27.5.1: slash "^3.0.0" strip-bom "^4.0.0" -jest-runtime@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.3.1.tgz#21efccb1a66911d6d8591276a6182f520b86737a" - integrity sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A== - dependencies: - "@jest/environment" "^29.3.1" - "@jest/fake-timers" "^29.3.1" - "@jest/globals" "^29.3.1" - "@jest/source-map" "^29.2.0" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" - jest-message-util "^29.3.1" - jest-mock "^29.3.1" - jest-regex-util "^29.2.0" - jest-resolve "^29.3.1" - jest-snapshot "^29.3.1" - jest-util "^29.3.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - jest-serializer@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" @@ -6896,49 +7057,33 @@ jest-snapshot@^27.5.1: pretty-format "^27.5.1" semver "^7.3.2" -jest-snapshot@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.3.1.tgz#17bcef71a453adc059a18a32ccbd594b8cc4e45e" - integrity sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" - "@types/babel__traverse" "^7.0.6" - "@types/prettier" "^2.1.5" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.3.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^29.3.1" - jest-get-type "^29.2.0" - jest-haste-map "^29.3.1" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^29.3.1" - semver "^7.3.5" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^27.0.0, jest-util@^27.5.1: +jest-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== @@ -6950,12 +7095,12 @@ jest-util@^27.0.0, jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" - integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -6986,17 +7131,17 @@ jest-validate@^27.5.1: leven "^3.1.0" pretty-format "^27.5.1" -jest-validate@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.3.1.tgz#d56fefaa2e7d1fde3ecdc973c7f7f8f25eea704a" - integrity sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.2.0" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^29.3.1" + pretty-format "^29.7.0" jest-watcher@^27.5.1: version "27.5.1" @@ -7011,21 +7156,21 @@ jest-watcher@^27.5.1: jest-util "^27.5.1" string-length "^4.0.1" -jest-watcher@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.3.1.tgz#3341547e14fe3c0f79f9c3a4c62dbc3fc977fd4a" - integrity sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.13.1" - jest-util "^29.3.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^26.0.0, jest-worker@^26.3.0, jest-worker@^26.6.2: +jest-worker@^26.3.0: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -7034,7 +7179,7 @@ jest-worker@^26.0.0, jest-worker@^26.3.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.5.1: +jest-worker@^27.2.0, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -7043,25 +7188,25 @@ jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.3.1.tgz#e9462161017a9bb176380d721cab022661da3d6b" - integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" - jest-util "^29.3.1" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.3.1.tgz#c130c0d551ae6b5459b8963747fed392ddbde122" - integrity sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.3.1" + jest-cli "^29.7.0" jetifier@^1.6.2: version "1.6.8" @@ -7069,21 +7214,16 @@ jetifier@^1.6.2: integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw== joi@^17.2.1: - version "17.6.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" - integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.0" + version "17.12.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.2.tgz#283a664dabb80c7e52943c557aab82faea09f521" + integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" + "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7109,29 +7249,34 @@ jsc-android@^250230.2.1: resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" integrity sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q== -jscodeshift@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.11.0.tgz#4f95039408f3f06b0e39bb4d53bc3139f5330e2f" - integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== - dependencies: - "@babel/core" "^7.1.6" - "@babel/parser" "^7.1.6" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" - "@babel/plugin-proposal-optional-chaining" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-typescript" "^7.1.0" - "@babel/register" "^7.0.0" +jsc-safe-url@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz#141c14fbb43791e88d5dc64e85a374575a83477a" + integrity sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q== + +jscodeshift@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.13.1.tgz#69bfe51e54c831296380585c6d9e733512aecdef" + integrity sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ== + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" babel-core "^7.0.0-bridge.0" - colors "^1.1.2" + chalk "^4.1.2" flow-parser "0.*" graceful-fs "^4.2.4" micromatch "^3.1.10" neo-async "^2.5.0" node-dir "^0.1.17" - recast "^0.20.3" - temp "^0.8.1" + recast "^0.20.4" + temp "^0.8.4" write-file-atomic "^2.3.0" jsdom@^16.6.0: @@ -7175,7 +7320,12 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" @@ -7195,31 +7345,31 @@ json-schema-traverse@^0.4.1: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@2.x, json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" +json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -7232,39 +7382,38 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - "jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.2.2" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz#6ab1e52c71dfc0c0707008a91729a9491fe9f76c" - integrity sha512-HDAyJ4MNQBboGpUnHAVUNJs6X0lh058s6FuixsFGP7MgJYpD6Vasd6nzSG5iIfXu1zAYlHJ/zsOKNlrenTUBnw== + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: - array-includes "^3.1.4" - object.assign "^4.1.2" + json-buffer "3.0.1" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -7272,7 +7421,7 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== optionalDependencies: graceful-fs "^4.1.9" @@ -7281,10 +7430,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -ktx-parse@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/ktx-parse/-/ktx-parse-0.2.2.tgz#b037b66044855215b332cb73104590af49e47791" - integrity sha512-cFBc1jnGG2WlUf52NbDUXK2obJ+Mo9WUkBRvr6tP6CKxRMvZwDDFNV3JAS4cewETp5KyexByfWm9sm+O8AffiQ== +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== leven@^3.1.0: version "3.1.0" @@ -7299,18 +7448,17 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= +lie@^3.0.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" + immediate "~3.0.5" -lilconfig@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" - integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== lines-and-columns@^1.1.6: version "1.2.4" @@ -7318,26 +7466,26 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lint-staged@^12.3.7: - version "12.3.8" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.3.8.tgz#ee3fe2e16c9d76f99d8348072900b017d6d76901" - integrity sha512-0+UpNaqIwKRSGAFOCcpuYNIv/j5QGVC+xUVvmSdxHO+IfIGoHbFLo3XcPmV/LLnsVj5EAncNHVtlITSoY5qWGQ== + version "12.5.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.5.0.tgz#d6925747480ae0e380d13988522f9dd8ef9126e3" + integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== dependencies: cli-truncate "^3.1.0" colorette "^2.0.16" - commander "^8.3.0" - debug "^4.3.3" + commander "^9.3.0" + debug "^4.3.4" execa "^5.1.1" - lilconfig "2.0.4" - listr2 "^4.0.1" - micromatch "^4.0.4" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" normalize-path "^3.0.0" - object-inspect "^1.12.0" + object-inspect "^1.12.2" pidtree "^0.5.0" string-argv "^0.3.1" - supports-color "^9.2.1" + supports-color "^9.2.2" yaml "^1.10.2" -listr2@^4.0.1: +listr2@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== @@ -7361,14 +7509,6 @@ load-yaml-file@^0.2.0: pify "^4.0.1" strip-bom "^3.0.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7391,57 +7531,43 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.clamp@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash.clamp/-/lodash.clamp-4.0.3.tgz#5c24bedeeeef0753560dc2b4cb4671f90a6ddfaa" - integrity sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= - -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - lodash.startcase@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" - integrity sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg= + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.0.1" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" log-update@^4.0.0: version "4.0.0" @@ -7491,10 +7617,15 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== maath@^0.10.7: version "0.10.7" @@ -7508,6 +7639,13 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" +magic-string@^0.30.0: + version "0.30.8" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -7516,12 +7654,12 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-error@1.x, make-error@^1.1.1: version "1.3.6" @@ -7538,12 +7676,12 @@ makeerror@1.0.12: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" @@ -7553,7 +7691,7 @@ map-obj@^4.0.0: map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -7564,6 +7702,11 @@ md5-file@^3.2.3: dependencies: buffer-alloc "^1.1.0" +memoize-one@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + meow@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" @@ -7609,97 +7752,138 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== meshline@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/meshline/-/meshline-3.1.6.tgz#eee67d9b0fd9841652cc1dc2d3833093ae8e68ca" - integrity sha512-8JZJOdaL5oz3PI/upG8JvP/5FfzYUOhrkJ8np/WKvXzl0/PZ2V9pqTvCIjSKv+w9ccg2xb+yyBhXAwt6ier3ug== + version "3.3.0" + resolved "https://registry.yarnpkg.com/meshline/-/meshline-3.3.0.tgz#8d926d3889ea9c37b37484961fbfbff0a464cd51" + integrity sha512-EKKf2TLnfyqUeA7ryWFKgT9HchTMATvECGZnMQjtlcyxK0sB8shVLVkemBUp9dB3tkDEmoqQDLJCPStjkH8D7A== -metro-babel-register@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.66.2.tgz#c6bbe36c7a77590687ccd74b425dc020d17d05af" - integrity sha512-3F+vsVubUPJYKfVMeol8/7pd8CC287Rw92QYzJD8LEmI980xcgwMUEVBZ0UIAUwlLgiJG/f4Mwhuji2EeBXrPg== +metro-babel-transformer@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz#dca61852be273824a4b641bd1ecafff07ff3ad1f" + integrity sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA== dependencies: "@babel/core" "^7.14.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/register" "^7.0.0" - escape-string-regexp "^1.0.5" + hermes-parser "0.6.0" + metro-source-map "0.70.3" + nullthrows "^1.1.1" -metro-babel-transformer@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz#fce0a3e314d28a5e7141c135665e1cc9b8e7ce86" - integrity sha512-aJ/7fc/Xkofw8Fqa51OTDhBzBz26mmpIWrXAZcPdQ8MSTt883EWncxeCEjasc79NJ89BRi7sOkkaWZo2sXlKvw== +metro-babel-transformer@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.70.4.tgz#3ff0007c7fc009d5b656a71003a1bbb0560f6b70" + integrity sha512-XUM2929qE2AR5iqNnMof80h5lDf6rEZWP9J47u2XQI41TZT5J3Ttk33OJ7/ysLhv7ZPYt/WLnjB8skf23UA+yw== dependencies: "@babel/core" "^7.14.0" - hermes-parser "0.4.7" - metro-source-map "0.66.2" + hermes-parser "0.6.0" + metro-source-map "0.70.4" nullthrows "^1.1.1" -metro-cache-key@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.66.2.tgz#d6463d2a53e887a38419d523962cc24ea0e780b4" - integrity sha512-WtkNmRt41qOpHh1MkNA4nLiQ/m7iGL90ysSKD+fcLqlUnOBKJptPQm0ZUv8Kfqk18ddWX2KmsSbq+Sf3I6XohQ== +metro-cache-key@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.70.4.tgz#5d09ee6378cb5288db5a58bfc7273723c6b632c7" + integrity sha512-hZ5LMm54YCNmxxhKAnHdM9wGSji7bzyLWLSkJqY1u+yQjockQIEWR7uEFiBZ5up8K+eoiqmF5K8+VbrnZP8+Iw== -metro-cache@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.66.2.tgz#e0af4e0a319898f7d42a980f7ee5da153fcfd019" - integrity sha512-5QCYJtJOHoBSbL3H4/Fpl36oA697C3oYHqsce+Hk/dh2qtODUGpS3gOBhvP1B8iB+H8jJMyR75lZq129LJEsIQ== +metro-cache@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.70.4.tgz#d74d1a21c95f4abfb2bec9a0b44b345558df18a4" + integrity sha512-E78Psscwu3EHCwC+bGb9jXxFg8UL0zyWu5cjaBWrKa9NhIqiyCpUBrT0e9TfYxNdb7/OfMQUXW6oNm1HOZHPlg== dependencies: - metro-core "0.66.2" - mkdirp "^0.5.1" + metro-core "0.70.4" rimraf "^2.5.4" -metro-config@0.66.2, metro-config@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.66.2.tgz#e365acdb66ad0cda0182b9c9910760a97ee4293b" - integrity sha512-0C+PrKKIBNNzLZUKN/8ZDJS2U5FLMOTXDWbvBHIdqb6YXz8WplXR2+xlSlaSCCi5b+GR7cWFWUNeKA4GQS1/AQ== +metro-config@0.70.4, metro-config@^0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.70.4.tgz#64a747efca743f772ff662732fb90ff17447a4ce" + integrity sha512-9ellClttQyXF5O487OiFNGxM87PSzsx0m61B7vdXzdyXhCwHk1a8J/8zn5WmOa9/Ix2dJ04N32NzeKgMWVhwQw== dependencies: cosmiconfig "^5.0.5" jest-validate "^26.5.2" - metro "0.66.2" - metro-cache "0.66.2" - metro-core "0.66.2" - metro-runtime "0.66.2" + metro "0.70.4" + metro-cache "0.70.4" + metro-core "0.70.4" + metro-runtime "0.70.4" -metro-core@0.66.2, metro-core@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.66.2.tgz#ead776a17b3e5a307e6dc22259db30bf5c7e8490" - integrity sha512-JieLZkef/516yxXYvQxWnf3OWw5rcgWRy76K8JV/wr/i8LGVGulPAXlIi445/QZzXVydzRVASKAEVqyxM5F4mA== +metro-core@0.70.4, metro-core@^0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.70.4.tgz#053ecfcd56ba64c9a691b004b55be1c00da09a77" + integrity sha512-g4o3TD/EHiNOEXkE3MsyqvspKoBuZ3KoJDQnS7NlSwWK4nG6xcw8UiW1W/YJOfDnn/EkXIq3XAUkUX4UWVXuuQ== dependencies: - jest-haste-map "^26.5.2" + jest-haste-map "^27.3.1" lodash.throttle "^4.1.1" - metro-resolver "0.66.2" + metro-resolver "0.70.4" -metro-hermes-compiler@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.66.2.tgz#30290748f83805faa601aa487632444915795823" - integrity sha512-nCVL1g9uR6vrw5+X1wjwZruRyMkndnzGRMqjqoljf+nGEqBTD607CR7elXw4fMWn/EM+1y0Vdq5altUu9LdgCA== +metro-hermes-compiler@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.70.4.tgz#9507c089e7ea31977c233651b48a5f5cac6d32ea" + integrity sha512-Eor/8SIntD23kQxrhlrPegel+sg3e3xDEaNFOxL3Rljbozr1zFq9Pyd3RjK48BkbpGCZmgXSW1XUY1aqzbkePA== -metro-inspector-proxy@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.66.2.tgz#a83c76bd2f2fd7b9240be92acf9a8b1d1404547a" - integrity sha512-gnLc9121eznwP0iiA9tCBW8qZjwIsCgwHWMF1g1Qaki9le9tzeJv3dK4/lFNGxyfSaLO7vahQEhsEYsiRnTROg== +metro-inspector-proxy@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.70.4.tgz#420bd0d531d406565efdef65dc99ca25c8e26e8c" + integrity sha512-ZkJmVb8CSRVDk0jJX2b9r10KBBG0Qc4mtK3A/FicsnaZ02ZxTy+bnSMEkyW4fhjbHS6Y3h9aBTFOkrK/Jmy1lA== dependencies: connect "^3.6.5" debug "^2.2.0" - ws "^1.1.5" + ws "^7.5.1" yargs "^15.3.1" -metro-minify-uglify@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.66.2.tgz#6061dbee4f61e6d5bb3c100e4379ff6f2e16e42b" - integrity sha512-7TUK+L5CmB5x1PVnFbgmjzHW4CUadq9H5jgp0HfFoWT1skXAyEsx0DHkKDXwnot0khnNhBOEfl62ctQOnE110Q== +metro-minify-uglify@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.70.4.tgz#6af9f2de3ab7de72996c8f5569cd46192e6eafb4" + integrity sha512-S/gtO75s/z6g8m1DOnZW1mm4ei2sTledowJ85rtBsZC8M7r/CAsSynVqkKkWjJ6Ro5TrlE7cfiTnQGojLXMWgg== dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz#fddebcf413ad4ea617d4f47f7c1da401052de734" - integrity sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ== +metro-react-native-babel-preset@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz#1c77ec4544ecd5fb6c803e70b21284d7483e4842" + integrity sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg== dependencies: "@babel/core" "^7.14.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + +metro-react-native-babel-preset@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.4.tgz#fac01e1887ad5d15d0caa14c97e8eb52d880b623" + integrity sha512-qcJuLqvjlKhrOOuQShhVzCjjp7kHZIXCL+ybnYBqOY2ALVCyR3aELH0aUtOztRpJYFnqAMDOJmGqNVi6cUd24g== + dependencies: + "@babel/core" "^7.14.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -7719,17 +7903,15 @@ metro-react-native-babel-preset@0.66.2: "@babel/plugin-transform-destructuring" "^7.0.0" "@babel/plugin-transform-exponentiation-operator" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" "@babel/plugin-transform-function-name" "^7.0.0" "@babel/plugin-transform-literals" "^7.0.0" "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" "@babel/plugin-transform-parameters" "^7.0.0" "@babel/plugin-transform-react-display-name" "^7.0.0" "@babel/plugin-transform-react-jsx" "^7.0.0" "@babel/plugin-transform-react-jsx-self" "^7.0.0" "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-regenerator" "^7.0.0" "@babel/plugin-transform-runtime" "^7.0.0" "@babel/plugin-transform-shorthand-properties" "^7.0.0" "@babel/plugin-transform-spread" "^7.0.0" @@ -7740,61 +7922,109 @@ metro-react-native-babel-preset@0.66.2: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.66.2, metro-react-native-babel-transformer@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.66.2.tgz#768f341e7c3d3d1c38189799c9884b90d1c32eb7" - integrity sha512-z1ab7ihIT0pJrwgi9q2IH+LcW/xUWMQ0hH+Mrk7wbKQB0RnJdXFoxphrfoVHBHMUu+TBPetUcEkKawkK1e7Cng== +metro-react-native-babel-transformer@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.3.tgz#195597c32488f820aa9e441bbca7c04fe7de7a2d" + integrity sha512-WKBU6S/G50j9cfmFM4k4oRYprd8u3qjleD4so1E2zbTNILg+gYla7ZFGCAvi2G0ZcqS2XuGCR375c2hF6VVvwg== dependencies: "@babel/core" "^7.14.0" babel-preset-fbjs "^3.4.0" - hermes-parser "0.4.7" - metro-babel-transformer "0.66.2" - metro-react-native-babel-preset "0.66.2" - metro-source-map "0.66.2" + hermes-parser "0.6.0" + metro-babel-transformer "0.70.3" + metro-react-native-babel-preset "0.70.3" + metro-source-map "0.70.3" nullthrows "^1.1.1" -metro-resolver@0.66.2, metro-resolver@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.66.2.tgz#f743ddbe7a12dd137d1f7a555732cafcaea421f8" - integrity sha512-pXQAJR/xauRf4kWFj2/hN5a77B4jLl0Fom5I3PHp6Arw/KxSBp0cnguXpGLwNQ6zQC0nxKCoYGL9gQpzMnN7Hw== +metro-react-native-babel-transformer@^0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.4.tgz#2d6c742ab6ee74385b4f6f794f9ec984cbb9bf43" + integrity sha512-wDHPqzn0QJKGJIMucbyBb1nXMry1yN+/brsqcXSiyS04PerEU25UKb0KXYMGmjCoygxCs2K71nCF1PsscNOVMA== + dependencies: + "@babel/core" "^7.14.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.6.0" + metro-babel-transformer "0.70.4" + metro-react-native-babel-preset "0.70.4" + metro-source-map "0.70.4" + nullthrows "^1.1.1" + +metro-resolver@0.70.4, metro-resolver@^0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.70.4.tgz#01a148bfb0bfac11c8d7f7b42372cc4fc4004c31" + integrity sha512-Dr+N54Av2raxP6IafBvIgwQKuYXbtfkDN0A4vwhiWM4exyQm+3eS8eRfByZKGYVAQ0iIK3WbXGpRo+pwhgj2yg== dependencies: absolute-path "^0.0.0" -metro-runtime@0.66.2, metro-runtime@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.66.2.tgz#3409ee957b949b6c7b72ef6ed2b9af9a4f4a910e" - integrity sha512-vFhKBk2ot9FS4b+2v0OTa/guCF/QDAOJubY0CNg7PzCS5+w4y3IvZIcPX4SSS1t8pYEZBLvtdtTDarlDl81xmg== +metro-runtime@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.70.3.tgz#09231b9d05dcbdfb5a13df0a45307273e6fe1168" + integrity sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w== + dependencies: + "@babel/runtime" "^7.0.0" + +metro-runtime@0.70.4, metro-runtime@^0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.70.4.tgz#b6299e9d10379912df8907ea013746bb23fe30e4" + integrity sha512-f1kGOOos5hxIdlXxBvQVg1WMiHeV4vR4B4fGikbMGlPtZEuzdYbep0myKjCHJc6v88IPtUmcgj5uZmhny8+jGg== + dependencies: + "@babel/runtime" "^7.0.0" + +metro-source-map@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.70.3.tgz#f5976108c18d4661eaa4d188c96713e5d67a903b" + integrity sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw== + dependencies: + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.0.0" + invariant "^2.2.4" + metro-symbolicate "0.70.3" + nullthrows "^1.1.1" + ob1 "0.70.3" + source-map "^0.5.6" + vlq "^1.0.0" -metro-source-map@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.66.2.tgz#b5304a282a5d55fa67b599265e9cf3217175cdd7" - integrity sha512-038tFmB7vSh73VQcDWIbr5O1m+WXWyYafDaOy+1A/2K308YP0oj33gbEgDnZsLZDwcJ+xt1x6KUEBIzlX4YGeQ== +metro-source-map@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.70.4.tgz#50523dd3a8d7fab7cc1f21ac4ada3ec3cd050cf3" + integrity sha512-4NLcyMll1KdSNKG4zM3ftT5JRqYaSBE4ww7D4cdz+niFMd+9iWmK5q2g+eOt29wKrMYpQMK0jLLaWFi9ol03UQ== dependencies: "@babel/traverse" "^7.14.0" "@babel/types" "^7.0.0" invariant "^2.2.4" - metro-symbolicate "0.66.2" + metro-symbolicate "0.70.4" nullthrows "^1.1.1" - ob1 "0.66.2" + ob1 "0.70.4" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz#addd095ce5f77e73ca21ddb5dfb396ff5d4fa041" - integrity sha512-u+DeQHyAFXVD7mVP+GST/894WHJ3i/U8oEJFnT7U3P52ZuLgX8n4tMNxhqZU12RcLR6etF8143aP0Ktx1gFLEQ== +metro-symbolicate@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz#b039e5629c4ed0c999ea0496d580e1c98260f5cb" + integrity sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA== dependencies: invariant "^2.2.4" - metro-source-map "0.66.2" + metro-source-map "0.70.3" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.66.2.tgz#39dd044a23b1343e4f2d2ec34d08128cdf255ed4" - integrity sha512-KTvqplh0ut7oDKovvDG6yzXM02R6X+9b2oVG+qYq8Zd3aCGTi51ASx4ThCNkAHyEvCuJdYg9fxXTL+j+wvhB5w== +metro-symbolicate@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.70.4.tgz#2196b68023f9cf08dc0784fdb24e938e03a5a501" + integrity sha512-XJV040TcUj0uYGB+I2g9o6kX8RKj4Y7bQB/TOGsLevOdKn1gXb3PJ2ESooLl3HmyRDlrqasvdgWyCrkAlJI4Lw== + dependencies: + invariant "^2.2.4" + metro-source-map "0.70.4" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-transform-plugins@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.70.4.tgz#a72db84a81cff7e56b67bb39d017a1f5091ca3aa" + integrity sha512-U16mPSd4WrNyVP1k2uKrT5RAaJeUZPLn8dvzzL7YT2dv1mrQnjAGZ4wDR5q80EQhao05sc2ftw6oPBiPS4sgFg== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" @@ -7802,29 +8032,29 @@ metro-transform-plugins@0.66.2: "@babel/traverse" "^7.14.0" nullthrows "^1.1.1" -metro-transform-worker@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.66.2.tgz#0a8455992132c479721accd52c9bd47deb77769e" - integrity sha512-dO4PtYOMGB7Vzte8aIzX39xytODhmbJrBYPu+zYzlDjyefJZT7BkZ0LkPIThtyJi96xWcGqi9JBSo0CeRupAHw== +metro-transform-worker@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.70.4.tgz#73950d81d82cb58afcf288f0d8c8f35365bff928" + integrity sha512-N6rVZF1yUi4rnJsG+/e1wyrdpy6s39PzzsvA+gAS4Vxfe0iBo91votavjL4GF+tuekui/PoxOq5nOWo5aRAHhg== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" "@babel/parser" "^7.14.0" "@babel/types" "^7.0.0" babel-preset-fbjs "^3.4.0" - metro "0.66.2" - metro-babel-transformer "0.66.2" - metro-cache "0.66.2" - metro-cache-key "0.66.2" - metro-hermes-compiler "0.66.2" - metro-source-map "0.66.2" - metro-transform-plugins "0.66.2" + metro "0.70.4" + metro-babel-transformer "0.70.4" + metro-cache "0.70.4" + metro-cache-key "0.70.4" + metro-hermes-compiler "0.70.4" + metro-source-map "0.70.4" + metro-transform-plugins "0.70.4" nullthrows "^1.1.1" -metro@0.66.2, metro@^0.66.1: - version "0.66.2" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.66.2.tgz#f21759bf00995470e7577b5b88a5277963f24492" - integrity sha512-uNsISfcQ3iKKSHoN5Q+LAh0l3jeeg7ZcNZ/4BAHGsk02erA0OP+l2m+b5qYVoPptHz9Oc3KyG5oGJoTu41pWjg== +metro@0.70.4, metro@^0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.70.4.tgz#6f83974979f60116db9accda92849adf0e5f70be" + integrity sha512-4Ff7jfCF7Jr/PVXvRGVRe5Sb0Qhqceh6i18aYEMfCS0pVsZZcTdXxgTdlB9KGnxSVxT8jjViid+oAAvNJcC2ug== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.14.0" @@ -7835,7 +8065,7 @@ metro@0.66.2, metro@^0.66.1: "@babel/types" "^7.0.0" absolute-path "^0.0.0" accepts "^1.3.7" - async "^2.4.0" + async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" @@ -7843,31 +8073,30 @@ metro@0.66.2, metro@^0.66.1: denodeify "^1.2.1" error-stack-parser "^2.0.6" fs-extra "^1.0.0" - graceful-fs "^4.1.3" - hermes-parser "0.4.7" + graceful-fs "^4.2.4" + hermes-parser "0.6.0" image-size "^0.6.0" invariant "^2.2.4" - jest-haste-map "^26.5.2" - jest-worker "^26.0.0" + jest-haste-map "^27.3.1" + jest-worker "^27.2.0" + jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-register "0.66.2" - metro-babel-transformer "0.66.2" - metro-cache "0.66.2" - metro-cache-key "0.66.2" - metro-config "0.66.2" - metro-core "0.66.2" - metro-hermes-compiler "0.66.2" - metro-inspector-proxy "0.66.2" - metro-minify-uglify "0.66.2" - metro-react-native-babel-preset "0.66.2" - metro-resolver "0.66.2" - metro-runtime "0.66.2" - metro-source-map "0.66.2" - metro-symbolicate "0.66.2" - metro-transform-plugins "0.66.2" - metro-transform-worker "0.66.2" + metro-babel-transformer "0.70.4" + metro-cache "0.70.4" + metro-cache-key "0.70.4" + metro-config "0.70.4" + metro-core "0.70.4" + metro-hermes-compiler "0.70.4" + metro-inspector-proxy "0.70.4" + metro-minify-uglify "0.70.4" + metro-react-native-babel-preset "0.70.4" + metro-resolver "0.70.4" + metro-runtime "0.70.4" + metro-source-map "0.70.4" + metro-symbolicate "0.70.4" + metro-transform-plugins "0.70.4" + metro-transform-worker "0.70.4" mime-types "^2.1.27" - mkdirp "^0.5.1" node-fetch "^2.2.0" nullthrows "^1.1.1" rimraf "^2.5.4" @@ -7876,10 +8105,10 @@ metro@0.66.2, metro@^0.66.1: strip-ansi "^6.0.0" temp "0.8.3" throat "^5.0.0" - ws "^1.1.5" + ws "^7.5.1" yargs "^15.3.1" -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -7898,7 +8127,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7928,11 +8157,6 @@ mime@^2.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -7943,13 +8167,20 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -7959,10 +8190,15 @@ minimist-options@4.1.0, minimist-options@^4.0.2: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== mixin-deep@^1.2.0: version "1.3.2" @@ -7973,9 +8209,9 @@ mixin-deep@^1.2.0: is-extendable "^1.0.1" mixme@^0.5.1: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.4.tgz#8cb3bd0cd32a513c161bf1ca99d143f0bcf2eff3" - integrity sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw== + version "0.5.10" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" + integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== mkdirp@^0.5.1: version "0.5.6" @@ -7984,12 +8220,7 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" -mmd-parser@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mmd-parser/-/mmd-parser-1.0.4.tgz#87cc05782cb5974ca854f0303fc5147bc9d690e7" - integrity sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg== - -mri@^1.1.5: +mri@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== @@ -7997,7 +8228,7 @@ mri@^1.1.5: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -8009,18 +8240,16 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multimatch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" - integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" -nanoid@^3.3.6, nanoid@^3.3.7: +nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -8050,7 +8279,7 @@ natural-compare-lite@^1.4.0: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" @@ -8067,40 +8296,35 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nocache@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" - integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== +nocache@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" + integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" - integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== dependencies: minimatch "^3.0.2" node-fetch@^2.2.0, node-fetch@^2.6.0: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -node-releases@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== - node-stream-zip@^1.9.1: version "1.15.0" resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" @@ -8116,13 +8340,6 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -8153,7 +8370,7 @@ npm-packlist@^2.1.2: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" @@ -8170,33 +8387,38 @@ nullthrows@^1.1.1: integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + +ob1@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.70.3.tgz#f48cd5a5abf54b0c423b1b06b6d4ff4d049816cb" + integrity sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ== -ob1@0.66.2: - version "0.66.2" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.66.2.tgz#8caf548202cf2688944bae47db405a08bca17a61" - integrity sha512-RFewnL/RjE0qQBOuM+2bbY96zmJPIge/aDtsiDbLSb+MOiK8CReAhBHDgL+zrA3F1hQk00lMWpUwYcep750plA== +ob1@0.70.4: + version "0.70.4" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.70.4.tgz#683670a256667ac34f93046ee81eb504dcc0689d" + integrity sha512-u7UUis2Scwy+RDdJ0T49Urb0yTQTyEYt37lHzWDqpLQSLYZZGT3ZNtCvB88Z9yKhhouKD4TNOGkBJgkFJ+84sg== -object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.12.2, object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -8206,61 +8428,72 @@ object-keys@^1.1.1: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== +object.entries@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" -object.hasown@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" - integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== +object.groupby@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.6, object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" on-finished@2.4.1: version "2.4.1" @@ -8272,7 +8505,7 @@ on-finished@2.4.1: on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" @@ -8284,17 +8517,10 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -8309,59 +8535,37 @@ open@^6.2.0: dependencies: is-wsl "^1.1.0" -opentype.js@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/opentype.js/-/opentype.js-1.3.4.tgz#1c0e72e46288473cc4a4c6a2dc60fd7fe6020d77" - integrity sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw== - dependencies: - string.prototype.codepointat "^0.2.1" - tiny-inflate "^1.0.3" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" - -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" wcwidth "^1.0.1" os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== outdent@^0.5.0: version "0.5.0" @@ -8378,14 +8582,7 @@ p-filter@^2.1.0: p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" @@ -8401,13 +8598,6 @@ p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -8441,11 +8631,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -8461,7 +8646,7 @@ parent-module@^1.0.0: parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + integrity sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA== dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -8471,7 +8656,7 @@ parse-glob@^3.0.4: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -8499,17 +8684,12 @@ parseurl@~1.3.3: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -8519,23 +8699,31 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -8551,6 +8739,11 @@ picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516" + integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag== + pidtree@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" @@ -8561,10 +8754,10 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^3.0.0: version "3.0.0" @@ -8581,40 +8774,32 @@ pkg-dir@^4.2.0: find-up "^4.0.0" plist@^3.0.2, plist@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" - integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== dependencies: + "@xmldom/xmldom" "^0.8.8" base64-js "^1.5.1" - xmlbuilder "^9.0.7" + xmlbuilder "^15.1.1" posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-value-parser@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== -postcss@8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss@^8.4.32: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" - source-map-js "^1.0.2" + source-map-js "^1.2.0" potpack@^1.0.1: version "1.0.2" @@ -8622,9 +8807,9 @@ potpack@^1.0.1: integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== preferred-pm@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" - integrity sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ== + version "3.1.3" + resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.3.tgz#4125ea5154603136c3b6444e5f5c94ecf90e4916" + integrity sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w== dependencies: find-up "^5.0.0" find-yarn-workspace-root2 "1.2.16" @@ -8636,11 +8821,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -8648,15 +8828,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -prettier@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== +prettier@^2.6.1, prettier@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-format@^26.5.2, pretty-format@^26.6.2: version "26.6.2" @@ -8677,36 +8852,45 @@ pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" - integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.0.0" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" pretty-quick@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" - integrity sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA== + version "3.3.1" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.3.1.tgz#cfde97fec77a8d201a0e0c9c71d9990e12587ee2" + integrity sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg== dependencies: - chalk "^3.0.0" - execa "^4.0.0" + execa "^4.1.0" find-up "^4.1.0" - ignore "^5.1.4" - mri "^1.1.5" - multimatch "^4.0.0" + ignore "^5.3.0" + mri "^1.2.0" + picocolors "^1.0.0" + picomatch "^3.0.1" + tslib "^2.6.2" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +promise-worker-transferable@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz#2c72861ba053e5ae42b487b4a83b1ed3ae3786e8" + integrity sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw== + dependencies: + is-promise "^2.1.0" + lie "^3.0.2" + promise@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -8718,7 +8902,7 @@ prompts@^2.0.1, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8730,12 +8914,12 @@ prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" @@ -8746,9 +8930,14 @@ pump@^3.0.0: once "^1.3.1" punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== querystringify@^2.1.1: version "2.2.0" @@ -8782,36 +8971,32 @@ react-composer@^5.0.3: dependencies: prop-types "^15.6.0" -react-devtools-core@4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.19.1.tgz#bc37c2ef2f48f28c6af4c7292be9dca1b63deace" - integrity sha512-2wJiGffPWK0KggBjVwnTaAk+Z3MSxKInHmdzPTrBh1mAarexsa93Kw+WMX88+XjN+TtYgAiLe9xeTqcO5FfJTw== +react-devtools-core@4.24.0: + version "4.24.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.24.0.tgz#7daa196bdc64f3626b3f54f2ff2b96f7c4fdf017" + integrity sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg== dependencies: shell-quote "^1.6.1" ws "^7" -react-dom@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.0.0.tgz#26b88534f8f1dbb80853e1eabe752f24100d8023" - integrity sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw== +react-dom@19.0.0-rc.0: + version "19.0.0-rc.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc.0.tgz#6ef81d293f3a3b366bb9cfa0d927a971479c1b3a" + integrity sha512-MhgN2RMYFUkZekkFbsXg9ycwEGaMBzATpTNvGGvWNA9BZZEkdzIL4pv7iDuZKn48YoGARk8ydu4S+Ehd8Yrc4g== dependencies: - loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "0.25.0-rc.0" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" +react-is@19.0.0-rc.0: + version "19.0.0-rc.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-rc.0.tgz#f22acc108348fe9d56c788e5b093e001c835b51e" + integrity sha512-Du6/ueMEZSgY66ssdMBnJFXvJ9ViCUKvRi0sBjxpxcyxlw/dcgSbIl0ahwCsyBEE5TECnymWrMGQ48Dc6VkvUQ== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.0.0.tgz#026f6c4a27dbe33bf4a35655b9e1327c4e55e3f5" - integrity sha512-yUcBYdBBbo3QiPsgYDcfQcIkGZHfxOaoE6HLSnr1sPzMhdyxusbfKOSUbSd/ocGi32dxcj366PsTj+5oggeKKw== + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -8821,34 +9006,30 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-merge-refs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" - integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== - -react-merge-refs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-2.1.1.tgz#e46763f8f1b881c0226ee54a1a2a10ffefba0233" - integrity sha512-jLQXJ/URln51zskhgppGJ2ub7b2WFKGq3cl3NYKtlHoTG+dN2q7EzWrn3hN3EgPsTMvpR9tpq5ijdp7YwFZkag== - -react-native-codegen@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.8.tgz#b7796a54074139d956fff2862cf1285db43c891b" - integrity sha512-k/944+0XD+8l7zDaiKfYabyEKmAmyZgS1mj+4LcSRPyHnrjgCHKrh/Y6jM6kucQ6xU1+1uyMmF/dSkikxK8i+Q== +react-native-codegen@^0.69.1: + version "0.69.2" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.69.2.tgz#e33ac3b1486de59ddae687b731ddbfcef8af0e4e" + integrity sha512-yPcgMHD4mqLbckqnWjFBaxomDnBREfRjDi2G/WxNyPBQLD+PXUEmZTkDx6QoOXN+Bl2SkpnNOSsLE2+/RUHoPw== dependencies: + "@babel/parser" "^7.14.0" flow-parser "^0.121.0" - jscodeshift "^0.11.0" + jscodeshift "^0.13.1" nullthrows "^1.1.1" -react-native@0.67.4: - version "0.67.4" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.67.4.tgz#57a1503daa81f66a61f521ff67b259f126d87f9c" - integrity sha512-NA9d9lNJu9TViEJu2uZxWXUP+QNUilGGA5tdMbVFedNroOH1lnQ3n/FAVoGK1gqGarCgNTtheBxUpEa979Cu8w== +react-native-gradle-plugin@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.7.tgz#96602f909745239deab7b589443f14fce5da2056" + integrity sha512-+4JpbIx42zGTONhBTIXSyfyHICHC29VTvhkkoUOJAh/XHPEixpuBduYgf6Y4y9wsN1ARlQhBBoptTvXvAFQf5g== + +react-native@0.69.3: + version "0.69.3" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.69.3.tgz#8fc7afe0a302294262a6b49ba2089483db734c05" + integrity sha512-SyGkcoEUa/BkO+wKVnv4OsnLSNfUM5zLNXS3iT/3eXjKX91/FKBH/nfR9BE1c60X5LQe/P5QYqr6WPX3TRSQkA== dependencies: "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^6.0.0" - "@react-native-community/cli-platform-android" "^6.0.0" - "@react-native-community/cli-platform-ios" "^6.0.0" + "@react-native-community/cli" "^8.0.3" + "@react-native-community/cli-platform-android" "^8.0.2" + "@react-native-community/cli-platform-ios" "^8.0.2" "@react-native/assets" "1.0.0" "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" @@ -8856,33 +9037,35 @@ react-native@0.67.4: anser "^1.4.9" base64-js "^1.1.2" event-target-shim "^5.0.1" - hermes-engine "~0.9.0" + hermes-engine "~0.11.0" invariant "^2.2.4" jsc-android "^250230.2.1" - metro-react-native-babel-transformer "0.66.2" - metro-runtime "0.66.2" - metro-source-map "0.66.2" + memoize-one "^5.0.0" + metro-react-native-babel-transformer "0.70.3" + metro-runtime "0.70.3" + metro-source-map "0.70.3" + mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" promise "^8.0.3" - prop-types "^15.7.2" - react-devtools-core "4.19.1" - react-native-codegen "^0.0.8" + react-devtools-core "4.24.0" + react-native-codegen "^0.69.1" + react-native-gradle-plugin "^0.0.7" react-refresh "^0.4.0" + react-shallow-renderer "16.15.0" regenerator-runtime "^0.13.2" - scheduler "^0.20.2" + scheduler "^0.21.0" stacktrace-parser "^0.1.3" - use-subscription "^1.0.0" + use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" - integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== +react-reconciler@0.31.0-rc.0: + version "0.31.0-rc.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-rc.0.tgz#1040969b0b86460eeeaae4116d6418f0c2fb4924" + integrity sha512-hOHzEH+aXLQGJjEoFkz2fX5ZQCDu0VjZfhyhIqRyJrz3bwkdEloH3y+xx8/HVr8oqcm65o9/9yaK97dH+tRP2A== dependencies: - loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "0.25.0-rc.0" react-refresh@^0.10.0: version "0.10.0" @@ -8899,7 +9082,7 @@ react-refresh@^0.4.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react-shallow-renderer@^16.13.1: +react-shallow-renderer@16.15.0: version "16.15.0" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== @@ -8907,33 +9090,23 @@ react-shallow-renderer@^16.13.1: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.0.0.tgz#fa403d625ea9478a70ace43db88833f6c3a5bb4c" - integrity sha512-SyZTP/FSkwfiKOZuTZiISzsrC8A80KNlQ8PyyoGoOq+VzMAab6Em1POK/CiX3+XyXG6oiJa1C53zYDbdrJu9fw== +react-test-renderer@19.0.0-rc.0: + version "19.0.0-rc.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-rc.0.tgz#7b9fb94969d862c01b7bf0c68fbf6ff8c2b68680" + integrity sha512-RlAYJEfaOSu5tDrhWhdWWCg/nv+1DQzPYVDhdfqscVyXu340G5YU0i3wl8PxaA+hBe0Dq0L3KNgAoGz4i0au4Q== dependencies: - react-is "^18.0.0" - react-shallow-renderer "^16.13.1" - scheduler "^0.21.0" + react-is "19.0.0-rc.0" + scheduler "0.25.0-rc.0" react-use-refs@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96" - integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A== - dependencies: - loose-envify "^1.1.0" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" +react@19.0.0-rc.0: + version "19.0.0-rc.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc.0.tgz#9f1e9965c30948b472adcf5ba5184413375e4a40" + integrity sha512-8nrDCl5uE54FHeKqKrEO0TS+10bT4cxutJGb2okiJc0FHMQ6I3FeItaqly/1nbijlhSO3HmAVyPIexIQQWYAtQ== read-pkg-up@^7.0.1: version "7.0.1" @@ -8964,10 +9137,19 @@ read-yaml-file@^1.1.0: pify "^4.0.1" strip-bom "^3.0.0" +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8980,9 +9162,9 @@ readable-stream@~2.3.6: readline@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" - integrity sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw= + integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== -recast@^0.20.3: +recast@^0.20.4: version "0.20.5" resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== @@ -9000,10 +9182,23 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -9012,15 +9207,20 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.13.2: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -9032,54 +9232,35 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-to-ast@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" - integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== - -regexp.prototype.flags@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - repeat-element@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" @@ -9088,12 +9269,12 @@ repeat-element@^1.1.2: repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -9108,7 +9289,7 @@ require-main-filename@^2.0.0: requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" @@ -9120,7 +9301,7 @@ resolve-cwd@^3.0.0: resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -9135,37 +9316,35 @@ resolve-from@^5.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" @@ -9186,9 +9365,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^2.5.4: version "2.7.1" @@ -9207,7 +9386,7 @@ rimraf@^3.0.0, rimraf@^3.0.2: rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= + integrity sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg== rimraf@~2.6.2: version "2.6.3" @@ -9216,40 +9395,36 @@ rimraf@~2.6.2: dependencies: glob "^7.1.3" -rollup@^2.32.0: - version "2.70.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.2.tgz#808d206a8851628a065097b7ba2053bd83ba0c0d" - integrity sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg== +rollup@^2.79.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== optionalDependencies: fsevents "~2.3.2" -rollup@^4.2.0: - version "4.9.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.5.tgz#62999462c90f4c8b5d7c38fc7161e63b29101b05" - integrity sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ== +rollup@^4.13.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.1.tgz#5bd6d84eafd60280487085b8bf9c91679571005a" + integrity sha512-hFi+fU132IvJ2ZuihN56dwgpltpmLZHZWsx27rMCTZ2sYwrqlgL5sECGy1eeV2lAihD8EzChBVVhsXci0wD4Tg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.9.5" - "@rollup/rollup-android-arm64" "4.9.5" - "@rollup/rollup-darwin-arm64" "4.9.5" - "@rollup/rollup-darwin-x64" "4.9.5" - "@rollup/rollup-linux-arm-gnueabihf" "4.9.5" - "@rollup/rollup-linux-arm64-gnu" "4.9.5" - "@rollup/rollup-linux-arm64-musl" "4.9.5" - "@rollup/rollup-linux-riscv64-gnu" "4.9.5" - "@rollup/rollup-linux-x64-gnu" "4.9.5" - "@rollup/rollup-linux-x64-musl" "4.9.5" - "@rollup/rollup-win32-arm64-msvc" "4.9.5" - "@rollup/rollup-win32-ia32-msvc" "4.9.5" - "@rollup/rollup-win32-x64-msvc" "4.9.5" + "@rollup/rollup-android-arm-eabi" "4.13.1" + "@rollup/rollup-android-arm64" "4.13.1" + "@rollup/rollup-darwin-arm64" "4.13.1" + "@rollup/rollup-darwin-x64" "4.13.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.13.1" + "@rollup/rollup-linux-arm64-gnu" "4.13.1" + "@rollup/rollup-linux-arm64-musl" "4.13.1" + "@rollup/rollup-linux-riscv64-gnu" "4.13.1" + "@rollup/rollup-linux-s390x-gnu" "4.13.1" + "@rollup/rollup-linux-x64-gnu" "4.13.1" + "@rollup/rollup-linux-x64-musl" "4.13.1" + "@rollup/rollup-win32-arm64-msvc" "4.13.1" + "@rollup/rollup-win32-ia32-msvc" "4.13.1" + "@rollup/rollup-win32-x64-msvc" "4.13.1" fsevents "~2.3.2" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9258,21 +9433,45 @@ run-parallel@^1.1.9: queue-microtask "^1.2.2" rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -9281,25 +9480,10 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +sax@>=0.6.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== saxes@^5.0.1: version "5.0.1" @@ -9308,13 +9492,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -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== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" +scheduler@0.25.0-rc.0: + version "0.25.0-rc.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc.0.tgz#52ca287c10710479feb395665b4b8a4a8db003bf" + integrity sha512-B3aSqMfoRkucM94MztZD1CyNyf68W9A3dL/TT453G6uNcxMBqGQ+rhFKyxNnWH/mfRHlGBr0tF0F472JCETH4g== scheduler@^0.21.0: version "0.21.0" @@ -9323,40 +9504,30 @@ scheduler@^0.21.0: dependencies: loose-envify "^1.1.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== 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" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^6.3.1: +semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -9379,7 +9550,7 @@ send@0.18.0: serialize-error@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= + integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw== serve-static@^1.13.1: version "1.15.0" @@ -9394,7 +9565,29 @@ serve-static@^1.13.1: set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -9418,15 +9611,10 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -9440,43 +9628,39 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +shell-quote@^1.6.1, shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -simple-plist@^1.0.0: +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-plist@^1.1.0: version "1.3.1" resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== @@ -9530,11 +9714,17 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -smartwrap@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-1.2.5.tgz#45ee3e09ac234e5f7f17c16e916f511834f3cd23" - integrity sha512-bzWRwHwu0RnWjwU7dFy7tF68pDAx/zMSu3g7xr9Nx5J0iSImYInglwEVExyHLxXljy6PWMjkSAbwF7t2mPnRmg== +slugify@^1.3.4: + version "1.6.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== + +smartwrap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" + integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== dependencies: + array.prototype.flat "^1.2.3" breakword "^1.0.5" grapheme-splitter "^1.0.4" strip-ansi "^6.0.0" @@ -9571,10 +9761,10 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== source-map-resolve@^0.5.0: version "0.5.3" @@ -9611,17 +9801,17 @@ source-map-url@^0.4.0: source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== sourcemap-codec@^1.4.8: version "1.4.8" @@ -9637,17 +9827,17 @@ spawndamnit@^2.0.0: signal-exit "^3.0.2" spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -9658,9 +9848,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -9672,19 +9862,19 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" - integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== stacktrace-parser@^0.1.3: version "0.1.10" @@ -9696,20 +9886,20 @@ stacktrace-parser@^0.1.3: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" stats-gl@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stats-gl/-/stats-gl-2.0.1.tgz#4626a1575af00f0c5daba41ebc8f8e29a0a1998a" - integrity sha512-EhFm1AxoSBK3MflkFawZ4jmOX1dWu0nBAtCpvGxGsondEvCpsohbpRpM8pi8UAcxG5eRsDsCiRcxdH20j3Rp9A== + version "2.2.7" + resolved "https://registry.yarnpkg.com/stats-gl/-/stats-gl-2.2.7.tgz#9b605f7dfcd3289f1d7791bda5094b8031b35c60" + integrity sha512-3EjvpmVgUic2YxCM+dxwg68B0tzWqMCAmflmdbqEKuqwZL+huYieqV14crm80NB7r2F4mWaYcLLlcpbhteEagw== stats.js@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" - integrity sha1-scPcRtlEmLV4t/05hbgaznExzH0= + integrity sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw== statuses@2.0.1: version "2.0.1" @@ -9719,12 +9909,12 @@ statuses@2.0.1: statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== stream-buffers@2.2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" - integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= + integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== stream-transform@^2.1.3: version "2.1.3" @@ -9734,9 +9924,9 @@ stream-transform@^2.1.3: mixme "^0.5.1" string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-length@^4.0.1: version "4.0.2" @@ -9746,7 +9936,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9755,7 +9945,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0: +string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -9764,40 +9954,58 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.codepointat@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" - integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== +string.prototype.matchall@^4.0.10: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" -string.prototype.matchall@^4.0.6: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" @@ -9806,6 +10014,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^5.0.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -9813,24 +10028,17 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" @@ -9840,7 +10048,7 @@ strip-bom@^4.0.0: strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-final-newline@^2.0.0: version "2.0.0" @@ -9854,30 +10062,23 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -styled-components@^6.1.8: - version "6.1.8" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.8.tgz#c109d36aeea52d8f049e12de2f3be39a6fc86201" - integrity sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw== - dependencies: - "@emotion/is-prop-valid" "1.2.1" - "@emotion/unitless" "0.8.0" - "@types/stylis" "4.2.0" - css-to-react-native "3.2.0" - csstype "3.1.2" - postcss "8.4.31" - shallowequal "1.1.0" - stylis "4.3.1" - tslib "2.5.0" - -stylis@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.1.tgz#ed8a9ebf9f76fe1e12d462f5cc3c4c980b23a7eb" - integrity sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ== +sucrase@^3.20.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" sudo-prompt@^9.0.0: version "9.2.1" @@ -9905,15 +10106,15 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-color@^9.2.1: - version "9.2.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" - integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== +supports-color@^9.2.2: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -9936,12 +10137,12 @@ symbol-tree@^3.2.4: temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= + integrity sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw== dependencies: os-tmpdir "^1.0.0" rimraf "~2.2.6" -temp@^0.8.1: +temp@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== @@ -9961,14 +10162,14 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser@^5.2.1: - version "5.12.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.1.tgz#4cf2ebed1f5bceef5c83b9f60104ac4a78b49e9c" - integrity sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ== +terser@^5.16.8: + version "5.30.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.0.tgz#64cb2af71e16ea3d32153f84d990f9be0cdc22bf" + integrity sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw== dependencies: - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" - source-map "~0.7.2" source-map-support "~0.5.20" test-exclude@^6.0.0: @@ -9983,17 +10184,31 @@ test-exclude@^6.0.0: 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= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -three-mesh-bvh@^0.6.7: - version "0.6.8" - resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.8.tgz#f27d18ca75bdc59316dff0f561af8fb316621a54" - integrity sha512-EGebF9DZx1S8+7OZYNNTT80GXJZVf+UYXD/HyTg/e2kR/ApofIFfUS4ZzIHNnUVIadpnLSzM4n96wX+l7GMbnQ== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" -three-stdlib@^2.28.0, three-stdlib@^2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.29.1.tgz#10a5d6087b69db3a3909054b03c8e55269a1b71f" - integrity sha512-s1MkrrYglkzgTasY/pNHH/QiUFt5TeEn5MIlzyq7BTGAXLDAy93WKBeHPcoxURtEFItMzK9IM1na6NV7W+Xhnw== +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +three-mesh-bvh@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.7.3.tgz#91f2d7e26f230288b5b0a6bdf41bdd9620348945" + integrity sha512-3W6KjzmupjfE89GuHPT31kxKWZ4YGZPEZJNysJpiOZfQRsBQQgmK7v/VJPpjG6syhAvTnY+5Fr77EvIkTLpGSw== + +three-stdlib@^2.13.0: + version "2.29.6" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.29.6.tgz#d1d17a7e5d48921ebb3aed9f5131bb85968e4d29" + integrity sha512-nj9bHkzhhwfmqQcM/keC2RDb0bHhbw6bRXTy81ehzi8F1rtp6pJ5eS0/vl1Eg5RMFqXOMyxJ6sDHPoLU+IrVZg== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" @@ -10002,31 +10217,27 @@ three-stdlib@^2.28.0, three-stdlib@^2.29.1: fflate "^0.6.9" potpack "^1.0.1" -three-stdlib@^2.8.11: - version "2.9.1" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.9.1.tgz#300abf6cf12ab388e515fd8572217288dffe4736" - integrity sha512-e+Hyd47ssVTy2UzUfmaccB7m30qITVMdvGs/QypeGdJa3uwhw1zR9jO/ce61S65Omiy/oGDMWG8dJIZxyQ7u8w== +three-stdlib@^2.29.9: + version "2.29.9" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.29.9.tgz#ee8fe2ce01f08817c15bb7f00c52b6558c981ff8" + integrity sha512-O6HRkJXX5A3DGXdvMwi8XqYlTV1wXdhKhxWmTuDoXFN4aZj96GW7gKj8FQ4bWFV2L8SmXuYSpkvJoG/1GCc9Ug== dependencies: - "@babel/runtime" "^7.16.7" - "@webgpu/glslang" "^0.0.15" - chevrotain "^10.1.2" + "@types/draco3d" "^1.4.0" + "@types/offscreencanvas" "^2019.6.4" + "@types/webxr" "^0.5.2" draco3d "^1.4.1" fflate "^0.6.9" - ktx-parse "^0.2.1" - mmd-parser "^1.0.4" - opentype.js "^1.3.3" potpack "^1.0.1" - zstddec "^0.0.2" -three@^0.139.0: - version "0.139.2" - resolved "https://registry.yarnpkg.com/three/-/three-0.139.2.tgz#b110799a15736df673b9293e31653a4ac73648dd" - integrity sha512-gV7q7QY8rogu7HLFZR9cWnOQAUedUhu2WXAnpr2kdXZP9YDKsG/0ychwQvWkZN5PlNw9mv5MoCTin6zNTXoONg== +three@^0.141.0: + version "0.141.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.141.0.tgz#16677a12b9dd0c3e1568ebad0fd09de15d5a8216" + integrity sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA== three@^0.160.0: - version "0.160.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.160.0.tgz#cd1e4dbd01aee0719280a9086d75545db52b7a8f" - integrity sha512-DLU8lc0zNIPkM7rH5/e1Ks1Z8tWCGRq6g8mPowdDJpw1CFBJMU7UoJjC6PefXW7z//SSl0b2+GCw14LB+uDhng== + version "0.160.1" + resolved "https://registry.yarnpkg.com/three/-/three-0.160.1.tgz#61fe2907312e8604b1f64187f58e047503847413" + integrity sha512-Bgl2wPJypDOZ1stAxwfWAcJ0WQf7QzlptsxkjYiURPz+n5k4RBDLsq+6f9Y75TYxn6aHLcWz+JNmwTOXWrQTBQ== throat@^5.0.0: version "5.0.0" @@ -10034,9 +10245,9 @@ throat@^5.0.0: integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== through2@^2.0.1: version "2.0.5" @@ -10049,12 +10260,7 @@ through2@^2.0.1: through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tiny-inflate@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" - integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmp@^0.0.33: version "0.0.33" @@ -10071,19 +10277,19 @@ tmpl@1.0.5: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -10111,13 +10317,14 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" tr46@^2.1.0: version "2.1.0" @@ -10129,51 +10336,56 @@ tr46@^2.1.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -troika-three-text@^0.47.2: - version "0.47.2" - resolved "https://registry.yarnpkg.com/troika-three-text/-/troika-three-text-0.47.2.tgz#fdf89059c010563bb829262b20c41f69ca79b712" - integrity sha512-qylT0F+U7xGs+/PEf3ujBdJMYWbn0Qci0kLqI5BJG2kW1wdg4T1XSxneypnF05DxFqJhEzuaOR9S2SjiyknMng== +troika-three-text@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-three-text/-/troika-three-text-0.49.0.tgz#bc2dc1924250c477cd39316cd83585dee12550e0" + integrity sha512-sn9BNC6eIX8OO3iAkPwjecJ7Pn21Ve8P1UNFMNeQzXx759rrqS4i4pSZs7FLMYdWyCKVXBFGimBySFwRKLjq/Q== dependencies: bidi-js "^1.0.2" - troika-three-utils "^0.47.2" - troika-worker-utils "^0.47.2" + troika-three-utils "^0.49.0" + troika-worker-utils "^0.49.0" webgl-sdf-generator "1.1.1" -troika-three-utils@^0.47.2: - version "0.47.2" - resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.47.2.tgz#af49ca694245dce631963d5fefe4e8e1b8af9044" - integrity sha512-/28plhCxfKtH7MSxEGx8e3b/OXU5A0xlwl+Sbdp0H8FXUHKZDoksduEKmjQayXYtxAyuUiCRunYIv/8Vi7aiyg== +troika-three-utils@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.49.0.tgz#3fbdbf8783740ce3c1f7acac642e7e957ea4f090" + integrity sha512-umitFL4cT+Fm/uONmaQEq4oZlyRHWwVClaS6ZrdcueRvwc2w+cpNQ47LlJKJswpqtMFWbEhOLy0TekmcPZOdYA== -troika-worker-utils@^0.47.2: - version "0.47.2" - resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.47.2.tgz#e7c5de5f37d56c072b13fa8112bb844e048ff46c" - integrity sha512-mzss4MeyzUkYBppn4x5cdAqrhBHFEuVmMMgLMTyFV23x6GvQMyo+/R5E5Lsbrt7WSt5RfvewjcwD1DChRTA9lA== +troika-worker-utils@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.49.0.tgz#e5e200a09d2e0e4eb9fe818a83effa912e2ec4b4" + integrity sha512-1xZHoJrG0HFfCvT/iyN41DvI/nRykiBtHqFkGaGgJwq5iXfIZFBiPPEHFpPpgyKM3Oo5ITHXP5wM2TNQszYdVg== -ts-jest@^27.1.4: - version "27.1.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.4.tgz#84d42cf0f4e7157a52e7c64b1492c46330943e00" - integrity sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +ts-jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" + integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" lodash.memoize "4.x" make-error "1.x" - semver "7.x" - yargs-parser "20.x" + semver "^7.5.3" + yargs-parser "^21.0.1" ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -10189,30 +10401,25 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsutils@^3.21.0: version "3.21.0" @@ -10221,17 +10428,25 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tty-table@^2.8.10: - version "2.8.13" - resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-2.8.13.tgz#d484a416381973eaebbdf19c79136b390e5c6d70" - integrity sha512-eVV/+kB6fIIdx+iUImhXrO22gl7f6VmmYh0Zbu6C196fe1elcHXd7U6LcLXu0YoVPc2kNesWiukYcdK8ZmJ6aQ== +tty-table@^4.1.5: + version "4.2.3" + resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.2.3.tgz#e33eb4007a0a9c976c97c37fa13ba66329a5c515" + integrity sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA== dependencies: - chalk "^3.0.0" - csv "^5.3.1" - smartwrap "^1.2.3" - strip-ansi "^6.0.0" + chalk "^4.1.2" + csv "^5.5.3" + kleur "^4.1.5" + smartwrap "^2.0.2" + strip-ansi "^6.0.1" wcwidth "^1.0.1" - yargs "^15.1.0" + yargs "^17.7.1" + +tunnel-rat@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tunnel-rat/-/tunnel-rat-0.1.2.tgz#1717efbc474ea2d8aa05a91622457a6e201c0aeb" + integrity sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ== + dependencies: + zustand "^4.3.2" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -10240,13 +10455,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -10282,6 +10490,50 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10290,14 +10542,14 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typescript@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" - integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== uglify-es@^3.1.9: version "3.3.9" @@ -10307,21 +10559,21 @@ uglify-es@^3.1.9: commander "~2.13.0" source-map "~0.6.1" -ultron@1.0.x: +unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -10335,15 +10587,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== union-value@^1.0.0: version "1.0.1" @@ -10355,25 +10607,30 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10386,14 +10643,6 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -10404,9 +10653,9 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== -url-parse@^1.4.4: +url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -10419,11 +10668,6 @@ use-error-boundary@^2.0.6: resolved "https://registry.yarnpkg.com/use-error-boundary/-/use-error-boundary-2.0.6.tgz#10f0cd45f6e53cedca8a567fa2b7bc8c709e4420" integrity sha512-AWCVKSAanLe6R/on/ZkHYtGKfXs8BQX6z/TUGYqtvkajLqQyrGKJJscbahtq8OyN8L3LqTRjJWx4gCOLmfIObw== -use-subscription@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.6.0.tgz#86ace4f60675a4c360712975c4933ac95c7e7f35" - integrity sha512-0Y/cTLlZfw547tJhJMoRA16OUbVqRm6DmvGpiGbmLST6BIA5KU5cKlvlz8DVMrACnWpyEjCkgmhLatthP4jUbA== - use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" @@ -10434,26 +10678,31 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + version "3.11.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" + integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" @@ -10465,9 +10714,9 @@ v8-compile-cache-lib@^3.0.1: integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== v8-to-istanbul@^8.1.0: version "8.1.1" @@ -10479,13 +10728,13 @@ v8-to-istanbul@^8.1.0: source-map "^0.7.3" v8-to-istanbul@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" - integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + convert-source-map "^2.0.0" validate-npm-package-license@^3.0.1: version "3.0.4" @@ -10498,16 +10747,16 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vite@^5.0.11: - version "5.0.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.11.tgz#31562e41e004cb68e1d51f5d2c641ab313b289e4" - integrity sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA== +vite@^5.2.10: + version "5.2.10" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" + integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== dependencies: - esbuild "^0.19.3" - postcss "^8.4.32" - rollup "^4.2.0" + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" optionalDependencies: fsevents "~2.3.3" @@ -10530,7 +10779,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -10540,7 +10789,7 @@ walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" @@ -10557,7 +10806,7 @@ webgl-sdf-generator@1.1.1: webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^5.0.0: version "5.0.0" @@ -10577,9 +10826,9 @@ whatwg-encoding@^1.0.5: iconv-lite "0.4.24" whatwg-fetch@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^2.3.0: version "2.3.0" @@ -10589,7 +10838,7 @@ whatwg-mimetype@^2.3.0: whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -10614,10 +10863,38 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== which-pm@2.0.0: version "2.0.0" @@ -10627,6 +10904,17 @@ which-pm@2.0.0: load-yaml-file "^0.2.0" path-exists "^4.0.0" +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -10641,11 +10929,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wouter@^2.12.1: version "2.12.1" resolved "https://registry.yarnpkg.com/wouter/-/wouter-2.12.1.tgz#11d913324c6320b679873783acb15ea3523b8521" @@ -10653,6 +10936,15 @@ wouter@^2.12.1: dependencies: use-sync-external-store "^1.0.0" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -10662,19 +10954,19 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.3.0: version "2.4.3" @@ -10695,7 +10987,7 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^4.0.1: +write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== @@ -10703,14 +10995,6 @@ write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@^1.1.0, ws@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" - integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== - dependencies: - options ">=0.0.5" - ultron "1.0.x" - ws@^6.1.4: version "6.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" @@ -10718,41 +11002,52 @@ ws@^6.1.4: dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.4.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== +ws@^7, ws@^7.4.6, ws@^7.5.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -xcode@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" - integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ== +xcode@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" + integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== dependencies: - simple-plist "^1.0.0" - uuid "^3.3.2" + simple-plist "^1.1.0" + uuid "^7.0.3" xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlbuilder@^9.0.7: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= +xml2js@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.0.tgz#07afc447a97d2bd6507a1f76eeadddb09f7a8282" + integrity sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c" + integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg== + +xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmldoc@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7" - integrity sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ== - dependencies: - sax "^1.2.1" - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -10771,7 +11066,7 @@ y18n@^5.0.5: yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.2: version "3.1.1" @@ -10788,11 +11083,6 @@ yaml@^1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.x, yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -10801,7 +11091,12 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^21.1.1: +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== @@ -10836,10 +11131,10 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== +yargs@^17.3.1, yargs@^17.7.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1" @@ -10859,19 +11154,19 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zstddec@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.0.2.tgz#57e2f28dd1ff56b750e07d158a43f0611ad9eeb4" - integrity sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA== +zod@^3.21.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== -zustand@^3.5.13, zustand@^3.7.1: +zustand@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== -zustand@^4.4.7: - version "4.4.7" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c" - integrity sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw== +zustand@^4.1.2, zustand@^4.3.2, zustand@^4.4.7: + version "4.5.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.2.tgz#fddbe7cac1e71d45413b3682cdb47b48034c3848" + integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g== dependencies: use-sync-external-store "1.2.0"