diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..53c37a1 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8bf2db4..6f9b6f2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,7 +7,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - node: ['14.x'] + node: ['18.x'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: @@ -24,6 +24,9 @@ jobs: - name: Lint run: yarn lint + + - name: Prettier + run: yarn prettier:check - name: Test run: yarn test --ci --coverage --maxWorkers=2 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..53c37a1 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d0e20ea --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,66 @@ +module.exports = [ + { + env: { + browser: true, + commonjs: true, + es6: true, + node: true, + mocha: true, + jest: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + 'prettier', + ], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 2018, + sourceType: 'module', + impliedStrict: true, + }, + plugins: [ + '@typescript-eslint', + 'react', + 'import', + '@emotion', + // Not strictly needed but fixes un-used imports via --fix + 'unused-imports', + ], + rules: { + 'import/order': 'error', + 'no-unused-vars': 'off', + 'unused-imports/no-unused-imports': 'error', + /** + * ignore if the variable starts with an underscore + */ + '@typescript-eslint/no-unused-vars': [ + 'error', + { varsIgnorePattern: '^_', argsIgnorePattern: '^_' }, + ], + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'react/prop-types': 0, + 'react/display-name': 0, + 'no-console': 'error', + 'func-names': ['error', 'always'], + strict: ['error', 'global'], + 'prefer-const': 'error', + 'react/no-unknown-property': ['error', { ignore: ['css'] }], + }, + settings: { + react: { + createClass: 'createReactClass', // Regex for Component Factory to use, + // default to "createReactClass" + pragma: 'React', // Pragma to use, default to "React" + version: 'detect', // React version. "detect" automatically picks the version you have installed. + }, + }, + }, +]; diff --git a/package.json b/package.json index 1b15d69..cfd36cb 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,10 @@ "start": "tsdx watch", "build": "tsdx build", "test": "tsdx test --passWithNoTests", - "lint": "tsdx lint", + "lint": "eslint ./src/**/*", + "lint:ts:fix": "eslint --fix ./src", + "prettier": "prettier --write './src/**/*'", + "prettier:check": "prettier --check './src/**/*'", "prepare": "tsdx build", "size": "size-limit", "analyze": "size-limit --why", @@ -36,10 +39,10 @@ } }, "prettier": { - "printWidth": 80, + "tabWidth": 4, "semi": true, - "singleQuote": true, - "trailingComma": "es5" + "singleQuote": false, + "trailingComma": "all" }, "author": "Mikyo King ", "module": "dist/point-cloud.esm.js", @@ -71,9 +74,17 @@ "@types/react": "^18.0.8", "@types/react-dom": "^18.0.0", "@types/three": "^0.139.0", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", "babel-loader": "^8.2.5", "chromatic": "^6.5.4", "d3-scale-chromatic": "^3.0.0", + "eslint": "^9.1.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-unused-imports": "^3.1.0", "husky": "^7.0.4", "react": "18", "react-dom": "18", diff --git a/src/Axes.tsx b/src/Axes.tsx index 85db6c2..b4c4bd5 100644 --- a/src/Axes.tsx +++ b/src/Axes.tsx @@ -1,26 +1,26 @@ -import React, { useEffect, useRef } from 'react'; -import { Color } from 'three'; +import React, { useEffect, useRef } from "react"; +import { Color } from "three"; export const Axes = ({ - size, - color = '#ffffff', + size, + color = "#ffffff", }: { - /** - * The size of the axes helper - */ - size: number; - /** - * The color of the axes helper - * @default '#ffffff' - */ - color?: string; + /** + * The size of the axes helper + */ + size: number; + /** + * The color of the axes helper + * @default '#ffffff' + */ + color?: string; }) => { - const ref = useRef(null); - useEffect(() => { - if (ref.current) { - const colorObj = new Color(color); - ref.current.setColors(colorObj, colorObj, colorObj); - } - }, [color]); - return ; + const ref = useRef(null); + useEffect(() => { + if (ref.current) { + const colorObj = new Color(color); + ref.current.setColors(colorObj, colorObj, colorObj); + } + }, [color]); + return ; }; diff --git a/src/Cluster.tsx b/src/Cluster.tsx index f74a7c4..c279e36 100644 --- a/src/Cluster.tsx +++ b/src/Cluster.tsx @@ -1,71 +1,71 @@ -import React, { useMemo } from 'react'; -import * as THREE from 'three'; -import { mergeBufferGeometries } from 'three-stdlib'; -import { PointCoordinates } from './types'; +import React, { useMemo } from "react"; +import * as THREE from "three"; +import { mergeBufferGeometries } from "three-stdlib"; +import { PointCoordinates } from "./types"; const DEFAULT_RADIUS = 0.1; export type ClusterPoint = { - position: PointCoordinates; + position: PointCoordinates; }; export type ClusterProps = { - data: Array; - /** - * The radius of each cluster point - */ - pointRadius?: number; - /** - * The color of the cluster - * @default '#999999' - */ - color?: string; - /** - * The opacity of the cluster - * @default 0.1 - */ - opacity?: number; - /** - * Whether or not to render the mesh as a wire frame - * @default false - */ - wireframe?: boolean; + data: Array; + /** + * The radius of each cluster point + */ + pointRadius?: number; + /** + * The color of the cluster + * @default '#999999' + */ + color?: string; + /** + * The opacity of the cluster + * @default 0.1 + */ + opacity?: number; + /** + * Whether or not to render the mesh as a wire frame + * @default false + */ + wireframe?: boolean; }; export function Cluster({ - data, - pointRadius = DEFAULT_RADIUS, - color = '#999999', - opacity = 0.2, - wireframe = false, + data, + pointRadius = DEFAULT_RADIUS, + color = "#999999", + opacity = 0.2, + wireframe = false, }: ClusterProps) { - const singleGeometry = useMemo(() => { - let geometries: THREE.SphereGeometry[] = []; - // Keep track of the points added so that we can remove duplicates - const pointSet = new Set(); - data.forEach((point) => { - const { position } = point; - // Remove duplicates - if (!pointSet.has(position.join(','))) { - const geometry = new THREE.SphereGeometry(pointRadius, 12, 12); - geometry.translate(position[0], position[1], position[2] || 0); - geometries.push(geometry); - pointSet.add(position.join(',')); - } - }); + const singleGeometry = useMemo(() => { + let geometries: THREE.SphereGeometry[] = []; + // Keep track of the points added so that we can remove duplicates + const pointSet = new Set(); + data.forEach((point) => { + const { position } = point; + // Remove duplicates + if (!pointSet.has(position.join(","))) { + const geometry = new THREE.SphereGeometry(pointRadius, 12, 12); + geometry.translate(position[0], position[1], position[2] || 0); + geometries.push(geometry); + pointSet.add(position.join(",")); + } + }); - const geometry = mergeBufferGeometries(geometries); - return geometry; - }, [data]); + const geometry = mergeBufferGeometries(geometries); + return geometry; + }, [data]); - return ( - 0}> - - - ); + return ( + 0}> + + + ); } diff --git a/src/LassoSelect.tsx b/src/LassoSelect.tsx index 7fb0b7c..2ad9d7a 100644 --- a/src/LassoSelect.tsx +++ b/src/LassoSelect.tsx @@ -1,275 +1,292 @@ -import React, { useEffect, ReactNode, useRef } from 'react'; -import * as THREE from 'three'; -import { useFrame, useThree } from '@react-three/fiber'; -import { PointBaseProps } from './Points'; -import { isPointInsidePolygon } from './utils/twoDimensionalUtils'; -import { TwoDimensionalPoint } from './types'; -import { isOrthographicCamera } from './utils'; +import React, { useEffect, ReactNode, useRef } from "react"; +import * as THREE from "three"; +import { useFrame, useThree } from "@react-three/fiber"; +import { PointBaseProps } from "./Points"; +import { isPointInsidePolygon } from "./utils/twoDimensionalUtils"; +import { TwoDimensionalPoint } from "./types"; +import { isOrthographicCamera } from "./utils"; type LassoSelectProps = { - /** - * The color of the lasso line - */ - lineColor?: string; - /** - * Whether or not selection is enabled - * @default true - */ - enabled?: boolean; - children?: ReactNode; - points: PointBaseProps[]; - onChange: (selected: PointBaseProps[]) => void; + /** + * The color of the lasso line + */ + lineColor?: string; + /** + * Whether or not selection is enabled + * @default true + */ + enabled?: boolean; + children?: ReactNode; + points: PointBaseProps[]; + onChange: (selected: PointBaseProps[]) => void; }; /** * State that is kept track during the lifecycle of this component being mounted */ type SelectionState = { - selectionPoints: number[]; - isDragging: boolean; - selectionShapeNeedsUpdate: boolean; - selectionNeedsUpdate: boolean; + selectionPoints: number[]; + isDragging: boolean; + selectionShapeNeedsUpdate: boolean; + selectionNeedsUpdate: boolean; }; function initializeSelectionShape() { - const selectionShape = new THREE.Line(); - selectionShape.renderOrder = 1; - selectionShape.position.z = -0.2; - // @ts-ignore - selectionShape.depthTest = false; - selectionShape.scale.setScalar(1); - return selectionShape; + const selectionShape = new THREE.Line(); + selectionShape.renderOrder = 1; + selectionShape.position.z = -0.2; + // @ts-ignore + selectionShape.depthTest = false; + selectionShape.scale.setScalar(1); + return selectionShape; } export function LassoSelect({ - children, - lineColor = '#53d7fb', - onChange, - points, - enabled, + children, + lineColor = "#53d7fb", + onChange, + points, + enabled, }: LassoSelectProps) { - const { camera, raycaster, gl, controls, size, scene } = useThree(); - const selectionShape = useRef(initializeSelectionShape()); - const selectionState = useRef({ - selectionPoints: [], - isDragging: false, - selectionNeedsUpdate: false, - selectionShapeNeedsUpdate: false, - }); - - // Initialization step for retting up the selection shape and scene - useEffect(() => { - // Set the color of the lasso - // @ts-ignore - selectionShape.current.material.color.set(lineColor).convertSRGBToLinear(); - - // Selection shape - camera.add(selectionShape.current); - - // Must add the camera to the scene itself - scene.add(camera); - }, []); - - // Adds event handlers based on props - useEffect(() => { - // handle building lasso shape - - let prevX = -Infinity; - let prevY = -Infinity; - - const tempVec0 = new THREE.Vector2(); - const tempVec1 = new THREE.Vector2(); - const tempVec2 = new THREE.Vector2(); - - function pointerDown(e: MouseEvent) { - if (enabled) { - // The dimension of the canvas - const canvasRect = gl.domElement.getClientRects()[0]; - prevX = e.clientX - canvasRect.left; - prevY = e.clientY - canvasRect.top; - selectionState.current.selectionPoints.length = 0; - selectionState.current.isDragging = true; - } - } + const { camera, raycaster, gl, controls, size, scene } = useThree(); + const selectionShape = useRef(initializeSelectionShape()); + const selectionState = useRef({ + selectionPoints: [], + isDragging: false, + selectionNeedsUpdate: false, + selectionShapeNeedsUpdate: false, + }); - /** - * Calculate the points to add to the line segment - * @src https://github.com/gkjohnson/three-mesh-bvh/blob/master/example/selection.js - */ - function pointerMove(e: MouseEvent) { - if (selectionState.current.isDragging) { - const { selectionPoints } = selectionState.current; - // The dimension of the canvas - const canvasRect = gl.domElement.getClientRects()[0]; - // Capture the click event position - - const ex = e.clientX - canvasRect.left; - const ey = e.clientY - canvasRect.top; - - const nx = (ex / canvasRect.width) * 2 - 1; - const ny = -((ey / canvasRect.height) * 2 - 1); - - // If the mouse hasn't moved a lot since the last point - if (Math.abs(ex - prevX) >= 3 || Math.abs(ey - prevY) >= 3) { - // Check if the mouse moved in roughly the same direction as the previous point - // and replace it if so. - const i = selectionPoints.length / 3 - 1; - const i3 = i * 3; - let doReplace = false; - if (selectionPoints.length > 3) { - // prev segment direction - tempVec0.set(selectionPoints[i3 - 3], selectionPoints[i3 - 3 + 1]); - tempVec1.set(selectionPoints[i3], selectionPoints[i3 + 1]); - tempVec1.sub(tempVec0).normalize(); - - // this segment direction - tempVec0.set(selectionPoints[i3], selectionPoints[i3 + 1]); - tempVec2.set(nx, ny); - tempVec2.sub(tempVec0).normalize(); - - const dot = tempVec1.dot(tempVec2); - doReplace = dot > 0.99; - } - - if (doReplace) { - selectionPoints[i3] = nx; - selectionPoints[i3 + 1] = ny; - } else { - selectionPoints.push(nx, ny, 0); - } - - selectionState.current.selectionShapeNeedsUpdate = true; - selectionShape.current.visible = true; - - prevX = ex; - prevY = ey; + // Initialization step for retting up the selection shape and scene + useEffect(() => { + // Set the color of the lasso + // @ts-ignore + selectionShape.current.material.color + .set(lineColor) + .convertSRGBToLinear(); + + // Selection shape + camera.add(selectionShape.current); + + // Must add the camera to the scene itself + scene.add(camera); + }, []); + + // Adds event handlers based on props + useEffect(() => { + // handle building lasso shape + + let prevX = -Infinity; + let prevY = -Infinity; + + const tempVec0 = new THREE.Vector2(); + const tempVec1 = new THREE.Vector2(); + const tempVec2 = new THREE.Vector2(); + + function pointerDown(e: MouseEvent) { + if (enabled) { + // The dimension of the canvas + const canvasRect = gl.domElement.getClientRects()[0]; + prevX = e.clientX - canvasRect.left; + prevY = e.clientY - canvasRect.top; + selectionState.current.selectionPoints.length = 0; + selectionState.current.isDragging = true; + } } - } - } - function pointerUp() { - if ( - enabled && - selectionState.current.isDragging && - selectionState.current.selectionPoints.length - ) { - selectionState.current.selectionShapeNeedsUpdate = true; - selectionState.current.selectionNeedsUpdate = true; - } - // Reset the state - selectionShape.current.visible = false; - selectionState.current.isDragging = false; - } + /** + * Calculate the points to add to the line segment + * @src https://github.com/gkjohnson/three-mesh-bvh/blob/master/example/selection.js + */ + function pointerMove(e: MouseEvent) { + if (selectionState.current.isDragging) { + const { selectionPoints } = selectionState.current; + // The dimension of the canvas + const canvasRect = gl.domElement.getClientRects()[0]; + // Capture the click event position + + const ex = e.clientX - canvasRect.left; + const ey = e.clientY - canvasRect.top; + + const nx = (ex / canvasRect.width) * 2 - 1; + const ny = -((ey / canvasRect.height) * 2 - 1); + + // If the mouse hasn't moved a lot since the last point + if (Math.abs(ex - prevX) >= 3 || Math.abs(ey - prevY) >= 3) { + // Check if the mouse moved in roughly the same direction as the previous point + // and replace it if so. + const i = selectionPoints.length / 3 - 1; + const i3 = i * 3; + let doReplace = false; + if (selectionPoints.length > 3) { + // prev segment direction + tempVec0.set( + selectionPoints[i3 - 3], + selectionPoints[i3 - 3 + 1], + ); + tempVec1.set( + selectionPoints[i3], + selectionPoints[i3 + 1], + ); + tempVec1.sub(tempVec0).normalize(); + + // this segment direction + tempVec0.set( + selectionPoints[i3], + selectionPoints[i3 + 1], + ); + tempVec2.set(nx, ny); + tempVec2.sub(tempVec0).normalize(); + + const dot = tempVec1.dot(tempVec2); + doReplace = dot > 0.99; + } + + if (doReplace) { + selectionPoints[i3] = nx; + selectionPoints[i3 + 1] = ny; + } else { + selectionPoints.push(nx, ny, 0); + } + + selectionState.current.selectionShapeNeedsUpdate = true; + selectionShape.current.visible = true; + + prevX = ex; + prevY = ey; + } + } + } - // Only start the lasso tool when you place the mouse down on the canvas - gl.domElement.addEventListener('pointerdown', pointerDown, { - passive: true, - }); - document.addEventListener('pointermove', pointerMove, { - passive: true, - capture: true, - }); - document.addEventListener('pointerup', pointerUp, { passive: true }); - - return () => { - gl.domElement.removeEventListener('pointerdown', pointerDown); - document.removeEventListener('pointermove', pointerMove); - document.removeEventListener('pointerup', pointerUp); - }; - }, [size, raycaster, camera, controls, gl, enabled]); - - // Animation frames to draw the selections - useFrame(({ camera }) => { - const { selectionShapeNeedsUpdate, selectionPoints } = - selectionState.current; - // Update the selection lasso lines - if (selectionShapeNeedsUpdate) { - const ogLength = selectionPoints.length; - selectionPoints.push( - selectionPoints[0], - selectionPoints[1], - selectionPoints[2] - ); - - selectionShape.current.geometry.setAttribute( - 'position', - new THREE.Float32BufferAttribute(selectionPoints, 3, false) - ); - - selectionPoints.length = ogLength; - - selectionShape.current.frustumCulled = false; - selectionState.current.selectionShapeNeedsUpdate = false; - } + function pointerUp() { + if ( + enabled && + selectionState.current.isDragging && + selectionState.current.selectionPoints.length + ) { + selectionState.current.selectionShapeNeedsUpdate = true; + selectionState.current.selectionNeedsUpdate = true; + } + // Reset the state + selectionShape.current.visible = false; + selectionState.current.isDragging = false; + } - if ( - selectionState.current.selectionNeedsUpdate && - selectionPoints.length > 0 - ) { - selectionState.current.selectionNeedsUpdate = false; - onChange( - updateSelection({ - points, - camera, - selectionPoints: selectionState.current.selectionPoints, - }) - ); - } + // Only start the lasso tool when you place the mouse down on the canvas + gl.domElement.addEventListener("pointerdown", pointerDown, { + passive: true, + }); + document.addEventListener("pointermove", pointerMove, { + passive: true, + capture: true, + }); + document.addEventListener("pointerup", pointerUp, { passive: true }); + + return () => { + gl.domElement.removeEventListener("pointerdown", pointerDown); + document.removeEventListener("pointermove", pointerMove); + document.removeEventListener("pointerup", pointerUp); + }; + }, [size, raycaster, camera, controls, gl, enabled]); + + // Animation frames to draw the selections + useFrame(({ camera }) => { + const { selectionShapeNeedsUpdate, selectionPoints } = + selectionState.current; + // Update the selection lasso lines + if (selectionShapeNeedsUpdate) { + const ogLength = selectionPoints.length; + selectionPoints.push( + selectionPoints[0], + selectionPoints[1], + selectionPoints[2], + ); + + selectionShape.current.geometry.setAttribute( + "position", + new THREE.Float32BufferAttribute(selectionPoints, 3, false), + ); + + selectionPoints.length = ogLength; + + selectionShape.current.frustumCulled = false; + selectionState.current.selectionShapeNeedsUpdate = false; + } - // Set the scale to match the camera - if (!isOrthographicCamera(camera)) { - const yScale = - Math.tan((THREE.MathUtils.DEG2RAD * camera.fov) / 2) * - selectionShape.current.position.z; - - selectionShape.current.scale.set(-yScale * camera.aspect, -yScale, 1); - } else { - // TODO - selectionShape.current.scale.set( - (camera.right - camera.left) / camera.zoom / 2, - (camera.top - camera.bottom) / camera.zoom / 2, - 1 - ); - } - }); + if ( + selectionState.current.selectionNeedsUpdate && + selectionPoints.length > 0 + ) { + selectionState.current.selectionNeedsUpdate = false; + onChange( + updateSelection({ + points, + camera, + selectionPoints: selectionState.current.selectionPoints, + }), + ); + } + + // Set the scale to match the camera + if (!isOrthographicCamera(camera)) { + const yScale = + Math.tan((THREE.MathUtils.DEG2RAD * camera.fov) / 2) * + selectionShape.current.position.z; + + selectionShape.current.scale.set( + -yScale * camera.aspect, + -yScale, + 1, + ); + } else { + // TODO + selectionShape.current.scale.set( + (camera.right - camera.left) / camera.zoom / 2, + (camera.top - camera.bottom) / camera.zoom / 2, + 1, + ); + } + }); - return <>{children}; + return <>{children}; } function updateSelection({ - points, - camera, - selectionPoints, + points, + camera, + selectionPoints, }: { - points: PointBaseProps[]; - camera: THREE.Camera; - selectionPoints: number[]; + points: PointBaseProps[]; + camera: THREE.Camera; + selectionPoints: number[]; }) { - let selection: PointBaseProps[] = []; - let lassoPolygon: TwoDimensionalPoint[] = []; - for (let i = 0; i < selectionPoints.length; i += 3) { - lassoPolygon.push([selectionPoints[i], selectionPoints[i + 1]]); - } - - // A vector to re-use in calculating it's intersection with the polygon - const pointVector = new THREE.Vector3(); - points.forEach((point) => { - const isThreeD = point.position.length === 3; - // Initialize the point vector from the point position - const pointPosition = isThreeD - ? point.position - : [point.position[0], point.position[1], 0]; - pointVector.fromArray(pointPosition); - if (!isThreeD) { - // 2D specific adjustments - // TODO this is pretty specific to orbital controls and should - // be made more generic - pointVector.sub(camera.position).applyMatrix4(camera.matrixWorld); + let selection: PointBaseProps[] = []; + let lassoPolygon: TwoDimensionalPoint[] = []; + for (let i = 0; i < selectionPoints.length; i += 3) { + lassoPolygon.push([selectionPoints[i], selectionPoints[i + 1]]); } - pointVector.project(camera); - if (isPointInsidePolygon([pointVector.x, pointVector.y], lassoPolygon)) { - selection.push(point); - } - }); - return selection; + + // A vector to re-use in calculating it's intersection with the polygon + const pointVector = new THREE.Vector3(); + points.forEach((point) => { + const isThreeD = point.position.length === 3; + // Initialize the point vector from the point position + const pointPosition = isThreeD + ? point.position + : [point.position[0], point.position[1], 0]; + pointVector.fromArray(pointPosition); + if (!isThreeD) { + // 2D specific adjustments + // TODO this is pretty specific to orbital controls and should + // be made more generic + pointVector.sub(camera.position).applyMatrix4(camera.matrixWorld); + } + pointVector.project(camera); + if ( + isPointInsidePolygon([pointVector.x, pointVector.y], lassoPolygon) + ) { + selection.push(point); + } + }); + return selection; } diff --git a/src/Points.tsx b/src/Points.tsx index 5dd1209..1978548 100644 --- a/src/Points.tsx +++ b/src/Points.tsx @@ -1,246 +1,247 @@ -import React, { useMemo, useRef, useCallback } from 'react'; -import * as THREE from 'three'; -import { useFrame } from '@react-three/fiber'; -import { PointCoordinates, ThreeDimensionalPoint } from './types'; +import React, { useMemo, useRef, useCallback } from "react"; +import * as THREE from "three"; +import { useFrame } from "@react-three/fiber"; +import { PointCoordinates, ThreeDimensionalPoint } from "./types"; -type PointShape = 'sphere' | 'cube' | 'octahedron'; +type PointShape = "sphere" | "cube" | "octahedron"; type PointMeshProps = { - /** - * The radius of the point if it is a sphere. - * @default 0.02 - */ - radius?: number; - /** - * The color of the point - */ - color: string | ((point: PointBaseProps) => string); - /** - * The color of the point - */ - scale?: number; - /** - * the dimension of a side if the radius is a sphere - * @default 0.03 - */ - size?: number; + /** + * The radius of the point if it is a sphere. + * @default 0.02 + */ + radius?: number; + /** + * The color of the point + */ + color: string | ((point: PointBaseProps) => string); + /** + * The color of the point + */ + scale?: number; + /** + * the dimension of a side if the radius is a sphere + * @default 0.03 + */ + size?: number; }; export type PointBaseProps = { - metaData: any; - position: PointCoordinates; + metaData: any; + position: PointCoordinates; }; /** * Have to provide default mesh properties, otherwise the point will not get restored after selection */ -const defaultPointMeshProps: PointMeshProps = { color: 'blue', scale: 1 }; +const defaultPointMeshProps: PointMeshProps = { color: "blue", scale: 1 }; export type PointsProps = { - data: Array; - pointProps: PointMeshProps; - /** - * Callback for when a point gets selected. Returns the selected nearest point - */ - onPointClicked?: (points: PointBaseProps) => void; - /** - * Callback for when point(s) gets selected. Returns the selected points that correspond to the ray trace hit - */ - onPointsClicked?: (points: PointBaseProps[]) => void; - /** - * Callback for when a point is hovered - */ - onPointHovered?: (points: PointBaseProps) => void; - /** - * Callback for when the mouse pointer leaves the point meshes. Best used to detect when the mouse is no longer over ANY point - */ - onPointerLeave?: () => void; - /** - * The shape of the points. This value must be uniform for all points. - * @default 'sphere' - */ - pointShape?: PointShape; - /** - * The opacity of the points - * @default 1 - */ - opacity?: number; - /** - * The material of the points - * @default 'meshMatcap' - */ - material?: 'standard' | 'meshMatcap'; + data: Array; + pointProps: PointMeshProps; + /** + * Callback for when a point gets selected. Returns the selected nearest point + */ + onPointClicked?: (points: PointBaseProps) => void; + /** + * Callback for when point(s) gets selected. Returns the selected points that correspond to the ray trace hit + */ + onPointsClicked?: (points: PointBaseProps[]) => void; + /** + * Callback for when a point is hovered + */ + onPointHovered?: (points: PointBaseProps) => void; + /** + * Callback for when the mouse pointer leaves the point meshes. Best used to detect when the mouse is no longer over ANY point + */ + onPointerLeave?: () => void; + /** + * The shape of the points. This value must be uniform for all points. + * @default 'sphere' + */ + pointShape?: PointShape; + /** + * The opacity of the points + * @default 1 + */ + opacity?: number; + /** + * The material of the points + * @default 'meshMatcap' + */ + material?: "standard" | "meshMatcap"; }; const tempObject = new THREE.Object3D(); const tempColor = new THREE.Color(); export function Points({ - data, - pointProps = defaultPointMeshProps, - onPointsClicked, - onPointClicked, - onPointHovered, - onPointerLeave, - pointShape = 'sphere', - opacity = 1, - material = 'meshMatcap', + data, + pointProps = defaultPointMeshProps, + onPointsClicked, + onPointClicked, + onPointHovered, + onPointerLeave, + pointShape = "sphere", + opacity = 1, + material = "meshMatcap", }: PointsProps) { - // Callback function to get the color of a specific point - const getColorPoint = useCallback( - (data: PointBaseProps) => { - const colorString = - typeof pointProps.color === 'function' - ? pointProps.color(data) - : pointProps.color; - return colorString; - }, - [pointProps.color] - ); - - const colorArray = useMemo( - () => - Float32Array.from( - new Array(data.length) - .fill(null) - .flatMap((_, idx) => - tempColor.set(getColorPoint(data[idx])).toArray() - ) - ), - [data] - ); - - const meshRef = useRef(null); - - useFrame(() => { - data.forEach(({ position }, id) => { - tempObject.position.set(position[0], position[1], position[2] || 0); - if (pointProps.scale) { - tempObject.scale.set( - pointProps.scale, - pointProps.scale, - pointProps.scale - ); - } - if (meshRef.current) { - meshRef.current.setMatrixAt(id, tempObject.matrix); - meshRef.current.instanceMatrix.needsUpdate = true; - - const colorString = getColorPoint(data[id]); - tempColor.set(colorString); - - // Flush the color to the color buffer at the point's index - tempColor.toArray(colorArray, id * 3); - - meshRef.current.geometry.attributes.color.needsUpdate = true; - - tempObject.updateMatrix(); - meshRef.current.setMatrixAt(id, tempObject.matrix); - } + // Callback function to get the color of a specific point + const getColorPoint = useCallback( + (data: PointBaseProps) => { + const colorString = + typeof pointProps.color === "function" + ? pointProps.color(data) + : pointProps.color; + return colorString; + }, + [pointProps.color], + ); + + const colorArray = useMemo( + () => + Float32Array.from( + new Array(data.length) + .fill(null) + .flatMap((_, idx) => + tempColor.set(getColorPoint(data[idx])).toArray(), + ), + ), + [data], + ); + + const meshRef = useRef(null); + + useFrame(() => { + data.forEach(({ position }, id) => { + tempObject.position.set(position[0], position[1], position[2] || 0); + if (pointProps.scale) { + tempObject.scale.set( + pointProps.scale, + pointProps.scale, + pointProps.scale, + ); + } + if (meshRef.current) { + meshRef.current.setMatrixAt(id, tempObject.matrix); + meshRef.current.instanceMatrix.needsUpdate = true; + + const colorString = getColorPoint(data[id]); + tempColor.set(colorString); + + // Flush the color to the color buffer at the point's index + tempColor.toArray(colorArray, id * 3); + + meshRef.current.geometry.attributes.color.needsUpdate = true; + + tempObject.updateMatrix(); + meshRef.current.setMatrixAt(id, tempObject.matrix); + } + }); }); - }); - - const geometryEl = useMemo(() => { - switch (pointShape) { - case 'sphere': { - return ( - - - - ); - } - case 'cube': { - const args: ThreeDimensionalPoint = - typeof pointProps?.size === 'number' - ? [pointProps.size, pointProps.size, pointProps.size] - : [0.03, 0.03, 0.03]; - return ( - - - - ); - } - case 'octahedron': { - return ( - - - - ); - } - default: { - throw new Error(`Unsupported point shape: ${pointShape}`); - } - } - }, [pointShape, pointProps]); - - const materialEl = useMemo(() => { - switch (material) { - case 'meshMatcap': - return ( - - ); - - default: - return ( - - ); - } - }, [material]); - - return ( - { - if (e.intersections) { - const instanceIds = e.intersections - .map((e) => e?.instanceId) - .filter((i): i is NonNullable => i != null); - - // Multi click - onPointsClicked && onPointsClicked(instanceIds.map((i) => data[i])); - - // Single click - instanceIds.length > 0 && - onPointClicked && - onPointClicked(data[instanceIds[0]]); + + const geometryEl = useMemo(() => { + switch (pointShape) { + case "sphere": { + return ( + + + + ); + } + case "cube": { + const args: ThreeDimensionalPoint = + typeof pointProps?.size === "number" + ? [pointProps.size, pointProps.size, pointProps.size] + : [0.03, 0.03, 0.03]; + return ( + + + + ); + } + case "octahedron": { + return ( + + + + ); + } + default: { + throw new Error(`Unsupported point shape: ${pointShape}`); + } } - }} - onPointerOver={(e) => { - if (e.intersections) { - const instanceIds = e.intersections - .map((e) => e?.instanceId) - .filter((i): i is NonNullable => i != null); - - // Single instance callback - instanceIds.length > 0 && - onPointHovered && - onPointHovered(data[instanceIds[0]]); + }, [pointShape, pointProps]); + + const materialEl = useMemo(() => { + switch (material) { + case "meshMatcap": + return ( + + ); + + default: + return ( + + ); } - }} - onPointerLeave={() => { - onPointerLeave && onPointerLeave(); - }} - > - {geometryEl} - {materialEl} - - ); + }, [material]); + + return ( + { + if (e.intersections) { + const instanceIds = e.intersections + .map((e) => e?.instanceId) + .filter((i): i is NonNullable => i != null); + + // Multi click + onPointsClicked && + onPointsClicked(instanceIds.map((i) => data[i])); + + // Single click + instanceIds.length > 0 && + onPointClicked && + onPointClicked(data[instanceIds[0]]); + } + }} + onPointerOver={(e) => { + if (e.intersections) { + const instanceIds = e.intersections + .map((e) => e?.instanceId) + .filter((i): i is NonNullable => i != null); + + // Single instance callback + instanceIds.length > 0 && + onPointHovered && + onPointHovered(data[instanceIds[0]]); + } + }} + onPointerLeave={() => { + onPointerLeave && onPointerLeave(); + }} + > + {geometryEl} + {materialEl} + + ); } diff --git a/src/ThreeDimensionalBounds.tsx b/src/ThreeDimensionalBounds.tsx index 7a271c1..8593ed6 100644 --- a/src/ThreeDimensionalBounds.tsx +++ b/src/ThreeDimensionalBounds.tsx @@ -1,111 +1,112 @@ -import React, { createContext, useContext, useEffect } from 'react'; -import { ThreeDimensionalBoundsType, ThreeDimensionalPoint } from './types'; +import React, { createContext, useContext, useEffect } from "react"; +import { ThreeDimensionalBoundsType, ThreeDimensionalPoint } from "./types"; import { - getCenterFromThreeDimensionalBounds, - getMaxDimensionFromThreeDimensionalBounds, - isOrthographicCamera, -} from './utils'; -import { useThree } from '@react-three/fiber'; + getCenterFromThreeDimensionalBounds, + getMaxDimensionFromThreeDimensionalBounds, + isOrthographicCamera, +} from "./utils"; +import { useThree } from "@react-three/fiber"; export type ThreeDimensionalBoundsContextType = { - bounds: ThreeDimensionalBoundsType; - center: ThreeDimensionalPoint; + bounds: ThreeDimensionalBoundsType; + center: ThreeDimensionalPoint; }; const BoundsContext = createContext({ - bounds: { minX: -10, maxX: 10, minY: -10, maxY: 10, minZ: -10, maxZ: 10 }, - center: [0, 0, 0], + bounds: { minX: -10, maxX: 10, minY: -10, maxY: 10, minZ: -10, maxZ: 10 }, + center: [0, 0, 0], }); const ORTHOGRAPHIC_CAMERA_Z_OFFSET = 10; export function useThreeDimensionalBounds() { - return useContext(BoundsContext); + return useContext(BoundsContext); } /** * Provides the bounds of the canvas. and centers all child controls */ export function ThreeDimensionalBounds({ - bounds, - children, - offset = 1.5, - boundsZoomPaddingFactor = 0.9, + bounds, + children, + offset = 1.5, + boundsZoomPaddingFactor = 0.9, }: { - children: React.ReactNode; - /** - * Bounds of the canvas. - */ - bounds: ThreeDimensionalBoundsType; - /** - * Offset from the object to make it fit the bounds. - * - * Only affects perspective cameras. - * @default 1.5 - */ - offset?: number; - /** - * The amount to reduce the zoom by to give some padding to the points (1 means no padding). - * - * Only affects orthographic cameras. - * @default 0.9 - */ - boundsZoomPaddingFactor?: number; + children: React.ReactNode; + /** + * Bounds of the canvas. + */ + bounds: ThreeDimensionalBoundsType; + /** + * Offset from the object to make it fit the bounds. + * + * Only affects perspective cameras. + * @default 1.5 + */ + offset?: number; + /** + * The amount to reduce the zoom by to give some padding to the points (1 means no padding). + * + * Only affects orthographic cameras. + * @default 0.9 + */ + boundsZoomPaddingFactor?: number; }) { - const center = getCenterFromThreeDimensionalBounds(bounds); - const { - camera, - size: { width, height }, - } = useThree(); + const center = getCenterFromThreeDimensionalBounds(bounds); + const { + camera, + size: { width, height }, + } = useThree(); - useEffect(() => { - // @src https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/2 - const { minX, maxX, minY, maxY, minZ, maxZ } = bounds; - const boundsWidth = maxX - minX; - const boundsHeight = maxY - minY; - const boundsDepth = maxZ - minZ; - const maxDim = Math.max(boundsWidth, boundsHeight, boundsDepth); - camera.position.x = boundsWidth / 2 + minX; - camera.position.y = boundsHeight / 2 + minY; - if (isOrthographicCamera(camera)) { - // Orthographic camera - // Set the zoom to fit the bounds - // @src https://github.com/pmndrs/react-three-fiber/issues/67#issuecomment-496507403 - camera.zoom = - Math.min(width / boundsWidth, height / boundsHeight) * - boundsZoomPaddingFactor; - const furthestPointDim = - getMaxDimensionFromThreeDimensionalBounds(bounds); + useEffect(() => { + // @src https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/2 + const { minX, maxX, minY, maxY, minZ, maxZ } = bounds; + const boundsWidth = maxX - minX; + const boundsHeight = maxY - minY; + const boundsDepth = maxZ - minZ; + const maxDim = Math.max(boundsWidth, boundsHeight, boundsDepth); + camera.position.x = boundsWidth / 2 + minX; + camera.position.y = boundsHeight / 2 + minY; + if (isOrthographicCamera(camera)) { + // Orthographic camera + // Set the zoom to fit the bounds + // @src https://github.com/pmndrs/react-three-fiber/issues/67#issuecomment-496507403 + camera.zoom = + Math.min(width / boundsWidth, height / boundsHeight) * + boundsZoomPaddingFactor; + const furthestPointDim = + getMaxDimensionFromThreeDimensionalBounds(bounds); - // Set the camera position to be a bit further away than the furthest coordinate value, to allow for rotation of the cloud without clipping through the near plane - // The default near value is .1, so if we move the camera back this far, we are guaranteed to be not clip the near plane - const cameraZ = Math.abs(furthestPointDim) + ORTHOGRAPHIC_CAMERA_Z_OFFSET; - camera.position.z = cameraZ; + // Set the camera position to be a bit further away than the furthest coordinate value, to allow for rotation of the cloud without clipping through the near plane + // The default near value is .1, so if we move the camera back this far, we are guaranteed to be not clip the near plane + const cameraZ = + Math.abs(furthestPointDim) + ORTHOGRAPHIC_CAMERA_Z_OFFSET; + camera.position.z = cameraZ; - // Set the far edge to be a bit further away than the furthest coordinate value + the camera's position, to allow for rotation of the cloud without clipping through the far plane - const cameraToFarEdge = Math.max( - camera.far, - cameraZ + furthestPointDim + ORTHOGRAPHIC_CAMERA_Z_OFFSET - ); - camera.far = cameraToFarEdge; - } else { - // Perspective camera - const fov = camera.fov * (Math.PI / 180); - const cameraZ = maxDim / (2 * Math.tan(fov / 2)); - camera.position.z = (cameraZ + center[2]) * offset; + // Set the far edge to be a bit further away than the furthest coordinate value + the camera's position, to allow for rotation of the cloud without clipping through the far plane + const cameraToFarEdge = Math.max( + camera.far, + cameraZ + furthestPointDim + ORTHOGRAPHIC_CAMERA_Z_OFFSET, + ); + camera.far = cameraToFarEdge; + } else { + // Perspective camera + const fov = camera.fov * (Math.PI / 180); + const cameraZ = maxDim / (2 * Math.tan(fov / 2)); + camera.position.z = (cameraZ + center[2]) * offset; - const cameraToFarEdge = - minZ < 0 ? -minZ + camera.position.z : camera.position.z - minZ; - camera.far = cameraToFarEdge * 3; - } + const cameraToFarEdge = + minZ < 0 ? -minZ + camera.position.z : camera.position.z - minZ; + camera.far = cameraToFarEdge * 3; + } - camera.updateProjectionMatrix(); - camera.lookAt(...center); - }, [bounds]); + camera.updateProjectionMatrix(); + camera.lookAt(...center); + }, [bounds]); - return ( - - {children} - - ); + return ( + + {children} + + ); } diff --git a/src/ThreeDimensionalCanvas.tsx b/src/ThreeDimensionalCanvas.tsx index f6639f2..b003f2e 100644 --- a/src/ThreeDimensionalCanvas.tsx +++ b/src/ThreeDimensionalCanvas.tsx @@ -1,48 +1,48 @@ -import React from 'react'; -import { Canvas } from '@react-three/fiber'; -import { CameraInitProps } from './types'; +import React from "react"; +import { Canvas } from "@react-three/fiber"; +import { CameraInitProps } from "./types"; /** * Pass through some props directly to the canvas * Expose onPointerMissed to work with selection */ type CanvasPassthroughProps = Pick< - React.ComponentProps, - 'onPointerMissed' + React.ComponentProps, + "onPointerMissed" >; export type ThreeDimensionalCanvasProps = CanvasPassthroughProps & { - children?: React.ReactNode; - /** - * Whether or not to use an orthographic camera or not - * @default false - */ - orthographic?: boolean; - /** - * The camera's initial props. overrides the defaults - * @default { position: [0, 0, 1], zoom: 1, up: [0, 1, 0] } - */ - camera?: CameraInitProps; + children?: React.ReactNode; + /** + * Whether or not to use an orthographic camera or not + * @default false + */ + orthographic?: boolean; + /** + * The camera's initial props. overrides the defaults + * @default { position: [0, 0, 1], zoom: 1, up: [0, 1, 0] } + */ + camera?: CameraInitProps; }; export function ThreeDimensionalCanvas({ - children, - camera, - orthographic = false, - ...passThroughProps + children, + camera, + orthographic = false, + ...passThroughProps }: ThreeDimensionalCanvasProps) { - return ( - - {children} - - ); + return ( + + {children} + + ); } diff --git a/src/ThreeDimensionalControls.tsx b/src/ThreeDimensionalControls.tsx index 3924411..2c9b0f3 100644 --- a/src/ThreeDimensionalControls.tsx +++ b/src/ThreeDimensionalControls.tsx @@ -1,6 +1,6 @@ -import React from 'react'; -import { OrbitControls } from '@react-three/drei'; -import { ControlProps } from './types'; +import React from "react"; +import { OrbitControls } from "@react-three/drei"; +import { ControlProps } from "./types"; export type ThreeDimensionalControlsProps = ControlProps; @@ -8,26 +8,26 @@ export type ThreeDimensionalControlsProps = ControlProps; * A simplified version of OrbitControls */ export function ThreeDimensionalControls({ - enabled = true, - zoomSpeed = 1, - enableZoom = true, - enablePan = true, - enableRotate = true, - autoRotate = false, - autoRotateSpeed = 5, - ...passThroughProps + enabled = true, + zoomSpeed = 1, + enableZoom = true, + enablePan = true, + enableRotate = true, + autoRotate = false, + autoRotateSpeed = 5, + ...passThroughProps }: ThreeDimensionalControlsProps) { - /* disable rotation so that it doesn't clash with selection */ - return ( - - ); + /* disable rotation so that it doesn't clash with selection */ + return ( + + ); } diff --git a/src/TwoDimensionalBounds.tsx b/src/TwoDimensionalBounds.tsx index 65b6e26..86c5fa2 100644 --- a/src/TwoDimensionalBounds.tsx +++ b/src/TwoDimensionalBounds.tsx @@ -1,7 +1,7 @@ -import React, { createContext, useContext, useEffect } from 'react'; -import { TwoDimensionalBoundsType, TwoDimensionalPoint } from './types'; -import { getCenterFromTwoDimensionalBounds } from './utils'; -import { useThree } from '@react-three/fiber'; +import React, { createContext, useContext, useEffect } from "react"; +import { TwoDimensionalBoundsType, TwoDimensionalPoint } from "./types"; +import { getCenterFromTwoDimensionalBounds } from "./utils"; +import { useThree } from "@react-three/fiber"; /** * The amount to reduce the zoom by to fit the content when bounds are provided. @@ -9,62 +9,62 @@ import { useThree } from '@react-three/fiber'; const DEFAULT_BOUNDS_ZOOM_PADDING_FACTOR = 0.9; export type TwoDimensionalBoundsContextType = { - bounds: TwoDimensionalBoundsType; - center: TwoDimensionalPoint; + bounds: TwoDimensionalBoundsType; + center: TwoDimensionalPoint; }; const BoundsContext = createContext({ - bounds: { minX: -10, maxX: 10, minY: -10, maxY: 10 }, - center: [0, 0], + bounds: { minX: -10, maxX: 10, minY: -10, maxY: 10 }, + center: [0, 0], }); export function useTwoDimensionalBounds() { - return useContext(BoundsContext); + return useContext(BoundsContext); } /** * Provides the bounds of the canvas. and centers all child controls */ export function TwoDimensionalBounds({ - bounds, - children, - boundsZoomPaddingFactor = DEFAULT_BOUNDS_ZOOM_PADDING_FACTOR, + bounds, + children, + boundsZoomPaddingFactor = DEFAULT_BOUNDS_ZOOM_PADDING_FACTOR, }: { - children: React.ReactNode; - /** - * Bounds of the canvas. - */ - bounds: TwoDimensionalBoundsType; - /** - * The amount to reduce the zoom by to give some padding to the points (1 means no padding). - * @default 0.9 - */ - boundsZoomPaddingFactor?: number; + children: React.ReactNode; + /** + * Bounds of the canvas. + */ + bounds: TwoDimensionalBoundsType; + /** + * The amount to reduce the zoom by to give some padding to the points (1 means no padding). + * @default 0.9 + */ + boundsZoomPaddingFactor?: number; }) { - const center = getCenterFromTwoDimensionalBounds(bounds); - const { - camera, - size: { width, height }, - } = useThree(); + const center = getCenterFromTwoDimensionalBounds(bounds); + const { + camera, + size: { width, height }, + } = useThree(); - useEffect(() => { - const { minX, maxX, minY, maxY } = bounds; - const boundsWidth = maxX - minX; - const boundsHeight = maxY - minY; - camera.translateX(boundsWidth / 2 + minX); - camera.translateY(boundsHeight / 2 + minY); + useEffect(() => { + const { minX, maxX, minY, maxY } = bounds; + const boundsWidth = maxX - minX; + const boundsHeight = maxY - minY; + camera.translateX(boundsWidth / 2 + minX); + camera.translateY(boundsHeight / 2 + minY); - // Set the zoom to fit the bounds - // @src https://github.com/pmndrs/react-three-fiber/issues/67#issuecomment-496507403 - camera.zoom = - Math.min(width / boundsWidth, height / boundsHeight) * - boundsZoomPaddingFactor; - camera.updateProjectionMatrix(); - }, [bounds]); + // Set the zoom to fit the bounds + // @src https://github.com/pmndrs/react-three-fiber/issues/67#issuecomment-496507403 + camera.zoom = + Math.min(width / boundsWidth, height / boundsHeight) * + boundsZoomPaddingFactor; + camera.updateProjectionMatrix(); + }, [bounds]); - return ( - - {children} - - ); + return ( + + {children} + + ); } diff --git a/src/TwoDimensionalCanvas.tsx b/src/TwoDimensionalCanvas.tsx index 19f297b..cbc676a 100644 --- a/src/TwoDimensionalCanvas.tsx +++ b/src/TwoDimensionalCanvas.tsx @@ -1,31 +1,31 @@ -import React from 'react'; -import { Canvas } from '@react-three/fiber'; -import { CameraInitProps } from './types'; +import React from "react"; +import { Canvas } from "@react-three/fiber"; +import { CameraInitProps } from "./types"; export type TwoDimensionalCanvasProps = { - children?: React.ReactNode; - /** - * The camera's initial props. overrides the defaults - * @default { position: [0, 0, 1], zoom: 1, up: [0, 1, 0] } - */ - camera?: CameraInitProps; + children?: React.ReactNode; + /** + * The camera's initial props. overrides the defaults + * @default { position: [0, 0, 1], zoom: 1, up: [0, 1, 0] } + */ + camera?: CameraInitProps; }; export function TwoDimensionalCanvas({ - children, - camera, + children, + camera, }: TwoDimensionalCanvasProps) { - return ( - - {children} - - ); + return ( + + {children} + + ); } diff --git a/src/TwoDimensionalControls.tsx b/src/TwoDimensionalControls.tsx index 5d6c63e..e9c568e 100644 --- a/src/TwoDimensionalControls.tsx +++ b/src/TwoDimensionalControls.tsx @@ -1,33 +1,33 @@ -import React from 'react'; -import { MapControls } from '@react-three/drei'; -import { useTwoDimensionalBounds } from './TwoDimensionalBounds'; -import { ControlProps, ThreeDimensionalPoint } from './types'; +import React from "react"; +import { MapControls } from "@react-three/drei"; +import { useTwoDimensionalBounds } from "./TwoDimensionalBounds"; +import { ControlProps, ThreeDimensionalPoint } from "./types"; -export type TwoDimensionalControlsProps = Omit; +export type TwoDimensionalControlsProps = Omit; export function TwoDimensionalControls({ - enabled = true, - zoomSpeed = 1.5, - enableZoom = true, - panSpeed = 2, - enablePan = true, - ...passThroughProps + enabled = true, + zoomSpeed = 1.5, + enableZoom = true, + panSpeed = 2, + enablePan = true, + ...passThroughProps }: TwoDimensionalControlsProps) { - const { center } = useTwoDimensionalBounds(); - const target = [...center, 0] as ThreeDimensionalPoint; + const { center } = useTwoDimensionalBounds(); + const target = [...center, 0] as ThreeDimensionalPoint; - /* disable rotation so that it doesn't clash with selection */ - return ( - - ); + /* disable rotation so that it doesn't clash with selection */ + return ( + + ); } diff --git a/src/colors.ts b/src/colors.ts index 12fb45b..2f22085 100644 --- a/src/colors.ts +++ b/src/colors.ts @@ -2,70 +2,70 @@ * D3 Category 10 colors */ const Category10 = { - blue: '#1f77b4', - orange: '#ff7f0e', - green: '#2ca02c', - red: '#d62728', - purple: '#9467bd', - brown: '#8c564b', - magenta: '#e377c2', - gray: '#7f7f7f', - lightGreen: '#bcbd22', - turquoise: '#17becf', + blue: "#1f77b4", + orange: "#ff7f0e", + green: "#2ca02c", + red: "#d62728", + purple: "#9467bd", + brown: "#8c564b", + magenta: "#e377c2", + gray: "#7f7f7f", + lightGreen: "#bcbd22", + turquoise: "#17becf", }; /** * D3 scale chromatic Rainbow split into 10 + white */ const Rainbow11: Record = { - Purple: '#6e40aa', - LightPurple: '#bf3caf', - Pink: '#fe4b83', - Orange: '#ff7847', - LightOrange: '#e2b72f', - Lime: '#aff05b', - LightGreen: '#52f667', - Green: '#1ddfa3', - LightBlue: '#23abd8', - Blue: '#4c6edb', - White: '#ffffff', + Purple: "#6e40aa", + LightPurple: "#bf3caf", + Pink: "#fe4b83", + Orange: "#ff7847", + LightOrange: "#e2b72f", + Lime: "#aff05b", + LightGreen: "#52f667", + Green: "#1ddfa3", + LightBlue: "#23abd8", + Blue: "#4c6edb", + White: "#ffffff", }; type Discrete2ColorSchemes = - | 'PinkLightGreen' - | 'BlueOrange' - | 'LightBlueOrange' - | 'LightBlueLightOrange' - | 'LimePurple' - | 'LimeLightPurple' - | 'BlueLime' - | 'LightBlueLime' - | 'WhiteLime' - | 'WhiteLightBlue' - | 'WhiteOrange'; + | "PinkLightGreen" + | "BlueOrange" + | "LightBlueOrange" + | "LightBlueLightOrange" + | "LimePurple" + | "LimeLightPurple" + | "BlueLime" + | "LightBlueLime" + | "WhiteLime" + | "WhiteLightBlue" + | "WhiteOrange"; /** * Colors that should be used to make 2 records discrete */ const Discrete2: Record = { - PinkLightGreen: [Rainbow11.Pink, Rainbow11.LightGreen], - BlueOrange: [Rainbow11.Blue, Rainbow11.Orange], - LightBlueOrange: [Rainbow11.LightBlue, Rainbow11.Orange], - LightBlueLightOrange: [Rainbow11.LightBlue, Rainbow11.LightOrange], - LimePurple: [Rainbow11.Lime, Rainbow11.Purple], - LimeLightPurple: [Rainbow11.Lime, Rainbow11.LightPurple], - BlueLime: [Rainbow11.Blue, Rainbow11.Lime], - LightBlueLime: [Rainbow11.LightBlue, Rainbow11.Lime], - WhiteLime: [Rainbow11.White, Rainbow11.Lime], - WhiteLightBlue: [Rainbow11.White, Rainbow11.LightBlue], - WhiteOrange: [Rainbow11.White, Rainbow11.Orange], + PinkLightGreen: [Rainbow11.Pink, Rainbow11.LightGreen], + BlueOrange: [Rainbow11.Blue, Rainbow11.Orange], + LightBlueOrange: [Rainbow11.LightBlue, Rainbow11.Orange], + LightBlueLightOrange: [Rainbow11.LightBlue, Rainbow11.LightOrange], + LimePurple: [Rainbow11.Lime, Rainbow11.Purple], + LimeLightPurple: [Rainbow11.Lime, Rainbow11.LightPurple], + BlueLime: [Rainbow11.Blue, Rainbow11.Lime], + LightBlueLime: [Rainbow11.LightBlue, Rainbow11.Lime], + WhiteLime: [Rainbow11.White, Rainbow11.Lime], + WhiteLightBlue: [Rainbow11.White, Rainbow11.LightBlue], + WhiteOrange: [Rainbow11.White, Rainbow11.Orange], }; export const ColorPallettes = { - Category10, - Rainbow11, + Category10, + Rainbow11, }; export const ColorSchemes = { - Discrete2, + Discrete2, }; diff --git a/src/index.tsx b/src/index.tsx index 239a326..36ee0e7 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,13 +1,13 @@ -export * from './TwoDimensionalCanvas'; -export * from './TwoDimensionalControls'; -export * from './TwoDimensionalBounds'; -export * from './ThreeDimensionalCanvas'; -export * from './ThreeDimensionalControls'; -export * from './ThreeDimensionalBounds'; -export * from './Axes'; -export * from './Points'; -export * from './Cluster'; -export * from './LassoSelect'; -export * from './colors'; -export * from './utils'; -export * from './types'; +export * from "./TwoDimensionalCanvas"; +export * from "./TwoDimensionalControls"; +export * from "./TwoDimensionalBounds"; +export * from "./ThreeDimensionalCanvas"; +export * from "./ThreeDimensionalControls"; +export * from "./ThreeDimensionalBounds"; +export * from "./Axes"; +export * from "./Points"; +export * from "./Cluster"; +export * from "./LassoSelect"; +export * from "./colors"; +export * from "./utils"; +export * from "./types"; diff --git a/src/types.ts b/src/types.ts index a22f737..13f7b49 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,11 +1,11 @@ -import { OrbitControlsProps } from '@react-three/drei'; +import { OrbitControlsProps } from "@react-three/drei"; export type TwoDimensionalPoint = [number, number]; export type TwoDimensionalBoundsType = { - minX: number; - minY: number; - maxX: number; - maxY: number; + minX: number; + minY: number; + maxX: number; + maxY: number; }; export type ThreeDimensionalPoint = [number, number, number]; @@ -16,78 +16,78 @@ export type ThreeDimensionalPoint = [number, number, number]; export type PointCoordinates = TwoDimensionalPoint | ThreeDimensionalPoint; export type ThreeDimensionalBoundsType = { - minX: number; - minY: number; - minZ: number; - maxX: number; - maxY: number; - maxZ: number; + minX: number; + minY: number; + minZ: number; + maxX: number; + maxY: number; + maxZ: number; }; /** * Customizable for the camera on initialization */ export type CameraInitProps = { - position?: ThreeDimensionalPoint; - zoom?: number; - up?: ThreeDimensionalPoint; + position?: ThreeDimensionalPoint; + zoom?: number; + up?: ThreeDimensionalPoint; }; /** * Pass through some props directly to the controls */ type ControlPassthroughProps = Pick< - OrbitControlsProps, - 'onStart' | 'onEnd' | 'domElement' + OrbitControlsProps, + "onStart" | "onEnd" | "domElement" > & { - /** - * A normalized event handler across all controls - */ - onChange?: (e?: THREE.Event) => void; + /** + * A normalized event handler across all controls + */ + onChange?: (e?: THREE.Event) => void; }; /** * Control props */ export type ControlProps = ControlPassthroughProps & { - /** - * A way to disable the controls dynamically. - * @default true - */ - enabled?: boolean; - /** - * The speed at which to zoom / pan - * @default 2 - */ - zoomSpeed?: number; - /** - * The speed at which to zoom / pan - * @default 2 - */ - panSpeed?: number; - /** - * control the zoom - * @default true - */ - enableZoom?: boolean; - /** - * control the pan - * @default true - */ - enablePan?: boolean; - /** - * control the rotation - * @default true - */ - enableRotate?: boolean; - /** - * Start rotating when the control mounts - * @default false - */ - autoRotate?: boolean; - /** - * auto-rotation speed - * @default 3 - */ - autoRotateSpeed?: number; + /** + * A way to disable the controls dynamically. + * @default true + */ + enabled?: boolean; + /** + * The speed at which to zoom / pan + * @default 2 + */ + zoomSpeed?: number; + /** + * The speed at which to zoom / pan + * @default 2 + */ + panSpeed?: number; + /** + * control the zoom + * @default true + */ + enableZoom?: boolean; + /** + * control the pan + * @default true + */ + enablePan?: boolean; + /** + * control the rotation + * @default true + */ + enableRotate?: boolean; + /** + * Start rotating when the control mounts + * @default false + */ + autoRotate?: boolean; + /** + * auto-rotation speed + * @default 3 + */ + autoRotateSpeed?: number; }; diff --git a/src/utils/cameraUtils.ts b/src/utils/cameraUtils.ts index d855d2a..9e00cd5 100644 --- a/src/utils/cameraUtils.ts +++ b/src/utils/cameraUtils.ts @@ -1,5 +1,5 @@ export function isOrthographicCamera( - c: THREE.Camera + c: THREE.Camera, ): c is THREE.OrthographicCamera { - return (c as THREE.OrthographicCamera).isOrthographicCamera; + return (c as THREE.OrthographicCamera).isOrthographicCamera; } diff --git a/src/utils/index.ts b/src/utils/index.ts index 776024d..e9abe08 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,3 +1,3 @@ -export * from './twoDimensionalUtils'; -export * from './threeDimensionalUtils'; -export * from './cameraUtils'; +export * from "./twoDimensionalUtils"; +export * from "./threeDimensionalUtils"; +export * from "./cameraUtils"; diff --git a/src/utils/threeDimensionalUtils.ts b/src/utils/threeDimensionalUtils.ts index 204fd7b..4b9a65c 100644 --- a/src/utils/threeDimensionalUtils.ts +++ b/src/utils/threeDimensionalUtils.ts @@ -1,92 +1,93 @@ -import { ThreeDimensionalPoint, ThreeDimensionalBoundsType } from '../types'; +import { ThreeDimensionalPoint, ThreeDimensionalBoundsType } from "../types"; type GetThreeDimensionalBoundsOptions = { - fallbackBounds: ThreeDimensionalBoundsType; + fallbackBounds: ThreeDimensionalBoundsType; }; const DEFAULT_FALLBACK_BOUNDS: ThreeDimensionalBoundsType = { - minX: 0, - maxX: 0, - minY: 0, - maxY: 0, - minZ: 0, - maxZ: 0, + minX: 0, + maxX: 0, + minY: 0, + maxY: 0, + minZ: 0, + maxZ: 0, }; /** * A function that computes the bounds */ export function getThreeDimensionalBounds( - points: ThreeDimensionalPoint[], - options?: GetThreeDimensionalBoundsOptions + points: ThreeDimensionalPoint[], + options?: GetThreeDimensionalBoundsOptions, ): ThreeDimensionalBoundsType { - // Handle the case where there are no points - if (points.length === 0) { - const fallbackBounds = options?.fallbackBounds || DEFAULT_FALLBACK_BOUNDS; - return fallbackBounds; - } - // The extent of the points - let minX = Infinity, - minY = Infinity, - maxX = -Infinity, - maxY = -Infinity, - minZ = Infinity, - maxZ = -Infinity; + // Handle the case where there are no points + if (points.length === 0) { + const fallbackBounds = + options?.fallbackBounds || DEFAULT_FALLBACK_BOUNDS; + return fallbackBounds; + } + // The extent of the points + let minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity, + minZ = Infinity, + maxZ = -Infinity; - points.forEach((p) => { - minX = Math.min(minX, p[0]); - minY = Math.min(minY, p[1]); - minZ = Math.min(minZ, p[2]); - maxX = Math.max(maxX, p[0]); - maxY = Math.max(maxY, p[1]); - maxZ = Math.max(maxZ, p[2]); - }); + points.forEach((p) => { + minX = Math.min(minX, p[0]); + minY = Math.min(minY, p[1]); + minZ = Math.min(minZ, p[2]); + maxX = Math.max(maxX, p[0]); + maxY = Math.max(maxY, p[1]); + maxZ = Math.max(maxZ, p[2]); + }); - return { - minX, - maxX, - minY, - maxY, - minZ, - maxZ, - }; + return { + minX, + maxX, + minY, + maxY, + minZ, + maxZ, + }; } /** * computes the center of the bounds */ export function getCenterFromThreeDimensionalBounds({ - minX, - maxX, - minY, - maxY, - minZ, - maxZ, + minX, + maxX, + minY, + maxY, + minZ, + maxZ, }: ThreeDimensionalBoundsType): ThreeDimensionalPoint { - return [ - minX + (maxX - minX) / 2, - minY + (maxY - minY) / 2, - minZ + (maxZ - minZ) / 2, - ]; + return [ + minX + (maxX - minX) / 2, + minY + (maxY - minY) / 2, + minZ + (maxZ - minZ) / 2, + ]; } /** * Gets the absolute value of the largest */ export function getMaxDimensionFromThreeDimensionalBounds({ - minX, - maxX, - minY, - maxY, - minZ, - maxZ, + minX, + maxX, + minY, + maxY, + minZ, + maxZ, }: ThreeDimensionalBoundsType): number { - return Math.max( - Math.abs(minX), - Math.abs(maxX), - Math.abs(minY), - Math.abs(maxY), - Math.abs(minZ), - Math.abs(maxZ) - ); + return Math.max( + Math.abs(minX), + Math.abs(maxX), + Math.abs(minY), + Math.abs(maxY), + Math.abs(minZ), + Math.abs(maxZ), + ); } diff --git a/src/utils/twoDimensionalUtils.ts b/src/utils/twoDimensionalUtils.ts index ae34e65..1738cd5 100644 --- a/src/utils/twoDimensionalUtils.ts +++ b/src/utils/twoDimensionalUtils.ts @@ -1,59 +1,60 @@ -import { TwoDimensionalPoint, TwoDimensionalBoundsType } from '../types'; +import { TwoDimensionalPoint, TwoDimensionalBoundsType } from "../types"; type GetTwoDimensionalBoundsOptions = { - fallbackBounds: TwoDimensionalBoundsType; + fallbackBounds: TwoDimensionalBoundsType; }; const DEFAULT_FALLBACK_BOUNDS: TwoDimensionalBoundsType = { - minX: 0, - maxX: 0, - minY: 0, - maxY: 0, + minX: 0, + maxX: 0, + minY: 0, + maxY: 0, }; /** * A function that computes the bounds */ export function getTwoDimensionalBounds( - points: TwoDimensionalPoint[], - options?: GetTwoDimensionalBoundsOptions + points: TwoDimensionalPoint[], + options?: GetTwoDimensionalBoundsOptions, ): TwoDimensionalBoundsType { - // Handle the case where there are no points - if (points.length === 0) { - const fallbackBounds = options?.fallbackBounds || DEFAULT_FALLBACK_BOUNDS; - return fallbackBounds; - } - // The extent of the points - let minX = Infinity, - minY = Infinity, - maxX = -Infinity, - maxY = -Infinity; + // Handle the case where there are no points + if (points.length === 0) { + const fallbackBounds = + options?.fallbackBounds || DEFAULT_FALLBACK_BOUNDS; + return fallbackBounds; + } + // The extent of the points + let minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; - points.forEach((p) => { - minX = Math.min(minX, p[0]); - minY = Math.min(minY, p[1]); - maxX = Math.max(maxX, p[0]); - maxY = Math.max(maxY, p[1]); - }); + points.forEach((p) => { + minX = Math.min(minX, p[0]); + minY = Math.min(minY, p[1]); + maxX = Math.max(maxX, p[0]); + maxY = Math.max(maxY, p[1]); + }); - return { - minX, - maxX, - minY, - maxY, - }; + return { + minX, + maxX, + minY, + maxY, + }; } /** * computes the center of the bounds */ export function getCenterFromTwoDimensionalBounds({ - minX, - maxX, - minY, - maxY, + minX, + maxX, + minY, + maxY, }: TwoDimensionalBoundsType): TwoDimensionalPoint { - return [minX + (maxX - minX) / 2, minY + (maxY - minY) / 2]; + return [minX + (maxX - minX) / 2, minY + (maxY - minY) / 2]; } /** @@ -64,27 +65,27 @@ export function getCenterFromTwoDimensionalBounds({ * @returns {boolean} */ export function isPointInsidePolygon( - point: TwoDimensionalPoint, - polygonPoints: TwoDimensionalPoint[] + point: TwoDimensionalPoint, + polygonPoints: TwoDimensionalPoint[], ) { - var x = point[0], - y = point[1]; + var x = point[0], + y = point[1]; - let inside = false; - for ( - let i = 0, j = polygonPoints.length - 1; - i < polygonPoints.length; - j = i++ - ) { - const xi = polygonPoints[i][0], - yi = polygonPoints[i][1]; - const xj = polygonPoints[j][0], - yj = polygonPoints[j][1]; + let inside = false; + for ( + let i = 0, j = polygonPoints.length - 1; + i < polygonPoints.length; + j = i++ + ) { + const xi = polygonPoints[i][0], + yi = polygonPoints[i][1]; + const xj = polygonPoints[j][0], + yj = polygonPoints[j][1]; - const intersect = - yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; - if (intersect) inside = !inside; - } + const intersect = + yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; + if (intersect) inside = !inside; + } - return inside; + return inside; } diff --git a/yarn.lock b/yarn.lock index 03b27fe..c6da727 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1365,11 +1365,67 @@ 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", "@eslint-community/eslint-utils@^4.4.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: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.10.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== + +"@eslint/eslintrc@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.2.tgz#36180f8e85bf34d2fe3ccc2261e8e204a411ab4e" + integrity sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.1.1.tgz#eb0f82461d12779bbafc1b5045cde3143d350a8a" + integrity sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ== + "@fal-works/esbuild-plugin-global-externals@^2.1.2": version "2.1.2" resolved "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz" integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@humanwhocodes/retry@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.2.3.tgz#c9aa036d1afa643f1250e83150f39efb3a15a631" + integrity sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g== + "@hypnosphi/create-react-context@^0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz" @@ -1663,7 +1719,7 @@ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -3003,6 +3059,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.15": + 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.npmjs.org/@types/json5/-/json5-0.0.29.tgz" @@ -3138,7 +3199,7 @@ resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/semver@^7.3.4": +"@types/semver@^7.3.4", "@types/semver@^7.5.8": version "7.5.8" resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== @@ -3223,6 +3284,23 @@ regexpp "^3.0.0" tsutils "^3.17.1" +"@typescript-eslint/eslint-plugin@^7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz#50a9044e3e5fe76b22caf64fb7fc1f97614bdbfd" + integrity sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.7.1" + "@typescript-eslint/type-utils" "7.7.1" + "@typescript-eslint/utils" "7.7.1" + "@typescript-eslint/visitor-keys" "7.7.1" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + semver "^7.6.0" + ts-api-utils "^1.3.0" + "@typescript-eslint/experimental-utils@2.34.0": version "2.34.0" resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz" @@ -3243,6 +3321,40 @@ "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/parser@^7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.7.1.tgz#f940e9f291cdca40c46cb75916217d3a42d6ceea" + integrity sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw== + dependencies: + "@typescript-eslint/scope-manager" "7.7.1" + "@typescript-eslint/types" "7.7.1" + "@typescript-eslint/typescript-estree" "7.7.1" + "@typescript-eslint/visitor-keys" "7.7.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz#07fe59686ca843f66e3e2b5c151522bc38effab2" + integrity sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA== + dependencies: + "@typescript-eslint/types" "7.7.1" + "@typescript-eslint/visitor-keys" "7.7.1" + +"@typescript-eslint/type-utils@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz#2f8094edca3bebdaad009008929df645ed9c8743" + integrity sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q== + dependencies: + "@typescript-eslint/typescript-estree" "7.7.1" + "@typescript-eslint/utils" "7.7.1" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.7.1.tgz#f903a651fb004c75add08e4e9e207f169d4b98d7" + integrity sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w== + "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz" @@ -3256,6 +3368,41 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz#5cafde48fe390fe1c1b329b2ce0ba8a73c1e87b2" + integrity sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ== + dependencies: + "@typescript-eslint/types" "7.7.1" + "@typescript-eslint/visitor-keys" "7.7.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.7.1.tgz#5d161f2b4a55e1bc38b634bebb921e4bd4e4a16e" + integrity sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.15" + "@types/semver" "^7.5.8" + "@typescript-eslint/scope-manager" "7.7.1" + "@typescript-eslint/types" "7.7.1" + "@typescript-eslint/typescript-estree" "7.7.1" + semver "^7.6.0" + +"@typescript-eslint/visitor-keys@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz#da2294796220bb0f3b4add5ecbb1b9c3f4f65798" + integrity sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw== + dependencies: + "@typescript-eslint/types" "7.7.1" + eslint-visitor-keys "^3.4.3" + "@ungap/structured-clone@^1.0.0": version "1.2.0" resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" @@ -3453,7 +3600,7 @@ acorn-import-assertions@^1.9.0: resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -3624,6 +3771,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "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@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" @@ -3647,6 +3799,14 @@ arr-union@^3.1.0: resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +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-equal@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz" @@ -3668,6 +3828,18 @@ array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" +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-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" @@ -3678,6 +3850,30 @@ array-unique@^0.3.2: resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +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.5: version "1.3.0" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" @@ -3688,6 +3884,16 @@ array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" +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.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.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz" @@ -3698,6 +3904,51 @@ array.prototype.flatmap@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" +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.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" + asap@~2.0.3: version "2.0.6" resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" @@ -4202,7 +4453,7 @@ 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, call-bind@^1.0.5, call-bind@^1.0.7: +call-bind@^1.0.0, 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.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -4715,7 +4966,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4832,6 +5083,33 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.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" + debounce@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" @@ -4844,7 +5122,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: +debug@4, debug@^4.0.1, 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.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4885,7 +5163,7 @@ deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -4929,7 +5207,7 @@ define-lazy-prop@^2.0.0: resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -5294,6 +5572,58 @@ es-abstract@^1.19.1, es-abstract@^1.19.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +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, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + 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.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" + 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.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.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.8" + 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.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" @@ -5301,16 +5631,52 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.3.0: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-iterator-helpers@^1.0.17: + version "1.0.19" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + 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-module-lexer@^1.2.1, es-module-lexer@^1.4.1: version "1.5.2" resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz" integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA== +es-object-atoms@^1.0.0: + version "1.0.0" + 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: version "1.0.0" resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" @@ -5318,6 +5684,13 @@ es-shim-unscopables@^1.0.0: dependencies: has "^1.0.3" +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: + hasown "^2.0.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" @@ -5514,6 +5887,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^1.11.1: version "1.14.3" resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" @@ -5544,6 +5922,11 @@ eslint-config-prettier@^6.0.0: dependencies: get-stdin "^6.0.0" +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + eslint-config-react-app@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz" @@ -5559,6 +5942,15 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" +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" + is-core-module "^2.13.0" + resolve "^1.22.4" + eslint-module-utils@^2.7.3: version "2.7.3" resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz" @@ -5567,6 +5959,13 @@ eslint-module-utils@^2.7.3: debug "^3.2.7" find-up "^2.1.0" +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" + eslint-plugin-flowtype@^3.13.0: version "3.13.0" resolved "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz" @@ -5593,6 +5992,29 @@ eslint-plugin-import@^2.18.2: resolve "^1.22.0" tsconfig-paths "^3.14.1" +eslint-plugin-import@^2.29.1: + 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.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.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.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-jsx-a11y@^6.2.3: version "6.5.1" resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz" @@ -5623,6 +6045,11 @@ eslint-plugin-react-hooks@^2.2.0: resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz" integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== +eslint-plugin-react-hooks@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + eslint-plugin-react@^7.14.3: version "7.29.4" resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz" @@ -5643,6 +6070,42 @@ eslint-plugin-react@^7.14.3: semver "^6.3.0" string.prototype.matchall "^4.0.6" +eslint-plugin-react@^7.34.1: + 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.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.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" + +eslint-plugin-unused-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz#db015b569d3774e17a482388c95c17bd303bc602" + integrity sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + eslint-scope@5.1.1, eslint-scope@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" @@ -5651,6 +6114,14 @@ eslint-scope@5.1.1, eslint-scope@^5.0.0: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc" + integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz" @@ -5670,6 +6141,16 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^3.3.0, 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-visitor-keys@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" + integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== + eslint@^6.1.0: version "6.8.0" resolved "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz" @@ -5713,6 +6194,55 @@ eslint@^6.1.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.1.1.tgz#39ec657ccd12813cb4a1dab2f9229dcc6e468271" + integrity sha512-b4cRQ0BeZcSEzPpY2PjFY70VbO32K7BStTGtBsnIGdTSEEQzBi8hPBcGQmTG2zUvFr9uLe0TK42bw8YszuHEqg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^3.0.2" + "@eslint/js" "9.1.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.2.3" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.0.1" + eslint-visitor-keys "^4.0.0" + espree "^10.0.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + 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.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f" + integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww== + dependencies: + acorn "^8.11.3" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.0.0" + espree@^6.1.2: version "6.2.1" resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz" @@ -5734,6 +6264,13 @@ esquery@^1.0.1: dependencies: estraverse "^5.1.0" +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" + esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" @@ -6011,7 +6548,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 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.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -6079,6 +6616,13 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + file-system-cache@2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz" @@ -6211,6 +6755,14 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + flatted@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" @@ -6385,12 +6937,22 @@ function-bind@^1.1.1, function-bind@^1.1.2: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +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" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -6405,7 +6967,7 @@ get-caller-file@^2.0.1: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, 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.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6463,6 +7025,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +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.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.npmjs.org/get-value/-/get-value-2.0.6.tgz" @@ -6501,6 +7072,13 @@ glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" @@ -6549,6 +7127,18 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +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" + globalyzer@0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz" @@ -6595,6 +7185,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + growly@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" @@ -6664,7 +7259,7 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: +has-proto@^1.0.1, has-proto@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== @@ -6719,7 +7314,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasown@^2.0.0: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -6929,6 +7524,11 @@ ignore@^5.2.0: resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -7001,6 +7601,15 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +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: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" @@ -7068,11 +7677,26 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +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: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +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" resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" @@ -7105,6 +7729,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +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-ci@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" @@ -7112,7 +7741,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0, is-core-module@^2.2.0, is-core-module@^2.8.1: +is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.2.0, is-core-module@^2.8.1: version "2.13.1" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== @@ -7133,7 +7762,14 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: +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: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -7190,6 +7826,13 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +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.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" @@ -7210,7 +7853,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.7: +is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -7239,6 +7882,11 @@ is-interactive@^1.0.0: resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" 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.npmjs.org/is-module/-/is-module-1.0.0.tgz" @@ -7257,6 +7905,11 @@ is-negative-zero@^2.0.2: resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 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" resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" @@ -7281,7 +7934,7 @@ is-path-cwd@^2.2.0: resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -7318,6 +7971,11 @@ is-regex@^1.0.4, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +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: version "1.0.2" resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" @@ -7325,6 +7983,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^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.7" + is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" @@ -7354,7 +8019,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.3: +is-typed-array@^1.1.13, is-typed-array@^1.1.3: version "1.1.13" resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -7371,6 +8036,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 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" resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" @@ -7378,6 +8048,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.2: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" @@ -7395,6 +8073,11 @@ isarray@1.0.0, isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +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.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -7482,6 +8165,17 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +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.0.6: version "1.2.5" resolved "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz" @@ -7920,6 +8614,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" @@ -8040,6 +8741,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +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" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" @@ -8074,7 +8782,7 @@ jsprim@^1.2.2: array-includes "^3.1.4" object.assign "^4.1.2" -keyv@^4.5.3: +keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -8144,6 +8852,14 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + lie@^3.0.2: version "3.3.0" resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" @@ -8524,7 +9240,7 @@ min-indent@^1.0.1: resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -8538,7 +9254,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: +minimatch@^9.0.1, minimatch@^9.0.4: version "9.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz" integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== @@ -8850,7 +9566,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.2, object.assign@^4.1.4: +object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -8869,6 +9585,15 @@ object.entries@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +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.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + object.fromentries@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" @@ -8878,6 +9603,25 @@ object.fromentries@^2.0.5: define-properties "^1.1.3" es-abstract "^1.19.1" +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.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +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: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + object.hasown@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz" @@ -8886,6 +9630,15 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" +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.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" @@ -8902,6 +9655,15 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +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.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + objectorarray@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz" @@ -8973,6 +9735,18 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + 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.5" + ora@^4.0.3: version "4.1.1" resolved "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz" @@ -9386,6 +10160,11 @@ potpack@^1.0.1: resolved "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz" integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== +prelude-ls@^1.2.1: + version "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.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" @@ -9881,6 +10660,19 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +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" + refractor@^2.4.1: version "2.10.1" resolved "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz" @@ -9931,6 +10723,16 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1: define-properties "^1.1.3" functions-have-names "^1.2.2" +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.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz" @@ -10110,7 +10912,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.8: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: version "1.22.8" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -10127,6 +10929,15 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" +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: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" @@ -10244,6 +11055,16 @@ sade@^1.4.2: dependencies: mri "^1.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.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" @@ -10254,6 +11075,15 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 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.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" @@ -10377,7 +11207,7 @@ semver@^7.1.1, semver@^7.3.2: dependencies: lru-cache "^6.0.0" -semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: +semver@^7.3.5, semver@^7.3.7, semver@^7.5.4, semver@^7.6.0: version "7.6.0" resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -10444,6 +11274,16 @@ set-function-length@^1.2.1: 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" resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" @@ -10848,6 +11688,24 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +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.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" @@ -10862,6 +11720,16 @@ string.prototype.matchall@^4.0.6: regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" +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.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.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" @@ -10870,6 +11738,15 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +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.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.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" @@ -10878,6 +11755,15 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.8: + 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.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" @@ -10952,7 +11838,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.0.1: +strip-json-comments@^3.0.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -11328,6 +12214,11 @@ troika-worker-utils@^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-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + ts-dedent@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-1.2.0.tgz" @@ -11364,6 +12255,16 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +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.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tsconfig-paths@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" @@ -11476,6 +12377,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" @@ -11521,6 +12429,50 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +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.6: + 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" + typed-styles@^0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz" @@ -11558,7 +12510,7 @@ uglify-js@^3.1.4: resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== -unbox-primitive@^1.0.1: +unbox-primitive@^1.0.1, unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== @@ -11985,12 +12937,40 @@ 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.npmjs.org/which-module/-/which-module-2.0.0.tgz" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-typed-array@^1.1.14, which-typed-array@^1.1.2: +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -12015,6 +12995,11 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"