diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..8e8e2ee --- /dev/null +++ b/.eslintrc @@ -0,0 +1,4 @@ +{ + "extends": [ "plugin:@wordpress/eslint-plugin/recommended" ] +} + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..b011a6f --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "semi": true, + "singleQuote": false, + "trailingComma": "none" +} + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..15d3670 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "editor.defaultFormatter": "rvest.vs-code-prettier-eslint", + "editor.codeActionsOnSave": { + "source.fixAll": true + }, +} diff --git a/admin/three-object-viewer-settings/App.js b/admin/three-object-viewer-settings/App.js index 0a4653c..3bf5e65 100644 --- a/admin/three-object-viewer-settings/App.js +++ b/admin/three-object-viewer-settings/App.js @@ -8,7 +8,7 @@ import { useAnimations, } from '@react-three/drei'; import * as THREE from 'three'; -import defaultAikonaut from '../../inc/avatars/mummy.vrm'; +import defaultProfileVRM from '../../inc/avatars/3ov_default_avatar.vrm'; function SavedObject( props ) { const [ url, set ] = useState( props.url ); @@ -20,7 +20,7 @@ function SavedObject( props ) { useThree( ( { camera } ) => { camera.add( listener ); } ); - const fallbackURL = threeObjectPlugin + defaultAikonaut; + const fallbackURL = threeObjectPlugin + defaultProfileVRM; const playerURL = props.url ? props.url : fallbackURL; const someSceneState = useLoader( GLTFLoader, playerURL, ( loader ) => { @@ -40,6 +40,25 @@ function SavedObject( props ) { } } +function CreateImage() { + const { gl, scene, camera } = useThree() + let getImageData = true; + if(gl){ + if(getImageData == true) { + window.setTimeout(function () { + const url = gl.domElement.toDataURL(); + const link = document.getElementById('download'); + + // const link = document.createElement('a'); + link.setAttribute('href', url); + link.setAttribute('target', '_blank'); + link.setAttribute('download', "download the scene image"); + }, 200); + getImageData = false; + } + } +} + //Main component for admin page app export default function App({ getSettings, updateSettings }) { @@ -87,7 +106,6 @@ export default function App({ getSettings, updateSettings }) { // Get media attachment details from the frame state var attachment = frame.state().get('selection').first().toJSON(); - // console.log(attachment); setDefaultVRM(attachment.url); // Send the attachment URL to our custom image input field. }); @@ -108,6 +126,7 @@ export default function App({ getSettings, updateSettings }) {

Three Object Viewer Settings

+
download the thing

Avatar and World Defaults

This avatar will be used for guest visitors or logged in users that have not set their main avatar in the user profile page.

@@ -115,7 +134,8 @@ export default function App({ getSettings, updateSettings }) {
+ > + { + setAttributes({ animations }); + }; - const onChangeAnimations = ( animations ) => { - setAttributes( { animations: animations } ); + const onImageSelect = (imageObject) => { + setAttributes({ threeObjectUrl: null }); + setAttributes({ threeObjectUrl: imageObject.url }); }; - const onImageSelect = ( imageObject ) => { - setAttributes( { threeObjectUrl: null } ); - setAttributes( { threeObjectUrl: imageObject.url } ); + const onPreviewImageSelect = (imageObject) => { + setAttributes({ threePreviewImage: null }); + setAttributes({ threePreviewImage: imageObject.url }); }; - const onChangePositionY = ( posy ) => { - setAttributes( { positionY: posy } ); + + const onChangePositionY = (posy) => { + setAttributes({ positionY: posy }); }; - const onChangeScale = ( scale ) => { - setAttributes( { scale: scale } ); + const onChangeScale = (scale) => { + setAttributes({ scale }); }; - const onChangerotationY = ( rotz ) => { - setAttributes( { rotationY: rotz } ); + const onChangerotationY = (rotz) => { + setAttributes({ rotationY: rotz }); }; - const setDeviceTarget = ( target ) => { - setAttributes( { deviceTarget: target } ); + const setDeviceTarget = (target) => { + setAttributes({ deviceTarget: target }); }; - const [ enteredURL, setEnteredURL ] = useState( "" ); + const [enteredURL, setEnteredURL] = useState(""); const { mediaUpload } = wp.editor; const ALLOWED_MEDIA_TYPES = [ - 'model/gltf-binary', - 'application/octet-stream', + "model/gltf-binary", + "application/octet-stream" ]; const MyDropZone = () => { - const [ hasDropped, setHasDropped ] = useState( false ); + const [hasDropped, setHasDropped] = useState(false); return (
- { hasDropped ? 'Dropped!' : 'Drop a glb here or' } + {hasDropped ? "Dropped!" : "Drop a glb here or"} - mediaUpload( { + onFilesDrop={(files) => + mediaUpload({ allowedTypes: ALLOWED_MEDIA_TYPES, filesList: files, - onFileChange: ( [ images ] ) => { - onImageSelect( images ); - }, - } ) + onFileChange: ([images]) => { + onImageSelect(images); + } + }) } />
@@ -79,42 +84,82 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { }; return ( -
+
- Select a glb file from your media library. This will be treated as a collidable mesh that visitors can walk on: + Select a glb file from your media library. This + will be treated as a collidable mesh that + visitors can walk on: - onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="image" label="GLB File" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.threeObjectUrl } - render={ ( { open } ) => ( - - ) } + )} + /> + + + + Select an image to be used as the preview image: + + + + + Preview + + + + + onPreviewImageSelect(imageObject) + } + type="image" + label="Image File" + // allowedTypes={ ALLOWED_MEDIA_TYPES } + value={attributes.threePreviewImage} + render={({ open }) => ( + + )} /> Object Display Type: @@ -122,74 +167,67 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { - setDeviceTarget( target ) - } + value={attributes.deviceTarget} + options={[{ label: "VR", value: "vr" }]} + onChange={(target) => setDeviceTarget(target)} /> - onChangeAnimations( value ) - } + value={attributes.animations} + onChange={(value) => onChangeAnimations(value)} /> - { isSelected ? ( + {isSelected ? ( <> - { attributes.threeObjectUrl ? ( + {attributes.threeObjectUrl ? ( ) : (
@@ -208,41 +246,45 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { Use URL
*/} - - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.threeObjectUrl } - render={ ( { open } ) => ( - - ) } - /> -
+ + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + /> +
- ) } - + )} + ) : ( <> - { attributes.threeObjectUrl ? ( + {attributes.threeObjectUrl ? ( ) : (
@@ -262,23 +304,26 @@ export default function Edit( { attributes, setAttributes, isSelected } ) {
*/}
- onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.threeObjectUrl } - render={ ( { open } ) => ( - - ) } + )} /> - ) } - + )} + - ) } + )} ); } diff --git a/blocks/environment/Edit.test.js b/blocks/environment/Edit.test.js index ab10afe..ab22d96 100644 --- a/blocks/environment/Edit.test.js +++ b/blocks/environment/Edit.test.js @@ -1,57 +1,47 @@ - //Import React -import React from 'react'; +import React from "react"; //Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; +import { render, fireEvent, cleanup } from "@testing-library/react"; //Import component to test -import { Editor } from './Edit'; - +import { Editor } from "./Edit"; describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/environment/Save.js b/blocks/environment/Save.js index 79a0576..a5baaef 100644 --- a/blocks/environment/Save.js +++ b/blocks/environment/Save.js @@ -1,39 +1,42 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps, InnerBlocks } from '@wordpress/block-editor'; +import { __ } from "@wordpress/i18n"; +import { useBlockProps, InnerBlocks } from "@wordpress/block-editor"; -export default function save( { attributes } ) { +export default function save({ attributes }) { return ( -
+
<>

- { attributes.deviceTarget } + {attributes.deviceTarget}

- { attributes.threeObjectUrl } + {attributes.threeObjectUrl}

-

{ attributes.scale }

+

{attributes.scale}

- { attributes.bg_color } + {attributes.bg_color}

-

{ attributes.zoom }

+

{attributes.zoom}

- { attributes.hasZoom ? 1 : 0 } + {attributes.hasZoom ? 1 : 0}

- { attributes.hasTip ? 1 : 0 } + {attributes.hasTip ? 1 : 0}

- { attributes.positionY } + {attributes.positionY}

- { attributes.rotationY } + {attributes.rotationY} +

+

{attributes.scale}

+

+ {attributes.threePreviewImage}

-

{ attributes.scale }

- { attributes.animations } + {attributes.animations}

- +
diff --git a/blocks/environment/block.json b/blocks/environment/block.json index 722fa06..9a9c346 100644 --- a/blocks/environment/block.json +++ b/blocks/environment/block.json @@ -1,8 +1,12 @@ { "name": "three-object-viewer/environment", - "title": "Environment Block", - "description": "A 3D environment component for VersePress", + "title": "3D Environment", + "description": "A 3D environment component for XP Portal", "attributes": { + "align": { + "type": "string", + "default": "full" + }, "scale": { "type": "integer", "default": 1 @@ -23,20 +27,25 @@ "type": "string", "default": null }, + "threePreviewImage": { + "type": "string", + "default": null + }, "deviceTarget": { "type": "string", - "default": "2d" + "default": "vr" }, "animations": { "type": "string", "default": "" } }, - "category": "3D", + "category": "design", "apiVersion": 2, "supports": { "html": false, - "multiple": true + "multiple": false, + "align": ["full"] }, "editorScript": "file:../../build/block-environment.js", "editorStyle": "file:../../build/block-environment.css", diff --git a/blocks/environment/components/Controls.js b/blocks/environment/components/Controls.js index fbca728..ce933e5 100644 --- a/blocks/environment/components/Controls.js +++ b/blocks/environment/components/Controls.js @@ -1,107 +1,412 @@ -import React, { useRef, useState } from 'react'; -import { useFrame } from '@react-three/fiber'; -import { PointerLockControls } from '@react-three/drei'; -import previewOptions from '@wordpress/block-editor/build/components/preview-options'; +import React, { useEffect, useRef, useState, componentDidMount } from "react"; +// import { Raycaster, Vector3, Math, Euler } from 'three'; +import * as THREE from "three"; -const Controls = () => { +import { useFrame, useThree } from "@react-three/fiber"; +import { PointerLockControls, OrbitControls } from "@react-three/drei"; +import previewOptions from "@wordpress/block-editor/build/components/preview-options"; +import { + RigidBody, + MeshCollider, + useRapier, + BallCollider, + useRigidBody, + RigidBodyApi, + useCollider +} from "@react-three/rapier"; + +function touchStarted() { + getAudioContext().resume(); +} + +const Controls = (props) => { + const p2pcf = window.p2pcf; const controlsRef = useRef(); - const isLocked = useRef( false ); - const [ moveForward, setMoveForward ] = useState( false ); - const [ moveBackward, setMoveBackward ] = useState( false ); - const [ moveLeft, setMoveLeft ] = useState( false ); - const [ moveRight, setMoveRight ] = useState( false ); - - useFrame( () => { - const velocity = 0.5; - if ( moveForward ) { - controlsRef.current.moveForward( velocity ); - } else if ( moveLeft ) { - controlsRef.current.moveRight( -velocity ); - } else if ( moveBackward ) { - controlsRef.current.moveForward( -velocity ); - } else if ( moveRight ) { - controlsRef.current.moveRight( velocity ); + const isLocked = useRef(false); + const [lock, setLock] = useState(false); + const [moveForward, setMoveForward] = useState(false); + const [moveBackward, setMoveBackward] = useState(false); + const [moveLeft, setMoveLeft] = useState(false); + const [moveRight, setMoveRight] = useState(false); + const [spawnPos, setSpawnPos] = useState(); + const [jump, setJump] = useState(false); + const currentRigidbody = useRigidBody(); + const { world, rapier } = useRapier(); + const ray = new rapier.Ray({ x: 0, y: 0, z: 0 }, { x: 0, y: -1, z: 0 }); + const { camera, scene } = useThree(); + + useEffect(() => { + setSpawnPos(props.spawnPoint); + const playerThing = world.getRigidBody(props.something.current.handle); + // if (playerThing) { + // playerThing.setTranslation({ + // x: props.spawnPoint[0], + // y: props.spawnPoint[1], + // z: props.spawnPoint[2] + // }); + // } + + // controlsRef.current + // .getObject() + // .parent.position.set( + // props.spawnPoint[0], + // props.spawnPoint[1], + // props.spawnPoint[2] + // ); + }, []); + + useFrame(() => { + const playerThing = world.getRigidBody(props.something.current.handle); + const playerThingColliders = world.getCollider( + props.something.current.handle + ); + + // playerThing.restrictRotations({enableX: false, enableY: false, enableZ: false}, true); + //maybebringthemback + // playerThing.lockRotations(true, true); + if (lock) { + playerThing.setBodyType(1); + } else { + playerThing.setBodyType(0); } - } ); + // playerThing.setRotation({x: Math.radToDeg(controlsRef.current.camera.rotation.x), y: Math.radToDeg(controlsRef.current.camera.rotation.y), z: Math.radToDeg(controlsRef.current.camera.rotation.z), w: 0}, true); + ray.origin.x = playerThing.translation().x; + ray.origin.y = playerThing.translation().y; + ray.origin.z = playerThing.translation().z; + const velocity = 0.25; + world.raw().step(); + const maxToi = 14; + const solid = true; + + if (moveForward) { + // playerThing.applyImpulse({x:0, y:0, z:0.1}, true); + controlsRef.current.moveForward(velocity); + const hit = world + .raw() + .queryPipeline.castRay( + world.raw().colliders, + ray, + maxToi, + solid, + 0xfffffffff + ); + playerThing.lockRotations(true, true); + // playerThing.setRotation({x: 0, y: 1, z: 0, w: 0}, true); + + if (hit) { + const hitPoint = ray.pointAt(hit.toi); + playerThing.setTranslation({ + x: controlsRef.current.camera.position.x, + y: hitPoint.y, + z: controlsRef.current.camera.position.z + }); + camera.position.setY(hitPoint.y + 0.001); + } + if (p2pcf) { + const position = [ + controlsRef.current.camera.position.x, + controlsRef.current.camera.position.y, + controlsRef.current.camera.position.z + ]; + const rotation = [ + controlsRef.current.camera.rotation.x, + controlsRef.current.camera.rotation.y, + controlsRef.current.camera.rotation.z + ]; + const message = + `{ "${p2pcf.clientId}": [{ "position" : [` + + position + + `]},{ "rotation" : [` + + rotation + + `]},{ "profileImage" : ["` + + userData.profileImage + + `"]}]}`; + p2pcf.broadcast(new TextEncoder().encode(message)); + } + } else if (moveLeft) { + playerThing.lockRotations(true, true); + // playerThing.setRotation({x: 0, y: -0.707107, z: 0, w: 0.707107}, true); + controlsRef.current.moveRight(-velocity); + const hit = world + .raw() + .queryPipeline.castRay( + world.raw().colliders, + ray, + maxToi, + solid, + 0xfffffffff + ); + + if (hit) { + const hitPoint = ray.pointAt(hit.toi); // Same as: `ray.origin + ray.dir * toi` + playerThing.setTranslation({ + x: controlsRef.current.camera.position.x, + y: hitPoint.y, + z: controlsRef.current.camera.position.z + }); + } + if (p2pcf) { + const position = [ + controlsRef.current.camera.position.x, + controlsRef.current.camera.position.y, + controlsRef.current.camera.position.z + ]; + const rotation = [ + controlsRef.current.camera.rotation.x, + controlsRef.current.camera.rotation.y, + controlsRef.current.camera.rotation.z + ]; + const message = + `{ "${p2pcf.clientId}": [{ "position" : [` + + position + + `]},{ "rotation" : [` + + rotation + + `]},{ "profileImage" : ["` + + userData.profileImage + + `"]}]}`; + p2pcf.broadcast(new TextEncoder().encode(message)); + } + } else if (moveBackward) { + playerThing.lockRotations(true, true); + // playerThing.setRotation({x: 0, y: 0, z: 0, w: -1}, true); + + controlsRef.current.moveForward(-velocity); + const hit = world + .raw() + .queryPipeline.castRay( + world.raw().colliders, + ray, + maxToi, + solid, + 0xfffffffff + ); + + if (hit) { + const hitPoint = ray.pointAt(hit.toi); // Same as: `ray.origin + ray.dir * toi` + playerThing.setTranslation({ + x: controlsRef.current.camera.position.x, + y: hitPoint.y, + z: controlsRef.current.camera.position.z + }); + } + if (p2pcf) { + const position = [ + controlsRef.current.camera.position.x, + controlsRef.current.camera.position.y, + controlsRef.current.camera.position.z + ]; + const rotation = [ + controlsRef.current.camera.rotation.x, + controlsRef.current.camera.rotation.y, + controlsRef.current.camera.rotation.z + ]; + const message = + `{ "${p2pcf.clientId}": [{ "position" : [` + + position + + `]},{ "rotation" : [` + + rotation + + `]},{ "profileImage" : ["` + + userData.profileImage + + `"]}]}`; + p2pcf.broadcast(new TextEncoder().encode(message)); + } + } else if (moveRight) { + playerThing.lockRotations(true, true); + // playerThing.setRotation({x: 0, y: 0.707107, z: 0, w: 0.707107}, true); - const onKeyDown = function ( event ) { - switch ( event.code ) { - case 'ArrowUp': - case 'KeyW': - setMoveForward( true ); + controlsRef.current.moveRight(velocity); + const hit = world + .raw() + .queryPipeline.castRay( + world.raw().colliders, + ray, + maxToi, + solid, + 0xfffffffff + ); + + if (hit) { + const hitPoint = ray.pointAt(hit.toi); // Same as: `ray.origin + ray.dir * toi` + playerThing.setTranslation({ + x: controlsRef.current.camera.position.x, + y: hitPoint.y, + z: controlsRef.current.camera.position.z + }); + } + // rigidBody.applyImpulse(controlsRef.current.vec); + if (p2pcf) { + const position = [ + controlsRef.current.camera.position.x, + controlsRef.current.camera.position.y, + controlsRef.current.camera.position.z + ]; + const rotation = [ + controlsRef.current.camera.rotation.x, + controlsRef.current.camera.rotation.y, + controlsRef.current.camera.rotation.z + ]; + const message = + `{ "${p2pcf.clientId}": [{ "position" : [` + + position + + `]},{ "rotation" : [` + + rotation + + `]},{ "profileImage" : ["` + + userData.profileImage + + `"]}]}`; + p2pcf.broadcast(new TextEncoder().encode(message)); + } + } else if (jump) { + } + }); + + const onKeyDown = function (event) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + setMoveForward(true); + setLock(false); break; - case 'ArrowLeft': - case 'KeyA': - setMoveLeft( true ); + case "ArrowLeft": + case "KeyA": + setMoveLeft(true); + setLock(false); break; - case 'ArrowDown': - case 'KeyS': - setMoveBackward( true ); + case "ArrowDown": + case "KeyS": + setMoveBackward(true); + setLock(false); break; - case 'ArrowRight': - case 'KeyD': - setMoveRight( true ); + case "ArrowRight": + case "KeyD": + setMoveRight(true); + setLock(false); + break; + case "KeyR": + console.log(props); + if (props.something.current) { + const playerThing = world.getRigidBody( + props.something.current.handle + ); + if (playerThing) { + playerThing.setTranslation({ + x: props.spawnPoint[0], + y: props.spawnPoint[1], + z: props.spawnPoint[2] + }); + if (controlsRef.current) { + console.log(controlsRef.current.getObject()); + controlsRef.current + .getObject() + .parent.position.set( + props.spawnPoint[0], + props.spawnPoint[1], + props.spawnPoint[2] + ); + } + } + } + setLock(false); break; case "Space": - window.addEventListener('keydown', (e) => { - if (e.keyCode === 32 && e.target === document.body) { - e.preventDefault(); - } - }); - console.log("boing"); - break; + setLock(false); + window.addEventListener("keydown", (e) => { + if (e.keyCode === 32 && e.target === document.body) { + e.preventDefault(); + } + }); + setJump(true); + break; default: - return; } }; - const onKeyUp = function ( event ) { - switch ( event.code ) { - case 'ArrowUp': - case 'KeyW': - setMoveForward( false ); + const onKeyUp = function (event, props) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + setMoveForward(false); + setLock(true); break; - case 'ArrowLeft': - case 'KeyA': - setMoveLeft( false ); + case "ArrowLeft": + case "KeyA": + setMoveLeft(false); + setLock(true); break; - case 'ArrowDown': - case 'KeyS': - setMoveBackward( false ); + case "ArrowDown": + case "KeyS": + setMoveBackward(false); + setLock(true); break; - case 'ArrowRight': - case 'KeyD': - setMoveRight( false ); + case "Space": + setJump(false); + setLock(true); + break; + + case "ArrowRight": + case "KeyD": + setMoveRight(false); + setLock(true); break; default: - return; } }; - document.addEventListener( 'keydown', onKeyDown ); - document.addEventListener( 'keyup', onKeyUp ); + document.addEventListener("keydown", onKeyDown); + document.addEventListener("keyup", onKeyUp); return ( { - if ( controlsRef.current ) { - controlsRef.current.addEventListener( 'lock', () => { - console.log( 'lock' ); + onUpdate={() => { + if (controlsRef.current) { + controlsRef.current.addEventListener("lock", () => { + console.log("lock"); isLocked.current = true; - } ); - controlsRef.current.addEventListener( 'unlock', () => { - console.log( 'unlock' ); + }); + controlsRef.current.addEventListener("unlock", () => { + console.log("unlock"); isLocked.current = false; - } ); + }); + } + }} + onChange={() => { + if (p2pcf && controlsRef) { + const position = [ + controlsRef.current.camera.position.x, + controlsRef.current.camera.position.y, + controlsRef.current.camera.position.z + ]; + const rotation = [ + controlsRef.current.camera.rotation.x, + controlsRef.current.camera.rotation.y, + controlsRef.current.camera.rotation.z + ]; + const message = + `{ "${p2pcf.clientId}": [{ "position" : [` + + position + + `]},{ "rotation" : [` + + rotation + + `]},{ "profileImage" : ["` + + userData.profileImage + + `"]}]}`; + p2pcf.broadcast(new TextEncoder().encode(message)); } - } } - ref={ controlsRef } + const rotatingPlayer = scene.getObjectByName("playerOne"); + const euler = new THREE.Euler(); + const rotation = euler.setFromQuaternion( + controlsRef.current.camera.quaternion + ); + const radians = + rotation.z > 0 ? rotation.z : 2 * Math.PI + rotation.z; + const degrees = THREE.MathUtils.radToDeg(radians); + rotatingPlayer.rotation.set(0, radians, 0); + }} + ref={controlsRef} /> ); }; diff --git a/blocks/environment/components/EditControls.js b/blocks/environment/components/EditControls.js new file mode 100644 index 0000000..9e1c7ce --- /dev/null +++ b/blocks/environment/components/EditControls.js @@ -0,0 +1,120 @@ +import React, { useRef, useState } from "react"; +import { Raycaster, Vector3, Math } from "three"; + +import { useFrame, useThree } from "@react-three/fiber"; +import { PointerLockControls, OrbitControls } from "@react-three/drei"; + +const EditControls = (props) => { + const controlsRef = useRef(); + const isLocked = useRef(false); + const [moveForward, setMoveForward] = useState(false); + const [moveBackward, setMoveBackward] = useState(false); + const [moveLeft, setMoveLeft] = useState(false); + const [moveRight, setMoveRight] = useState(false); + const [jump, setJump] = useState(false); + + useFrame(() => { + const velocity = 0.5; + + if (moveForward) { + // playerThing.applyImpulse({x:0, y:0, z:0.1}, true); + controlsRef.current.moveForward(velocity); + } else if (moveLeft) { + controlsRef.current.moveRight(-velocity); + } else if (moveBackward) { + controlsRef.current.moveForward(-velocity); + } else if (moveRight) { + controlsRef.current.moveRight(velocity); + } else if (jump) { + } + }); + + const onKeyDown = function (event, props) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + setMoveForward(true); + break; + + case "ArrowLeft": + case "KeyA": + setMoveLeft(true); + break; + + case "ArrowDown": + case "KeyS": + setMoveBackward(true); + break; + + case "ArrowRight": + case "KeyD": + setMoveRight(true); + break; + case "Space": + window.addEventListener("keydown", (e) => { + if (e.keyCode === 32 && e.target === document.body) { + e.preventDefault(); + } + }); + setJump(true); + break; + default: + } + }; + + const onKeyUp = function (event) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + setMoveForward(false); + break; + + case "ArrowLeft": + case "KeyA": + setMoveLeft(false); + break; + + case "ArrowDown": + case "KeyS": + setMoveBackward(false); + break; + + case "Space": + setJump(false); + break; + + case "ArrowRight": + case "KeyD": + setMoveRight(false); + break; + + default: + } + }; + + document.addEventListener("keydown", onKeyDown); + document.addEventListener("keyup", onKeyUp); + const { gl } = useThree(); + if (gl) { + return ( + { + if (controlsRef.current) { + renderer.addEventListener("lock", () => { + console.log("lock"); + isLocked.current = true; + }); + controlsRef.current.addEventListener("unlock", () => { + console.log("unlock"); + isLocked.current = false; + }); + } + }} + ref={controlsRef} + /> + ); + } +}; + +export default EditControls; diff --git a/blocks/environment/components/EnvironmentFront.js b/blocks/environment/components/EnvironmentFront.js index d0d009c..96434e7 100644 --- a/blocks/environment/components/EnvironmentFront.js +++ b/blocks/environment/components/EnvironmentFront.js @@ -1,513 +1,1637 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; -import { Physics, RigidBody } from "@react-three/rapier"; +import * as THREE from "three"; +import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; +import { Canvas, useLoader, useFrame, useThree } from "@react-three/fiber"; +import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; +import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; +import { TextureLoader } from "three/src/loaders/TextureLoader"; +import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"; +import { Physics, RigidBody, MeshCollider, Debug } from "@react-three/rapier"; +import * as SkeletonUtils from "three/examples/jsm/utils/SkeletonUtils.js"; +import Networking from "./Networking"; -import { - OrthographicCamera, - OrbitControls, - useAnimations, -} from '@react-three/drei'; -import { GLTFAudioEmitterExtension } from 'three-omi'; +import { useAnimations, Html, Stats, Text, Billboard } from "@react-three/drei"; +import { A11y } from "@react-three/a11y"; +import { GLTFAudioEmitterExtension } from "three-omi"; import { VRCanvas, - ARCanvas, DefaultXRControllers, Hands, -} from '@react-three/xr'; -import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' -import TeleportTravel from './TeleportTravel'; -import defaultVRM from '../../../inc/avatars/mummy.vrm'; -import Controls from './Controls'; -import { useAspect } from '@react-three/drei' - -function SavedObject( props ) { - const [ url, set ] = useState( props.url ); - const [cameraPosition, setCameraPosition] = useState(); - useEffect( () => { - setTimeout( () => set( props.url ), 2000 ); - }, [] ); - const [ listener ] = useState( () => new THREE.AudioListener() ); - - useThree( ( { camera } ) => { - camera.add( listener ); - } ); - - const gltf = useLoader( GLTFLoader, url, ( loader ) => { + XRButton +} from "@react-three/xr"; +import { Perf } from "r3f-perf"; +import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from "@pixiv/three-vrm"; +import TeleportTravel from "./TeleportTravel"; +import Player from "./Player"; +import defaultVRM from "../../../inc/avatars/3ov_default_avatar.vrm"; + +function parseMatrixUri(uri) { + const SegmentToSigil = { + u: "@", + user: "@", + r: "#", + room: "#", + roomid: "!" + }; + + const url = new URL(uri, window.location.href); + + if (url.protocol === "matrix:") { + const matches = url.pathname.match(/^(\/\/.+\/)?(.+)$/); + + let authority; + let path; + + if (matches) { + if (matches.length === 3) { + authority = matches[1]; + path = matches[2]; + } else if (matches.length === 2) { + path = matches[1]; + } + } + + if (!path) { + throw new Error(`Invalid matrix uri "${uri}": No path provided`); + } + + const segments = path.split("/"); + + if (segments.length !== 2 && segments.length !== 4) { + throw new Error( + `Invalid matrix uri "${uri}": Invalid number of segments` + ); + } + + const sigil1 = SegmentToSigil[segments[0]]; + + if (!sigil1) { + throw new Error( + `Invalid matrix uri "${uri}": Invalid segment ${segments[0]}` + ); + } + + if (!segments[1]) { + throw new Error(`Invalid matrix uri "${uri}": Empty segment`); + } + + const mxid1 = `${sigil1}${segments[1]}`; + + let mxid2; + + if (segments.length === 4) { + if ( + (sigil1 === "!" || sigil1 === "#") && + (segments[2] === "e" || segments[2] === "event") && + segments[3] + ) { + mxid2 = `$${segments[3]}`; + } else { + throw new Error( + `Invalid matrix uri "${uri}": Invalid segment ${segments[2]}` + ); + } + } + return { protocol: "matrix:", authority, mxid1, mxid2 }; + } + + return url; +} + +function Participant(participant) { + // Participant VRM. + const fallbackURL = threeObjectPlugin + defaultVRM; + const playerURL = userData.vrm ? userData.vrm : fallbackURL; + + const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + if (someSceneState?.userData?.gltfExtensions?.VRM) { + const playerController = someSceneState.userData.vrm; + VRMUtils.rotateVRM0(playerController); + const rotationVRM = playerController.scene.rotation.y; + playerController.scene.rotation.set(0, rotationVRM, 0); + playerController.scene.scale.set(1, 1, 1); + + const theScene = useThree(); + + participant.p2pcf.on("msg", (peer, data) => { + const finalData = new TextDecoder("utf-8").decode(data); + const participantData = JSON.parse(finalData); + const participantObject = theScene.scene.getObjectByName( + peer.client_id + ); + if (participantObject) { + const loadedProfile = useLoader( + TextureLoader, + participantData[peer.client_id][2].profileImage + ); + if (loadedProfile) { + participantObject.traverse((obj) => { + if ( + obj.name === "profile" && + obj.material.map === null + ) { + const newMat = obj.material.clone(); + newMat.map = loadedProfile; + obj.material = newMat; + obj.material.map.needsUpdate = true; + } + }); + } + participantObject.position.set( + participantData[peer.client_id][0].position[0], + participantData[peer.client_id][0].position[1], + participantData[peer.client_id][0].position[2] + ); + participantObject.rotation.set( + participantData[peer.client_id][1].rotation[0], + participantData[peer.client_id][1].rotation[1], + participantData[peer.client_id][1].rotation[2] + ); + } + }); + + // participant.p2pcf.on('peerclose', peer => { + // const participantObject = theScene.scene.getObjectByName(peer.client_id); + // // theScene.scene.remove(participantObject.name); + // theScene.scene.remove(...participantObject.children); + // // removePeerUi(peer.id) + // }) + + const modelClone = SkeletonUtils.clone(playerController.scene); + + return ( + <> + {playerController && ( + + )} + + ); + } +} + +function ModelObject(model) { + const [url, set] = useState(model.url); + useEffect(() => { + setTimeout(() => set(model.url), 2000); + }, []); + const [listener] = useState(() => new THREE.AudioListener()); + + useThree(({ camera }) => { + camera.add(listener); + }); + + const gltf = useLoader(GLTFLoader, url, (loader) => { loader.register( - ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) + (parser) => new GLTFAudioEmitterExtension(parser, listener) ); - loader.register( ( parser ) => { - return new VRMLoaderPlugin( parser ); - } ); - } ); - - const { actions } = useAnimations( gltf.animations, gltf.scene ); - - const animationList = props.animations ? props.animations.split( ',' ) : ''; - useEffect( () => { - if ( animationList ) { - animationList.forEach( ( name ) => { - if ( Object.keys( actions ).includes( name ) ) { - actions[ name ].play(); + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + const { actions } = useAnimations(gltf.animations, gltf.scene); + const animationClips = gltf.animations; + const animationList = model.animations ? model.animations.split(",") : ""; + useEffect(() => { + if (animationList) { + animationList.forEach((name) => { + if (Object.keys(actions).includes(name)) { + console.log(actions[name].play()); } - } ); + }); } - }, [] ); - - // Player controller. - // const fallbackURL = threeObjectPlugin + defaultVRM; - // const playerURL = props.playerData.vrm ? props.playerData.vrm : fallbackURL - - // const someSceneState = useLoader( GLTFLoader, playerURL, ( loader ) => { - // loader.register( - // ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) - // ); - // loader.register( ( parser ) => { - // return new VRMLoaderPlugin( parser ); - // } ); - // } ); - - // if(someSceneState?.userData?.gltfExtensions?.VRM){ - // const playerController = someSceneState.userData.vrm; - // const { camera } = useThree(); - // useFrame(() => { - // const offsetZ = camera.position.z - 0.4; - // const offsetY = camera.position.y - 10; - // playerController.scene.position.set( camera.position.x, offsetY, offsetZ ); - // playerController.scene.rotation.set( camera.rotation.x, camera.rotation.y, camera.rotation.z ); - // }); - // VRMUtils.rotateVRM0( playerController ); - // const rotationVRM = playerController.scene.rotation.y; - // playerController.scene.rotation.set( 0, rotationVRM, 0 ); - // playerController.scene.scale.set( 1, 1, 1 ); - // gltf.scene.position.set( 0, props.positionY, 0 ); - // gltf.scene.rotation.set( 0, props.rotationY, 0 ); - // gltf.scene.scale.set( props.scale, props.scale, props.scale ); - // return <>; - // } - // End controller. - - if(gltf?.userData?.gltfExtensions?.VRM){ - const vrm = gltf.userData.vrm; - vrm.scene.position.set( 0, props.positionY, 0 ); - VRMUtils.rotateVRM0( vrm ); - const rotationVRM = vrm.scene.rotation.y + parseFloat(props.rotationY); - vrm.scene.rotation.set( 0, rotationVRM, 0 ); - vrm.scene.scale.set( props.scale, props.scale, props.scale ); - return ; - } - gltf.scene.position.set( 0, props.positionY, 0 ); - gltf.scene.rotation.set( 0, props.rotationY, 0 ); - gltf.scene.scale.set( props.scale, props.scale, props.scale ); - return <>; + }, []); + if (gltf?.userData?.gltfExtensions?.VRM) { + const vrm = gltf.userData.vrm; + vrm.scene.position.set( + model.positionX, + model.positionY, + model.positionZ + ); + VRMUtils.rotateVRM0(vrm); + const rotationVRM = vrm.scene.rotation.y + parseFloat(0); + vrm.scene.rotation.set(0, rotationVRM, 0); + vrm.scene.scale.set(1, 1, 1); + vrm.scene.scale.set(model.scaleX, model.scaleY, model.scaleZ); + return ( + // + + // + ); + } + // gltf.scene.castShadow = true; + // enable shadows @todo figure this out + // gltf.scene.traverse(function (node) { + // if (node.isMesh) { + // node.castShadow = true; + // node.receiveShadow = true; + // } + // }); + + const copyGltf = useMemo(() => gltf.scene.clone(), [gltf.scene]); + const modelClone = SkeletonUtils.clone(gltf.scene); + // modelClone.scene.castShadow = true; + if (model.collidable === "1") { + return ( + <> + ( + // // window.location.href = model.destinationUrl + // ) + // } + > + + + + ); + } + return ( + <> + + + ); } -function ModelObject( model ) { - const [ url, set ] = useState( model.url ); - useEffect( () => { - setTimeout( () => set( model.url ), 2000 ); - }, [] ); - const [ listener ] = useState( () => new THREE.AudioListener() ); +function Portal(model) { + if (model.object) { + return ( + <> + + + {model.label + ? model.label + ": " + : "" + model.destinationUrl} + + + { + const url = new URL( + model.destinationUrl, + window.location.href + ); + if (url.protocol === "matrix:") { + const destination = parseMatrixUri( + model.destinationUrl + ); + window.location.href = + "https://thirdroom.io/world/" + + destination.mxid1; + } else { + window.location.href = model.destinationUrl; + } + }} + > + + + + ); + } + const [url, set] = useState(model.url); - useThree( ( { camera } ) => { - camera.add( listener ); - } ); + useEffect(() => { + setTimeout(() => set(model.url), 2000); + }, []); + const [listener] = useState(() => new THREE.AudioListener()); - const gltf = useLoader( GLTFLoader, url, ( loader ) => { + useThree(({ camera }) => { + camera.add(listener); + }); + + const gltf = useLoader(GLTFLoader, url, (loader) => { loader.register( - ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) + (parser) => new GLTFAudioEmitterExtension(parser, listener) ); - loader.register( ( parser ) => { - return new VRMLoaderPlugin( parser ); - } ); - } ); - - const { actions } = useAnimations( gltf.animations, gltf.scene ); - - const animationList = model.animations ? model.animations.split( ',' ) : ''; - useEffect( () => { - if ( animationList ) { - animationList.forEach( ( name ) => { - if ( Object.keys( actions ).includes( name ) ) { - actions[ name ].play(); + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + const { actions } = useAnimations(gltf.animations, gltf.scene); + + const animationList = model.animations ? model.animations.split(",") : ""; + useEffect(() => { + if (animationList) { + animationList.forEach((name) => { + if (Object.keys(actions).includes(name)) { + actions[name].play(); } - } ); + }); } - }, [] ); - if(gltf?.userData?.gltfExtensions?.VRM){ - const vrm = gltf.userData.vrm; - vrm.scene.position.set( model.positionX, model.positionY, model.positionZ ); - VRMUtils.rotateVRM0( vrm ); - const rotationVRM = vrm.scene.rotation.y + parseFloat(0); - vrm.scene.rotation.set( 0, rotationVRM, 0 ); - vrm.scene.scale.set( 1, 1, 1 ); - // vrm.scene.scale.set( props.scale, props.scale, props.scale ); - return ; - } - gltf.scene.position.set( model.positionX, model.positionY, model.positionZ ); - gltf.scene.rotation.set( 0, 0, 0 ); - gltf.scene.scale.set(model.scaleX , model.scaleY, model.scaleZ ); - // console.log(model.rotationX, model.rotationY, model.rotationZ); - gltf.scene.rotation.set(model.rotationX , model.rotationY, model.rotationZ ); - // gltf.scene.scale.set( props.scale, props.scale, props.scale ); - return <>; -} + }, []); + // gltf.scene.position.set( model.positionX, model.positionY, model.positionZ ); + // gltf.scene.rotation.set( 0, 0, 0 ); + gltf.scene.scale.set(model.scaleX, model.scaleY, model.scaleZ); + // gltf.scene.rotation.set(model.rotationX , model.rotationY, model.rotationZ ); + const copyGltf = useMemo(() => gltf.scene.clone(), [gltf.scene]); + return ( + <> + + (window.location.href = model.destinationUrl) + } + > + + + {model.label + ": " + model.destinationUrl} + + + + + + ); +} -function Sky( sky ) { - // console.log(sky.src); - const skyUrl = sky.src[0].querySelector( 'p.sky-block-url' ) - ? sky.src[0].querySelector( 'p.sky-block-url' ).innerText - : ''; +function Sky(sky) { + const skyUrl = sky.src[0].querySelector("p.sky-block-url") + ? sky.src[0].querySelector("p.sky-block-url").innerText + : ""; - const texture_1 = useLoader(THREE.TextureLoader, skyUrl); + const texture1 = useLoader(THREE.TextureLoader, skyUrl); return ( - - - - + + + + ); } -function ThreeImage( threeImage ) { - // console.log(threeImage.aspectWidth, threeImage.aspectHeight); - const texture_2 = useLoader(THREE.TextureLoader, threeImage.url); +function ThreeImage(threeImage) { + const texture2 = useLoader(THREE.TextureLoader, threeImage.url); return ( - - - + + + ); } function ThreeVideo(threeVideo) { - console.log(threeVideo); const clicked = true; - const [video] = useState(() => Object.assign(document.createElement('video'), { src: threeVideo.url, crossOrigin: 'Anonymous', loop: true, muted: true })); + const [video] = useState(() => + Object.assign(document.createElement("video"), { + src: threeVideo.url, + crossOrigin: "Anonymous", + loop: true, + muted: true + }) + ); useEffect(() => void (clicked && video.play()), [video, clicked]); return ( - - - - - - + + + + + + ); } - -function Floor( props ) { +function Floor(props) { return ( - - + + ); } -export default function EnvironmentFront( props ) { - if ( props.deviceTarget === 'vr' ) { - return ( - <> - + + - - - - - - - - { props.threeUrl && ( - <> - - + + +
+ +
+
+ + ); +} + +function Participants(props) { + const [participants, setParticipant] = useState([]); + const p2pcf = window.p2pcf; + if (p2pcf) { + p2pcf.on("peerconnect", (peer) => { + console.log("connected peer", peer); + setParticipant((current) => [...current, peer.client_id]); + }); + } + return ( + <> + {participants && + participants.map((item, index) => { + return ( + <> + + + ); + })} + + ); +} + +function SavedObject(props) { + const meshRef = useRef(); + const [url, set] = useState(props.url); + useEffect(() => { + setTimeout(() => set(props.url), 2000); + }, []); + const [listener] = useState(() => new THREE.AudioListener()); + const [colliders, setColliders] = useState(); + const [meshes, setMeshes] = useState(); + const [portals, setPortals] = useState(); + + useThree(({ camera }) => { + camera.add(listener); + }); + + const gltf = useLoader(GLTFLoader, url, (loader) => { + const dracoLoader = new DRACOLoader(); + dracoLoader.setDecoderPath( + "https://www.gstatic.com/draco/v1/decoders/" + ); + loader.setDRACOLoader(dracoLoader); + + loader.register( + (parser) => new GLTFAudioEmitterExtension(parser, listener) + ); + + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + useEffect(() => { + //OMI_collider logic. + const childrenToParse = []; + const collidersToAdd = []; + const meshesToAdd = []; + const portalsToAdd = []; + let omiColliders; + + if (gltf.userData.gltfExtensions?.OMI_collider) { + omiColliders = gltf.userData.gltfExtensions.OMI_collider.colliders; + } + + gltf.scene.traverse((child) => { + // @todo figure out shadows + // if (child.isMesh) { + // child.castShadow = true; + // child.receiveShadow = true; + // } + + if (child.userData.gltfExtensions?.OMI_collider) { + childrenToParse.push(child); + // child.parent.remove(child.name); + } + if (child.userData.gltfExtensions?.OMI_link) { + portalsToAdd.push(child); + } else { + meshesToAdd.push(child); + } + }); + + childrenToParse.forEach((child) => { + const index = child.userData.gltfExtensions.OMI_collider.collider; + collidersToAdd.push([child, omiColliders[index]]); + // gltf.scene.remove(child.name); + }); + setColliders(collidersToAdd); + setMeshes(meshesToAdd); + setPortals(portalsToAdd); + // End OMI_collider logic. + }, []); + + const { actions } = useAnimations(gltf.animations, gltf.scene); + + const animationList = props.animations ? props.animations.split(",") : ""; + useEffect(() => { + if (animationList) { + animationList.forEach((name) => { + if (Object.keys(actions).includes(name)) { + actions[name].play(); + } + }); + } + }, []); + console.log(gltf); + // const loader = new THREE.ObjectLoader(); + // const object = await loader.loadAsync("models/json/lightmap/lightmap.json"); + // scene.add(object); + + return ( + <> + {meshes && + meshes.map((item, index) => { + if (item.isObject3D) { + const mixer = new THREE.AnimationMixer(gltf.scene); + + const pos = new THREE.Vector3(); + const quat = new THREE.Quaternion(); + const rotation = new THREE.Euler(); + const quaternion = item.getWorldQuaternion(quat); + const finalRotation = + rotation.setFromQuaternion(quaternion); + + return ( + + ); + } + })} + {portals && + portals.map((item, index) => { + const pos = new THREE.Vector3(); + const quat = new THREE.Quaternion(); + const rotation = new THREE.Euler(); + const position = item.getWorldPosition(pos); + const quaternion = item.getWorldQuaternion(quat); + const finalRotation = + rotation.setFromQuaternion(quaternion); + return ( + + ); + })} + {colliders && + colliders.map((item, index) => { + const pos = new THREE.Vector3(); // create once an reuse it + const quat = new THREE.Quaternion(); // create once an reuse it + const rotation = new THREE.Euler(); + const quaternion = item[0].getWorldQuaternion(quat); + const finalRotation = + rotation.setFromQuaternion(quaternion); + const worldPosition = item[0].getWorldPosition(pos); + if (item[1].type === "mesh") { + return ( + + + + ); + } + if (item[1].type === "box") { + return ( + + + + ); + } + if (item[1].type === "capsule") { + return ( + + + + ); + } + if (item[1].type === "sphere") { + return ( + + + + ); + } + })} + + ); +} + +export default function EnvironmentFront(props) { + const [loaded, setLoaded] = useState(false); + if (loaded === true) { + if (props.deviceTarget === "vr") { + return ( + <> + + {/* */} + {/* */} + + + + + + + + {/* Debug physics */} + {/* */} + {props.threeUrl && ( + <> + + + - - { props.threeUrl && ( - <> - - - )} - { Object.values(props.imagesToAdd).map((item, index)=>{ - const imagePosX = item.querySelector( 'p.image-block-positionX' ) - ? item.querySelector( 'p.image-block-positionX' ).innerText - : ''; - - const imagePosY = item.querySelector( 'p.image-block-positionY' ) - ? item.querySelector( 'p.image-block-positionY' ).innerText - : ''; - - const imagePosZ = item.querySelector( 'p.image-block-positionZ' ) - ? item.querySelector( 'p.image-block-positionZ' ).innerText - : ''; - - const imageScaleX = item.querySelector( 'p.image-block-scaleX' ) - ? item.querySelector( 'p.image-block-scaleX' ).innerText - : ''; - - const imageScaleY = item.querySelector( 'p.image-block-scaleY' ) - ? item.querySelector( 'p.image-block-scaleY' ).innerText - : ''; - - const imageScaleZ = item.querySelector( 'p.image-block-scaleZ' ) - ? item.querySelector( 'p.image-block-scaleZ' ).innerText - : ''; - - const imageRotationX = item.querySelector( 'p.image-block-rotationX' ) - ? item.querySelector( 'p.image-block-rotationX' ).innerText - : ''; - - const imageRotationY = item.querySelector( 'p.image-block-rotationY' ) - ? item.querySelector( 'p.image-block-rotationY' ).innerText - : ''; - - const imageRotationZ = item.querySelector( 'p.image-block-rotationZ' ) - ? item.querySelector( 'p.image-block-rotationZ' ).innerText - : ''; - - const imageUrl = item.querySelector( 'p.image-block-url' ) - ? item.querySelector( 'p.image-block-url' ).innerText - : ''; - - const aspectHeight = item.querySelector( 'p.image-block-aspect-height' ) - ? item.querySelector( 'p.image-block-aspect-height' ).innerText - : ''; - - const aspectWidth = item.querySelector( 'p.image-block-aspect-width' ) - ? item.querySelector( 'p.image-block-aspect-width' ).innerText - : ''; - - return(); + {Object.values(props.sky).map( + (item, index) => { + return ( + <> + + + ); + } + )} + {Object.values( + props.imagesToAdd + ).map((item, index) => { + const imagePosX = + item.querySelector( + "p.image-block-positionX" + ) + ? item.querySelector( + "p.image-block-positionX" + ).innerText + : ""; + + const imagePosY = + item.querySelector( + "p.image-block-positionY" + ) + ? item.querySelector( + "p.image-block-positionY" + ).innerText + : ""; + + const imagePosZ = + item.querySelector( + "p.image-block-positionZ" + ) + ? item.querySelector( + "p.image-block-positionZ" + ).innerText + : ""; + + const imageScaleX = + item.querySelector( + "p.image-block-scaleX" + ) + ? item.querySelector( + "p.image-block-scaleX" + ).innerText + : ""; + + const imageScaleY = + item.querySelector( + "p.image-block-scaleY" + ) + ? item.querySelector( + "p.image-block-scaleY" + ).innerText + : ""; + + const imageScaleZ = + item.querySelector( + "p.image-block-scaleZ" + ) + ? item.querySelector( + "p.image-block-scaleZ" + ).innerText + : ""; + + const imageRotationX = + item.querySelector( + "p.image-block-rotationX" + ) + ? item.querySelector( + "p.image-block-rotationX" + ).innerText + : ""; + + const imageRotationY = + item.querySelector( + "p.image-block-rotationY" + ) + ? item.querySelector( + "p.image-block-rotationY" + ).innerText + : ""; + + const imageRotationZ = + item.querySelector( + "p.image-block-rotationZ" + ) + ? item.querySelector( + "p.image-block-rotationZ" + ).innerText + : ""; + + const imageUrl = + item.querySelector( + "p.image-block-url" + ) + ? item.querySelector( + "p.image-block-url" + ).innerText + : ""; + + const aspectHeight = + item.querySelector( + "p.image-block-aspect-height" + ) + ? item.querySelector( + "p.image-block-aspect-height" + ).innerText + : ""; + + const aspectWidth = + item.querySelector( + "p.image-block-aspect-width" + ) + ? item.querySelector( + "p.image-block-aspect-width" + ).innerText + : ""; + + return ( + + ); })} - { Object.values(props.videosToAdd).map((item, index)=>{ - const videoPosX = item.querySelector( 'p.video-block-positionX' ) - ? item.querySelector( 'p.video-block-positionX' ).innerText - : ''; - - const videoPosY = item.querySelector( 'p.video-block-positionY' ) - ? item.querySelector( 'p.video-block-positionY' ).innerText - : ''; - - const videoPosZ = item.querySelector( 'p.video-block-positionZ' ) - ? item.querySelector( 'p.video-block-positionZ' ).innerText - : ''; - - const videoScaleX = item.querySelector( 'p.video-block-scaleX' ) - ? item.querySelector( 'p.video-block-scaleX' ).innerText - : ''; - - const videoScaleY = item.querySelector( 'p.video-block-scaleY' ) - ? item.querySelector( 'p.video-block-scaleY' ).innerText - : ''; - - const videoScaleZ = item.querySelector( 'p.video-block-scaleZ' ) - ? item.querySelector( 'p.video-block-scaleZ' ).innerText - : ''; - - const videoRotationX = item.querySelector( 'p.video-block-rotationX' ) - ? item.querySelector( 'p.video-block-rotationX' ).innerText - : ''; - - const videoRotationY = item.querySelector( 'p.video-block-rotationY' ) - ? item.querySelector( 'p.video-block-rotationY' ).innerText - : ''; - - const videoRotationZ = item.querySelector( 'p.video-block-rotationZ' ) - ? item.querySelector( 'p.video-block-rotationZ' ).innerText - : ''; - - const videoUrl = item.querySelector( 'p.video-block-url' ) - ? item.querySelector( 'p.video-block-url' ).innerText - : ''; - console.log("no url?", videoUrl); - console.log(item); - - const aspectHeight = item.querySelector( 'p.video-block-aspect-height' ) - ? item.querySelector( 'p.video-block-aspect-height' ).innerText - : ''; - - const aspectWidth = item.querySelector( 'p.video-block-aspect-width' ) - ? item.querySelector( 'p.video-block-aspect-width' ).innerText - : ''; - - return(); - })} - - { Object.values(props.modelsToAdd).map((model, index)=>{ - const modelPosX = model.querySelector( 'p.model-block-position-x' ) - ? model.querySelector( 'p.model-block-position-x' ).innerText - : ''; - - const modelPosY = model.querySelector( 'p.model-block-position-y' ) - ? model.querySelector( 'p.model-block-position-y' ).innerText - : ''; - - const modelPosZ = model.querySelector( 'p.model-block-position-z' ) - ? model.querySelector( 'p.model-block-position-z' ).innerText - : ''; - - const modelScaleX = model.querySelector( 'p.model-block-scale-x' ) - ? model.querySelector( 'p.model-block-scale-x' ).innerText - : ''; - - const modelScaleY = model.querySelector( 'p.model-block-scale-y' ) - ? model.querySelector( 'p.model-block-scale-y' ).innerText - : ''; - - const modelScaleZ = model.querySelector( 'p.model-block-scale-z' ) - ? model.querySelector( 'p.model-block-scale-z' ).innerText - : ''; - - const modelRotationX = model.querySelector( 'p.model-block-rotation-x' ) - ? model.querySelector( 'p.model-block-rotation-x' ).innerText - : ''; - - const modelRotationY = model.querySelector( 'p.model-block-rotation-y' ) - ? model.querySelector( 'p.model-block-rotation-y' ).innerText - : ''; - - const modelRotationZ = model.querySelector( 'p.model-block-rotation-z' ) - ? model.querySelector( 'p.model-block-rotation-z' ).innerText - : ''; - - const url = model.querySelector( 'p.model-block-url' ) - ? model.querySelector( 'p.model-block-url' ).innerText - : ''; - - return(); - })} - - - - - - ) } - - - {/* */} - - - ); - } - if ( props.deviceTarget === '2d' ) { + {Object.values( + props.videosToAdd + ).map((item, index) => { + const videoPosX = + item.querySelector( + "p.video-block-positionX" + ) + ? item.querySelector( + "p.video-block-positionX" + ).innerText + : ""; + + const videoPosY = + item.querySelector( + "p.video-block-positionY" + ) + ? item.querySelector( + "p.video-block-positionY" + ).innerText + : ""; + + const videoPosZ = + item.querySelector( + "p.video-block-positionZ" + ) + ? item.querySelector( + "p.video-block-positionZ" + ).innerText + : ""; + + const videoScaleX = + item.querySelector( + "p.video-block-scaleX" + ) + ? item.querySelector( + "p.video-block-scaleX" + ).innerText + : ""; + + const videoScaleY = + item.querySelector( + "p.video-block-scaleY" + ) + ? item.querySelector( + "p.video-block-scaleY" + ).innerText + : ""; + + const videoScaleZ = + item.querySelector( + "p.video-block-scaleZ" + ) + ? item.querySelector( + "p.video-block-scaleZ" + ).innerText + : ""; + + const videoRotationX = + item.querySelector( + "p.video-block-rotationX" + ) + ? item.querySelector( + "p.video-block-rotationX" + ).innerText + : ""; + + const videoRotationY = + item.querySelector( + "p.video-block-rotationY" + ) + ? item.querySelector( + "p.video-block-rotationY" + ).innerText + : ""; + + const videoRotationZ = + item.querySelector( + "p.video-block-rotationZ" + ) + ? item.querySelector( + "p.video-block-rotationZ" + ).innerText + : ""; + + const videoUrl = + item.querySelector( + "div.video-block-url" + ) + ? item.querySelector( + "div.video-block-url" + ).innerText + : ""; + + const aspectHeight = + item.querySelector( + "p.video-block-aspect-height" + ) + ? item.querySelector( + "p.video-block-aspect-height" + ).innerText + : ""; + + const aspectWidth = + item.querySelector( + "p.video-block-aspect-width" + ) + ? item.querySelector( + "p.video-block-aspect-width" + ).innerText + : ""; + + return ( + + ); + })} + + {Object.values( + props.modelsToAdd + ).map((model, index) => { + const modelPosX = + model.querySelector( + "p.model-block-position-x" + ) + ? model.querySelector( + "p.model-block-position-x" + ).innerText + : ""; + + const modelPosY = + model.querySelector( + "p.model-block-position-y" + ) + ? model.querySelector( + "p.model-block-position-y" + ).innerText + : ""; + + const modelPosZ = + model.querySelector( + "p.model-block-position-z" + ) + ? model.querySelector( + "p.model-block-position-z" + ).innerText + : ""; + + const modelScaleX = + model.querySelector( + "p.model-block-scale-x" + ) + ? model.querySelector( + "p.model-block-scale-x" + ).innerText + : ""; + + const modelScaleY = + model.querySelector( + "p.model-block-scale-y" + ) + ? model.querySelector( + "p.model-block-scale-y" + ).innerText + : ""; + + const modelScaleZ = + model.querySelector( + "p.model-block-scale-z" + ) + ? model.querySelector( + "p.model-block-scale-z" + ).innerText + : ""; + + const modelRotationX = + model.querySelector( + "p.model-block-rotation-x" + ) + ? model.querySelector( + "p.model-block-rotation-x" + ).innerText + : ""; + + const modelRotationY = + model.querySelector( + "p.model-block-rotation-y" + ) + ? model.querySelector( + "p.model-block-rotation-y" + ).innerText + : ""; + + const modelRotationZ = + model.querySelector( + "p.model-block-rotation-z" + ) + ? model.querySelector( + "p.model-block-rotation-z" + ).innerText + : ""; + + const url = model.querySelector( + "p.model-block-url" + ) + ? model.querySelector( + "p.model-block-url" + ).innerText + : ""; + + const animations = + model.querySelector( + "p.model-block-animations" + ) + ? model.querySelector( + "p.model-block-animations" + ).innerText + : ""; + + const alt = model.querySelector( + "p.model-block-alt" + ) + ? model.querySelector( + "p.model-block-alt" + ).innerText + : ""; + + const collidable = + model.querySelector( + "p.model-block-collidable" + ) + ? model.querySelector( + "p.model-block-collidable" + ).innerText + : false; + + return ( + + ); + })} + {Object.values(props.htmlToAdd).map( + (model, index) => { + const markup = + model.querySelector( + "p.three-html-markup" + ) + ? model.querySelector( + "p.three-html-markup" + ).innerText + : ""; + const rotationX = + model.querySelector( + "p.three-html-rotationX" + ) + ? model.querySelector( + "p.three-html-rotationX" + ).innerText + : ""; + const rotationY = + model.querySelector( + "p.three-html-rotationY" + ) + ? model.querySelector( + "p.three-html-rotationY" + ).innerText + : ""; + const rotationZ = + model.querySelector( + "p.three-html-rotationZ" + ) + ? model.querySelector( + "p.three-html-rotationZ" + ).innerText + : ""; + const positionX = + model.querySelector( + "p.three-html-positionX" + ) + ? model.querySelector( + "p.three-html-positionX" + ).innerText + : ""; + const positionY = + model.querySelector( + "p.three-html-positionY" + ) + ? model.querySelector( + "p.three-html-positionY" + ).innerText + : ""; + const positionZ = + model.querySelector( + "p.three-html-positionZ" + ) + ? model.querySelector( + "p.three-html-positionZ" + ).innerText + : ""; + + return ( + + ); + } + )} + {Object.values( + props.portalsToAdd + ).map((model, index) => { + const modelPosX = + model.querySelector( + "p.three-portal-block-position-x" + ) + ? model.querySelector( + "p.three-portal-block-position-x" + ).innerText + : ""; + + const modelPosY = + model.querySelector( + "p.three-portal-block-position-y" + ) + ? model.querySelector( + "p.three-portal-block-position-y" + ).innerText + : ""; + + const modelPosZ = + model.querySelector( + "p.three-portal-block-position-z" + ) + ? model.querySelector( + "p.three-portal-block-position-z" + ).innerText + : ""; + + const modelScaleX = + model.querySelector( + "p.three-portal-block-scale-x" + ) + ? model.querySelector( + "p.three-portal-block-scale-x" + ).innerText + : ""; + + const modelScaleY = + model.querySelector( + "p.three-portal-block-scale-y" + ) + ? model.querySelector( + "p.three-portal-block-scale-y" + ).innerText + : ""; + + const modelScaleZ = + model.querySelector( + "p.three-portal-block-scale-z" + ) + ? model.querySelector( + "p.three-portal-block-scale-z" + ).innerText + : ""; + + const modelRotationX = + model.querySelector( + "p.three-portal-block-rotation-x" + ) + ? model.querySelector( + "p.three-portal-block-rotation-x" + ).innerText + : ""; + + const modelRotationY = + model.querySelector( + "p.three-portal-block-rotation-y" + ) + ? model.querySelector( + "p.three-portal-block-rotation-y" + ).innerText + : ""; + + const modelRotationZ = + model.querySelector( + "p.three-portal-block-rotation-z" + ) + ? model.querySelector( + "p.three-portal-block-rotation-z" + ).innerText + : ""; + + const url = model.querySelector( + "p.three-portal-block-url" + ) + ? model.querySelector( + "p.three-portal-block-url" + ).innerText + : ""; + + const destinationUrl = + model.querySelector( + "p.three-portal-block-destination-url" + ) + ? model.querySelector( + "p.three-portal-block-destination-url" + ).innerText + : ""; + + const animations = + model.querySelector( + "p.three-portal-block-animations" + ) + ? model.querySelector( + "p.three-portal-block-animations" + ).innerText + : ""; + + const label = + model.querySelector( + "p.three-portal-block-label" + ) + ? model.querySelector( + "p.three-portal-block-label" + ).innerText + : ""; + + const labelOffsetX = + model.querySelector( + "p.three-portal-block-label-offset-x" + ) + ? model.querySelector( + "p.three-portal-block-label-offset-x" + ).innerText + : ""; + + const labelOffsetY = + model.querySelector( + "p.three-portal-block-label-offset-y" + ) + ? model.querySelector( + "p.three-portal-block-label-offset-y" + ).innerText + : ""; + + const labelOffsetZ = + model.querySelector( + "p.three-portal-block-label-offset-z" + ) + ? model.querySelector( + "p.three-portal-block-label-offset-z" + ).innerText + : ""; + const labelTextColor = + model.querySelector( + "p.three-portal-block-label-text-color" + ) + ? model.querySelector( + "p.three-portal-block-label-text-color" + ).innerText + : ""; + + return ( + + ); + })} + {/* + + */} + + + )} + + + {/* */} +
+ + ); + } + } else { return ( - <> - +
- - - - { props.threeUrl && ( - - ) } - - - - { props.hasTip === '1' ? ( -

Click and drag ^

- ) : ( -

- ) } - + +
+
); } } diff --git a/blocks/environment/components/Networking.js b/blocks/environment/components/Networking.js new file mode 100644 index 0000000..687ce4b --- /dev/null +++ b/blocks/environment/components/Networking.js @@ -0,0 +1,127 @@ +import P2PCF from "./p2pcf/p2pcf.js"; + +const Networking = (props) => { + if (!document.location.hash) { + document.location = + document.location.toString() + `#xpp-${props.postSlug}`; + } + + const userProfileName = + userData.userId === "" + ? Math.floor(Math.random() * 100000) + : userData.userId; + const p2pcf = new P2PCF( + "user-" + userProfileName, + document.location.hash.substring(1), + { + workerUrl: "https://p2pcf.sxpdigital.workers.dev/", + slowPollingRateMs: 5000, + fastPollingRateMs: 1500 + } + ); + window.p2pcf = p2pcf; + console.log("client id:", p2pcf.clientId); + + const removePeerUi = (clientId) => { + document.getElementById(clientId)?.remove(); + document.getElementById(`${clientId}-video`)?.remove(); + }; + + const addPeerUi = (sessionId) => { + if (document.getElementById(sessionId)) return; + + const peerEl = document.createElement("div"); + peerEl.style = "display: flex;"; + + const name = document.createElement("div"); + name.innerText = sessionId.substring(0, 5); + + peerEl.id = sessionId; + peerEl.appendChild(name); + + document.getElementById("peers").appendChild(peerEl); + }; + const addMessage = (message) => { + const messageEl = document.createElement("div"); + messageEl.innerText = message; + + document.getElementById("messages").appendChild(messageEl); + }; + let stream; + p2pcf.on("peerconnect", (peer) => { + console.log("Peer connect", peer.id, peer); + console.log(peer.client_id); + + if (stream) { + peer.addStream(stream); + } + peer.on("track", (track, stream) => { + console.log("got track", track); + const video = document.createElement("audio"); + video.id = `${peer.id}-audio`; + video.srcObject = stream; + video.setAttribute("playsinline", true); + document.getElementById("videos").appendChild(video); + video.play(); + }); + addPeerUi(peer.id); + }); + + p2pcf.on("peerclose", (peer) => { + console.log("Peer close", peer.id, peer); + removePeerUi(peer.id); + }); + + p2pcf.on("msg", (peer, data) => { + addMessage( + peer.id.substring(0, 5) + + ": " + + new TextDecoder("utf-8").decode(data) + ); + }); + + const go = () => { + document.getElementById("session-id").innerText = + p2pcf.sessionId.substring(0, 5) + "@" + p2pcf.roomId + ":"; + + // document.getElementById('send-button').addEventListener('click', () => { + // const box = document.getElementById('send-box'); + // addMessage(p2pcf.sessionId.substring(0, 5) + ': ' + box.value); + // p2pcf.broadcast(new TextEncoder().encode(box.value)); + // box.value = ''; + // }) + + document + .getElementById("audio-button") + .addEventListener("click", async () => { + stream = await navigator.mediaDevices.getUserMedia({ + audio: true + }); + + for (const peer of p2pcf.peers.values()) { + peer.addStream(stream); + } + }); + + p2pcf.start(); + }; + if ( + document.readyState === "complete" || + document.readyState === "interactive" + ) { + document + .getElementById("join-button") + .addEventListener("click", async () => { + window.addEventListener("DOMContentLoaded", audio, { + once: true + }); + // window.addEventListener('DOMContentLoaded', go, { once: true }) + }); + } else { + window.addEventListener("DOMContentLoaded", go, { once: true }); + } + + return <>; +}; + +export default Networking; diff --git a/blocks/environment/components/Player.js b/blocks/environment/components/Player.js new file mode 100644 index 0000000..f9c20b4 --- /dev/null +++ b/blocks/environment/components/Player.js @@ -0,0 +1,117 @@ +import { Raycaster, Vector3, ImageUtils } from "three"; +import { TextureLoader } from "three/src/loaders/TextureLoader"; +import { useXR, Interactive } from "@react-three/xr"; +import { useFrame, useLoader, useThree } from "@react-three/fiber"; +import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; +import Controls from "./Controls"; + +import { useCallback, useRef, useState, useEffect } from "react"; +import { + RigidBody, + MeshCollider, + useRapier, + usePhysics, + useRigidBody, + BallCollider, + CapsuleCollider, + RigidBodyApi +} from "@react-three/rapier"; +import defaultVRM from "../../../inc/avatars/3ov_default_avatar.vrm"; +import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from "@pixiv/three-vrm"; + +export default function Player(props) { + const { camera, scene } = useThree(); + const participantObject = scene.getObjectByName("playerOne"); + const [rapierId, setRapierId] = useState(""); + const [contactPoint, setContactPoint] = useState(""); + const [headPoint, setHeadPoint] = useState(""); + const rigidRef = useRef(); + + useFrame(() => { + if (participantObject) { + const posY = participantObject.parent.position.y; + // var posY = participantObject.userData.vrm.firstPerson.humanoid.humanBones.head.position.y; + // camera.position.setY( posY + 1.5 ); + camera.position.setY(posY + 1.5); + // participantObject.rotation.set([0, camera.rotation.y, 0]); + // participantObject.rotation.set(camera.rotation); + } + }); + + // Participant VRM. + const fallbackURL = threeObjectPlugin + defaultVRM; + const playerURL = userData.vrm ? userData.vrm : fallbackURL; + + const someSceneState = useLoader(GLTFLoader, playerURL, (loader) => { + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + if (someSceneState?.userData?.gltfExtensions?.VRM) { + const playerController = someSceneState.userData.vrm; + const loadedProfile = useLoader(TextureLoader, userData.profileImage); + playerController.scene.traverse((obj) => { + if (obj.name === "profile") { + const newMat = obj.material.clone(); + newMat.map = loadedProfile; + obj.material = newMat; + obj.material.map.needsUpdate = true; + } + }); + VRMUtils.rotateVRM0(playerController); + useEffect(() => { + setHeadPoint( + playerController.firstPerson.humanoid.humanBones.head.node + .position.y + ); + }, []); + playerController.firstPerson.humanoid.humanBones.head.node.scale.set([ + 0, 0, 0 + ]); + // const rotationVRM = playerController.scene.rotation.y; + // playerController.scene.rotation.set( 0, rotationVRM, 0 ); + // playerController.scene.scale.set( 1, 1, 1 ); + + return ( + <> + {playerController && ( + <> + { + setRapierId(target.colliderSet.map.data[1]); + setContactPoint(manifold.solverContactPoint(0)); + }} + // onCollisionExit={ () => { + // console.log('Collision at world position'); + // }} + > + + + + + + )} + + ); + } +} diff --git a/blocks/environment/components/TeleportTravel.js b/blocks/environment/components/TeleportTravel.js index 3c0b646..784173f 100644 --- a/blocks/environment/components/TeleportTravel.js +++ b/blocks/environment/components/TeleportTravel.js @@ -1,45 +1,39 @@ -import { Raycaster, Vector3 } from 'three'; -import { useXR, Interactive } from '@react-three/xr'; -import { useFrame } from '@react-three/fiber'; -import { useCallback, useRef, useState } from 'react'; +import { Raycaster, Vector3 } from "three"; +import { useXR, Interactive } from "@react-three/xr"; +import { useFrame } from "@react-three/fiber"; +import { useCallback, useRef, useState } from "react"; -export function TeleportIndicator( props ) { +export function TeleportIndicator(props) { return ( <> - - - - + + + + ); } -export default function TeleportTravel( props ) { +export default function TeleportTravel(props) { const { centerOnTeleport, Indicator = TeleportIndicator, - useNormal = true, + useNormal = true } = props; - const [ isHovered, setIsHovered ] = useState( false ); + const [isHovered, setIsHovered] = useState(false); const target = useRef(); const targetLoc = useRef(); - const ray = useRef( new Raycaster() ); + const ray = useRef(new Raycaster()); - const rayDir = useRef( { + const rayDir = useRef({ pos: new Vector3(), - dir: new Vector3(), - } ); + dir: new Vector3() + }); const { controllers, player } = useXR(); - useFrame( () => { + useFrame(() => { if ( isHovered && controllers.length > 0 && @@ -47,56 +41,54 @@ export default function TeleportTravel( props ) { target.current && targetLoc.current ) { - controllers[ 0 ].controller.getWorldDirection( rayDir.current.dir ); - controllers[ 0 ].controller.getWorldPosition( rayDir.current.pos ); - rayDir.current.dir.multiplyScalar( -1 ); - ray.current.set( rayDir.current.pos, rayDir.current.dir ); + controllers[0].controller.getWorldDirection(rayDir.current.dir); + controllers[0].controller.getWorldPosition(rayDir.current.pos); + rayDir.current.dir.multiplyScalar(-1); + ray.current.set(rayDir.current.pos, rayDir.current.dir); - const [ intersection ] = ray.current.intersectObject( - target.current - ); + const [intersection] = ray.current.intersectObject(target.current); - if ( intersection ) { - if ( useNormal ) { + if (intersection) { + if (useNormal) { const p = intersection.point; - targetLoc.current.position.set( 0, 0, 0 ); + targetLoc.current.position.set(0, 0, 0); const n = intersection.face.normal.clone(); - n.transformDirection( intersection.object.matrixWorld ); + n.transformDirection(intersection.object.matrixWorld); - targetLoc.current.lookAt( n ); + targetLoc.current.lookAt(n); targetLoc.current.rotateOnAxis( - new Vector3( 1, 0, 0 ), + new Vector3(1, 0, 0), Math.PI / 2 ); - targetLoc.current.position.copy( p ); + targetLoc.current.position.copy(p); } else { - targetLoc.current.position.copy( intersection.point ); + targetLoc.current.position.copy(intersection.point); } } } - } ); + }); - const click = useCallback( () => { - if ( isHovered ) { - player.position.copy( targetLoc.current.position ); + const click = useCallback(() => { + if (isHovered) { + player.position.copy(targetLoc.current.position); } - }, [ centerOnTeleport, isHovered, useNormal ] ); + }, [centerOnTeleport, isHovered, useNormal]); return ( <> - { isHovered && ( - + {isHovered && ( + - ) } + )} setIsHovered( true ) } - onBlur={ () => setIsHovered( false ) } + onSelect={click} + onHover={() => setIsHovered(true)} + onBlur={() => setIsHovered(false)} > - { props.children } + {props.children} ); diff --git a/blocks/environment/components/ThreeObjectEdit.js b/blocks/environment/components/ThreeObjectEdit.js index 2ae77f2..cc5a564 100644 --- a/blocks/environment/components/ThreeObjectEdit.js +++ b/blocks/environment/components/ThreeObjectEdit.js @@ -1,101 +1,1125 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import * as THREE from "three"; +import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; +import { Canvas, useLoader, useFrame, useThree } from "@react-three/fiber"; +import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; +import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; import { PerspectiveCamera, OrbitControls, useAnimations, -} from '@react-three/drei'; -import { VRMUtils, VRMLoaderPlugin } from '@pixiv/three-vrm' -import { GLTFAudioEmitterExtension } from 'three-omi'; - -function ThreeObject( props ) { - const [ url, set ] = useState( props.url ); - useEffect( () => { - setTimeout( () => set( props.url ), 2000 ); - }, [] ); - const [ listener ] = useState( () => new THREE.AudioListener() ); - - useThree( ( { camera } ) => { - camera.add( listener ); - } ); - - const gltf = useLoader( GLTFLoader, url, ( loader ) => { - loader.register( - ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) + Html, + TransformControls, + Stats, + Select, + Text +} from "@react-three/drei"; +import { VRMUtils, VRMLoaderPlugin } from "@pixiv/three-vrm"; +import { GLTFAudioEmitterExtension } from "three-omi"; +import { A11y } from "@react-three/a11y"; +import { Perf } from "r3f-perf"; +import EditControls from "./EditControls"; +import CustomComponent from "../../../../four-object-viewer/blocks/four-portal-block/components/CustomComponent"; +import { Resizable } from "re-resizable"; +import { useAspect } from "@react-three/drei"; + +function Markup(model) { + const htmlObj = useRef(); + return ( + <> + { + const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const scale = e?.target.worldScale; + rot.setFromQuaternion(e?.target.worldQuaternion); + wp.data + .dispatch("core/block-editor") + .updateBlockAttributes(model.htmlobjectId, { + positionX: e?.target.worldPosition.x, + positionY: e?.target.worldPosition.y, + positionZ: e?.target.worldPosition.z, + rotationX: rot.x, + rotationY: rot.y, + rotationZ: rot.z, + scaleX: scale.x, + scaleY: scale.y, + scaleZ: scale.z + }); + }} + > + + + + +
+ +
+
+
+ + ); +} + +function Sky(sky) { + const skyUrl = sky.src.skyUrl; + if (skyUrl) { + const texture_1 = useLoader(THREE.TextureLoader, skyUrl); + + return ( + + + + ); - loader.register( ( parser ) => { + } +} + +function Spawn(spawn) { + const spawnObj = useRef(); + const [isSelected, setIsSelected] = useState(); + const spawnBlockAttributes = wp.data + .select("core/block-editor") + .getBlockAttributes(spawn.spawnpointID); + const TransformController = ({ condition, wrap, children }) => + condition ? wrap(children) : children; + if (spawn) { + return ( + + ); + } +} + +function ImageObject(threeImage) { + const texture_2 = useLoader(THREE.TextureLoader, threeImage.url); + const imgObj = useRef(); + const [isSelected, setIsSelected] = useState(); + const threeImageBlockAttributes = wp.data + .select("core/block-editor") + .getBlockAttributes(threeImage.imageID); + + return ( + + ); +} + +function VideoObject(threeVideo) { + const clicked = true; + const [video] = useState(() => + Object.assign(document.createElement("video"), { + src: threeVideo.url, + crossOrigin: "Anonymous", + loop: true, + muted: true + }) + ); + const videoObj = useRef(); + const [isSelected, setIsSelected] = useState(); + const [threeVideoBlockAttributes, setThreeVideoBlockAttributes] = useState( + wp.data + .select("core/block-editor") + .getBlockAttributes(threeVideo.videoID) + ); + const TransformController = ({ condition, wrap, children }) => + condition ? wrap(children) : children; + + useEffect(() => void (clicked && video.play()), [video, clicked]); - return new VRMLoaderPlugin( parser ); - - } ); - - } ); + return ( + + ); +} - const animationList = props.animations ? props.animations.split( ',' ) : ''; +function ModelObject(model) { + const [url, set] = useState(model.url); + useEffect(() => { + setTimeout(() => set(model.url), 2000); + }, []); + const [listener] = useState(() => new THREE.AudioListener()); - useEffect( () => { - if ( animationList ) { - animationList.forEach( ( name ) => { - if ( Object.keys( actions ).includes( name ) ) { - actions[ name ].play(); + useThree(({ camera }) => { + camera.add(listener); + }); + const { camera } = useThree(); + + const gltf = useLoader(GLTFLoader, model.url, (loader) => { + loader.register( + (parser) => new GLTFAudioEmitterExtension(parser, listener) + ); + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + const { actions } = useAnimations(gltf.animations, gltf.scene); + + const animationList = model.animations ? model.animations.split(",") : ""; + useEffect(() => { + if (animationList) { + animationList.forEach((name) => { + if (Object.keys(actions).includes(name)) { + actions[name].play(); } - } ); + }); } - }, [] ); - - if(gltf?.userData?.gltfExtensions?.VRM){ - const vrm = gltf.userData.vrm; - vrm.scene.position.set( 0, props.positionY, 0 ); - VRMUtils.rotateVRM0( vrm ); - const rotationVRM = vrm.scene.rotation.y + parseFloat(props.rotationY); - vrm.scene.rotation.set( 0, rotationVRM, 0 ); - vrm.scene.scale.set( props.scale, props.scale, props.scale ); - return ; - } - gltf.scene.position.set( 0, props.positionY, 0 ); - gltf.scene.rotation.set( 0, props.rotationY, 0 ); - gltf.scene.scale.set( props.scale, props.scale, props.scale ); - return ; + }, []); + if (gltf?.userData?.gltfExtensions?.VRM) { + const vrm = gltf.userData.vrm; + vrm.scene.position.set( + model.positionX, + model.positionY, + model.positionZ + ); + VRMUtils.rotateVRM0(vrm); + const rotationVRM = vrm.scene.rotation.y + parseFloat(0); + vrm.scene.rotation.set(0, rotationVRM, 0); + vrm.scene.scale.set(1, 1, 1); + vrm.scene.scale.set(model.scaleX, model.scaleY, model.scaleZ); + return ( + // + + // + ); + } + gltf.scene.rotation.set(0, 0, 0); + const obj = useRef(); + const copyGltf = useMemo(() => gltf.scene.clone(), [gltf.scene]); + const [isSelected, setIsSelected] = useState(); + const [modelBlockAttributes, setModelBlockAttributes] = useState( + wp.data.select("core/block-editor").getBlockAttributes(model.modelId) + ); + const TransformController = ({ condition, wrap, children }) => + condition ? wrap(children) : children; + + return ( + <> + + + ); } -export default function ThreeObjectEdit( props ) { +function PortalObject(model) { + const [isSelected, setIsSelected] = useState(); + const [portalBlockAttributes, setPortalBlockAttributes] = useState( + wp.data.select("core/block-editor").getBlockAttributes(model.portalID) + ); + const TransformController = ({ condition, wrap, children }) => + condition ? wrap(children) : children; + + const [url, set] = useState(model.url); + useEffect(() => { + setTimeout(() => set(model.url), 2000); + }, []); + const [listener] = useState(() => new THREE.AudioListener()); + + useThree(({ camera }) => { + camera.add(listener); + }); + const { camera } = useThree(); + + const gltf = useLoader(GLTFLoader, model.url, (loader) => { + loader.register( + (parser) => new GLTFAudioEmitterExtension(parser, listener) + ); + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + const { actions } = useAnimations(gltf.animations, gltf.scene); + + const animationList = model.animations ? model.animations.split(",") : ""; + useEffect(() => { + if (animationList) { + animationList.forEach((name) => { + if (Object.keys(actions).includes(name)) { + actions[name].play(); + } + }); + } + }, []); + if (gltf?.userData?.gltfExtensions?.VRM) { + const vrm = gltf.userData.vrm; + vrm.scene.position.set( + model.positionX, + model.positionY, + model.positionZ + ); + VRMUtils.rotateVRM0(vrm); + const rotationVRM = vrm.scene.rotation.y + parseFloat(0); + vrm.scene.rotation.set(0, rotationVRM, 0); + vrm.scene.scale.set(1, 1, 1); + vrm.scene.scale.set(model.scaleX, model.scaleY, model.scaleZ); + return ( + // + + // + ); + } + gltf.scene.rotation.set(0, 0, 0); + const obj = useRef(); + const copyGltf = useMemo(() => gltf.scene.clone(), [gltf.scene]); + return ( <> - { + e.length !== 0 ? setIsSelected(true) : setIsSelected(false); + }} + filter={(items) => items} > - - - ( + { + const rot = new THREE.Euler(0, 0, 0, "XYZ"); + const scale = e?.target.worldScale; + rot.setFromQuaternion( + e?.target.worldQuaternion + ); + wp.data + .dispatch("core/block-editor") + .updateBlockAttributes(model.portalID, { + positionX: e?.target.worldPosition.x, + positionY: e?.target.worldPosition.y, + positionZ: e?.target.worldPosition.z, + rotationX: rot.x, + rotationY: rot.y, + rotationZ: rot.z, + scaleX: scale.x, + scaleY: scale.y, + scaleZ: scale.z + }); + setPortalBlockAttributes( + wp.data + .select("core/block-editor") + .getBlockAttributes(model.portalID) + ); + + // if (model.shouldFocus) { + // setFocusPosition([ + // e?.target.worldPosition.x, + // e?.target.worldPosition.y, + // e?.target.worldPosition.z + // ]); + // camera.position.set(model.focusPosition); + // } + }} + > + {children} + + )} + > + {portalBlockAttributes && ( + + + {portalBlockAttributes.label + + ": " + + portalBlockAttributes.destinationUrl} + + + + )} + + + + ); +} + +function ThreeObject(props) { + let skyobject; + let skyobjectId; + + let spawnpoint; + let spawnpointID; + + let modelobject; + let modelID; + const editorModelsToAdd = []; + + let portalobject; + let portalID; + const editorPortalsToAdd = []; + + let imageID; + const imageElementsToAdd = []; + let imageobject; + + let videoID; + let videoobject; + const videoElementsToAdd = []; + + const editorHtmlToAdd = []; + let htmlobject; + let htmlobjectId; + + const currentBlocks = wp.data.select("core/block-editor").getBlocks(); + if (currentBlocks) { + currentBlocks.forEach((block) => { + if (block.name === "three-object-viewer/environment") { + const currentInnerBlocks = block.innerBlocks; + if (currentInnerBlocks) { + currentInnerBlocks.forEach((innerBlock) => { + if ( + innerBlock.name === "three-object-viewer/sky-block" + ) { + skyobject = innerBlock.attributes; + skyobjectId = innerBlock.clientId; + } + if ( + innerBlock.name === + "three-object-viewer/spawn-point-block" + ) { + spawnpoint = innerBlock.attributes; + spawnpointID = innerBlock.clientId; + } + if ( + innerBlock.name === + "three-object-viewer/model-block" + ) { + modelobject = innerBlock.attributes; + modelID = innerBlock.clientId; + const something = [{ modelobject, modelID }]; + editorModelsToAdd.push({ modelobject, modelID }); + } + if ( + innerBlock.name === + "three-object-viewer/three-image-block" + ) { + imageobject = innerBlock.attributes; + imageID = innerBlock.clientId; + const something = [{ imageobject, imageID }]; + imageElementsToAdd.push({ imageobject, imageID }); + } + if ( + innerBlock.name === + "three-object-viewer/three-video-block" + ) { + videoobject = innerBlock.attributes; + videoID = innerBlock.clientId; + const something = [{ videoobject, videoID }]; + videoElementsToAdd.push({ videoobject, videoID }); + } + if ( + innerBlock.name === + "three-object-viewer/three-portal-block" + ) { + portalobject = innerBlock.attributes; + portalID = innerBlock.clientId; + const something = [{ portalobject, portalID }]; + editorPortalsToAdd.push({ portalobject, portalID }); + } + if ( + innerBlock.name === + "three-object-viewer/three-html-block" + ) { + htmlobject = innerBlock.attributes; + htmlobjectId = innerBlock.clientId; + editorHtmlToAdd.push({ htmlobject, htmlobjectId }); + } + }); + } + } + }); + } + + const [url, set] = useState(props.url); + useEffect(() => { + setTimeout(() => set(props.url), 2000); + }, []); + const [listener] = useState(() => new THREE.AudioListener()); + + useThree(({ camera }) => { + camera.add(listener); + }); + + const gltf = useLoader(GLTFLoader, url, (loader) => { + // const dracoLoader = new DRACOLoader(); + // dracoLoader.setDecoderPath('https://www.gstatic.com/draco/v1/decoders/'); + // loader.setDRACOLoader(dracoLoader); + + loader.register( + (parser) => new GLTFAudioEmitterExtension(parser, listener) + ); + loader.register((parser) => { + return new VRMLoaderPlugin(parser); + }); + }); + + const { actions } = useAnimations(gltf.animations, gltf.scene); + + const animationList = props.animations ? props.animations.split(",") : ""; + + useEffect(() => { + if (animationList) { + animationList.forEach((name) => { + if (Object.keys(actions).includes(name)) { + actions[name].play(); + } + }); + } + }, []); + + if (gltf?.userData?.gltfExtensions?.VRM) { + const vrm = gltf.userData.vrm; + vrm.scene.position.set(0, props.positionY, 0); + VRMUtils.rotateVRM0(vrm); + const rotationVRM = vrm.scene.rotation.y + parseFloat(props.rotationY); + vrm.scene.rotation.set(0, rotationVRM, 0); + vrm.scene.scale.set(props.scale, props.scale, props.scale); + return ; + } + gltf.scene.position.set(0, props.positionY, 0); + gltf.scene.rotation.set(0, props.rotationY, 0); + gltf.scene.scale.set(props.scale, props.scale, props.scale); + // const copyGltf = useMemo(() => gltf.scene.clone(), [gltf.scene]) + + return ( + <> + {skyobject && } + {spawnpoint && ( + + )} + {Object.values(editorModelsToAdd).map((model, index) => { + if (model.modelobject.threeObjectUrl) { + return ( + + ); + } + })} + {Object.values(editorPortalsToAdd).map((model, index) => { + if (model.portalobject.threeObjectUrl) { + return ( + + ); + } + })} + {Object.values(imageElementsToAdd).map((model, index) => { + if (model.imageobject.imageUrl) { + return ( + + ); + } + })} + {Object.values(videoElementsToAdd).map((model, index) => { + if (model.videoobject.videoUrl) { + return ( + + ); + } + })} + {Object.values(editorHtmlToAdd).map((markup, index) => { + return ( + + ); + })} + {/* {modelobject && props.transformMode && modelobject.threeObjectUrl && + - { props.url && ( - - + } */} + + + ); +} + +export default function ThreeObjectEdit(props) { + const [transformMode, setTransformMode] = useState("translate"); + const [focusPosition, setFocusPosition] = useState([0, 0, 0]); + const [shouldFocus, setShouldFocus] = useState(false); + const onKeyUp = function (event) { + switch (event.code) { + case "KeyT": + setTransformMode("translate"); + break; + case "KeyR": + setTransformMode("rotate"); + break; + case "KeyS": + setTransformMode("scale"); + break; + case "KeyF": + setShouldFocus(true); + break; + default: + } + }; + document.addEventListener("keyup", onKeyUp); + + return ( + <> + + + + + + + {props.url && ( + + {/* */} + - ) } - - + )} + + + ); } diff --git a/blocks/environment/components/p2pcf/p2pcf.js b/blocks/environment/components/p2pcf/p2pcf.js new file mode 100644 index 0000000..1266ae5 --- /dev/null +++ b/blocks/environment/components/p2pcf/p2pcf.js @@ -0,0 +1,1250 @@ +/** + * Peer 2 Peer WebRTC connections with Cloudflare Workers as signalling server + * Copyright Greg Fodor + * Licensed under MIT + */ + +/* global crypto */ + +import getBrowserRTC from "get-browser-rtc"; +import EventEmitter from "events"; +import Peer from "tiny-simple-peer"; +import { + encode as arrayBufferToBase64, + decode as base64ToArrayBuffer +} from "base64-arraybuffer"; +import { hexToBytes } from "convert-hex"; +import arrayBufferToHex from "array-buffer-to-hex"; + +// Based on Chrome +const MAX_MESSAGE_LENGTH_BYTES = 16000; + +const CHUNK_HEADER_LENGTH_BYTES = 12; // 2 magic, 2 msg id, 2 chunk id, 2 for done bit, 4 for length +const CHUNK_MAGIC_WORD = 8121; +const CHUNK_MAX_LENGTH_BYTES = + MAX_MESSAGE_LENGTH_BYTES - CHUNK_HEADER_LENGTH_BYTES; + +// Signalling messages have a 64-bit unique header +const SIGNAL_MESSAGE_HEADER_WORDS = [0x82ab, 0x81cd, 0x1295, 0xa1cb]; + +const CANDIDATE_TYPES = { + host: 0, + srflx: 1, + relay: 2 +}; + +const CANDIDATE_TCP_TYPES = { + active: 0, + passive: 1, + so: 2 +}; + +const CANDIDATE_IDX = { + TYPE: 0, + PROTOCOL: 1, + IP: 2, + PORT: 3, + RELATED_IP: 4, + RELATED_PORT: 5, + TCP_TYPE: 6 +}; + +const DEFAULT_STUN_ICE = [ + { urls: "stun:stun1.l.google.com:19302" }, + { urls: "stun:global.stun.twilio.com:3478" } +]; + +const DEFAULT_TURN_ICE = [ + { + urls: "turn:openrelay.metered.ca:80", + username: "openrelayproject", + credential: "openrelayproject" + }, + { + urls: "turn:openrelay.metered.ca:443", + username: "openrelayproject", + credential: "openrelayproject" + }, + { + urls: "turn:openrelay.metered.ca:443?transport=tcp", + username: "openrelayproject", + credential: "openrelayproject" + } +]; + +const randomstring = (len) => { + const bytes = crypto.getRandomValues(new Uint8Array(len)); + const str = bytes.reduce((accum, v) => accum + String.fromCharCode(v), ""); + return btoa(str).replaceAll("=", ""); +}; + +const textDecoder = new TextDecoder("utf-8"); +const textEncoder = new TextEncoder(); + +const arrToText = textDecoder.decode.bind(textDecoder); +const textToArr = textEncoder.encode.bind(textEncoder); + +const removeInPlace = (a, condition) => { + let i = 0; + let j = 0; + + while (i < a.length) { + const val = a[i]; + if (!condition(val, i, a)) a[j++] = val; + i++; + } + + a.length = j; + return a; +}; + +const ua = window.navigator.userAgent; +const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i); +const webkit = !!ua.match(/WebKit/i); +const iOSSafari = !!(iOS && webkit && !ua.match(/CriOS/i)); +const isFirefox = !!( + navigator?.userAgent.toLowerCase().indexOf("firefox") > -1 +); + +const hexToBase64 = (hex) => arrayBufferToBase64(hexToBytes(hex)); +const base64ToHex = (b64) => arrayBufferToHex(base64ToArrayBuffer(b64)); + +function createSdp(isOffer, iceUFrag, icePwd, dtlsFingerprintBase64) { + const dtlsHex = base64ToHex(dtlsFingerprintBase64); + let dtlsFingerprint = ""; + + for (let i = 0; i < dtlsHex.length; i += 2) { + dtlsFingerprint += `${dtlsHex[i]}${dtlsHex[i + 1]}${ + i === dtlsHex.length - 2 ? "" : ":" + }`.toUpperCase(); + } + + const sdp = [ + "v=0", + "o=- 5498186869896684180 2 IN IP4 127.0.0.1", + "s=-", + "t=0 0", + "a=msid-semantic: WMS", + "m=application 9 UDP/DTLS/SCTP webrtc-datachannel", + "c=IN IP4 0.0.0.0", + "a=mid:0", + "a=sctp-port:5000" + ]; + + if (isOffer) { + sdp.push("a=setup:actpass"); + } else { + sdp.push("a=setup:active"); + } + + sdp.push(`a=ice-ufrag:${iceUFrag}`); + sdp.push(`a=ice-pwd:${icePwd}`); + sdp.push(`a=fingerprint:sha-256 ${dtlsFingerprint}`); + + return sdp.join("\r\n") + "\r\n"; +} + +// parseCandidate from https://github.com/fippo/sdp +const parseCandidate = (line) => { + let parts; + + // Parse both variants. + if (line.indexOf("a=candidate:") === 0) { + parts = line.substring(12).split(" "); + } else { + parts = line.substring(10).split(" "); + } + + const candidate = [ + CANDIDATE_TYPES[parts[7]], // type + parts[2].toLowerCase() === "udp" ? 0 : 1, // protocol + parts[4], // ip + parseInt(parts[5], 10) // port + ]; + + for (let i = 8; i < parts.length; i += 2) { + switch (parts[i]) { + case "raddr": + while (candidate.length < 5) candidate.push(null); + candidate[4] = parts[i + 1]; + break; + case "rport": + while (candidate.length < 6) candidate.push(null); + candidate[5] = parseInt(parts[i + 1], 10); + break; + case "tcptype": + while (candidate.length < 7) candidate.push(null); + candidate[6] = CANDIDATE_TCP_TYPES[parts[i + 1]]; + break; + default: + // Unknown extensions are silently ignored. + break; + } + } + + while (candidate.length < 8) candidate.push(null); + candidate[7] = parseInt(parts[3], 10); // Priority last + + return candidate; +}; + +export default class P2PCF extends EventEmitter { + constructor(clientId = "", roomId = "", options = {}) { + super(); + + if (!clientId || clientId.length < 4) { + throw new Error("Client ID must be at least four characters"); + } + + if (!roomId || roomId.length < 4) { + throw new Error("Room ID must be at least four characters"); + } + + this._step = this._step.bind(this); + + this.peers = new Map(); + this.msgChunks = new Map(); + this.connectedSessions = []; + this.clientId = clientId; + this.roomId = roomId; + this.sessionId = randomstring(20); + this.packages = []; + this.dataTimestamp = null; + this.lastPackages = null; + this.lastProcessedReceivedDataTimestamps = new Map(); + this.packageReceivedFromPeers = new Set(); + this.startedAtTimestamp = null; + this.peerOptions = options.rtcPeerConnectionOptions || {}; + this.peerProprietaryConstraints = + options.rtcPeerConnectionProprietaryConstraints || {}; + this.peerSdpTransform = options.sdpTransform || ((sdp) => sdp); + + this.workerUrl = + options.workerUrl || "https://p2pcf.minddrop.workers.dev"; + + if (this.workerUrl.endsWith("/")) { + this.workerUrl = this.workerUrl.substring( + 0, + this.workerUrl.length - 1 + ); + } + + this.stunIceServers = options.stunIceServers || DEFAULT_STUN_ICE; + this.turnIceServers = options.turnIceServers || DEFAULT_TURN_ICE; + this.networkChangePollIntervalMs = + options.networkChangePollIntervalMs || 15000; + + this.stateExpirationIntervalMs = + options.stateExpirationIntervalMs || 2 * 60 * 1000; + this.stateHeartbeatWindowMs = options.stateHeartbeatWindowMs || 30000; + + this.fastPollingDurationMs = options.fastPollingDurationMs || 10000; + this.fastPollingRateMs = options.fastPollingRateMs || 750; + this.slowPollingRateMs = options.slowPollingRateMs || 1500; + + this.wrtc = getBrowserRTC(); + this.dtlsCert = null; + this.udpEnabled = null; + this.isSymmetric = null; + this.dtlsFingerprint = null; + this.reflexiveIps = new Set(); + + // step + this.isSending = false; + this.finished = false; + this.nextStepTime = -1; + this.deleteKey = null; + this.sentFirstPoll = false; + this.stopFastPollingAt = -1; + + // ContextID is maintained across page refreshes + if (!window.history.state?._p2pcfContextId) { + window.history.replaceState( + { + ...window.history.state, + _p2pcfContextId: randomstring(20) + }, + window.location.href + ); + } + + this.contextId = window.history.state._p2pcfContextId; + } + + async _init() { + if (this.dtlsCert === null) { + this.dtlsCert = + await this.wrtc.RTCPeerConnection.generateCertificate({ + name: "ECDSA", + namedCurve: "P-256" + }); + } + } + + async _step(finish = false) { + const { + sessionId, + clientId, + roomId, + contextId, + stateExpirationIntervalMs, + stateHeartbeatWindowMs, + packages, + fastPollingDurationMs, + fastPollingRateMs, + slowPollingRateMs + } = this; + + const now = Date.now(); + + if (finish) { + if (this.finished) return; + if (!this.deleteKey) return; + this.finished = true; + } else { + if (this.nextStepTime > now) return; + if (this.isSending) return; + if (this.reflexiveIps.length === 0) return; + } + + this.isSending = true; + + try { + const localDtlsFingerprintBase64 = hexToBase64( + this.dtlsFingerprint.replaceAll(":", "") + ); + + const localPeerInfo = [ + sessionId, + clientId, + this.isSymmetric, + localDtlsFingerprintBase64, + this.startedAtTimestamp, + [...this.reflexiveIps] + ]; + + const payload = { r: roomId, k: contextId }; + + if (finish) { + payload.dk = this.deleteKey; + } + + const expired = + this.dataTimestamp === null || + now - this.dataTimestamp >= + stateExpirationIntervalMs - stateHeartbeatWindowMs; + + const packagesChanged = + this.lastPackages !== JSON.stringify(packages); + let includePackages = false; + + if (expired || packagesChanged || finish) { + // This will force a write + this.dataTimestamp = now; + + // Compact packages, expire any of them sent more than a minute ago. + // (ICE will timeout by then, even if other latency fails us.) + removeInPlace(packages, (pkg) => { + const sentAt = pkg[pkg.length - 2]; + return now - sentAt > 60 * 1000; + }); + + includePackages = true; + } + + if (finish) { + includePackages = false; + } + + // The first poll should just be a read, no writes, to build up packages before we do a write + // to reduce worker I/O. So don't include the data + packages on the first request. + if (this.sentFirstPoll) { + payload.d = localPeerInfo; + payload.t = this.dataTimestamp; + payload.x = this.stateExpirationIntervalMs; + + if (includePackages) { + payload.p = packages; + this.lastPackages = JSON.stringify(packages); + } + } + + const body = JSON.stringify(payload); + const headers = { "Content-Type": "application/json " }; + let keepalive = false; + + if (finish) { + headers["X-Worker-Method"] = "DELETE"; + keepalive = true; + } + + const res = await fetch(this.workerUrl, { + method: "POST", + headers, + body, + keepalive + }); + + const { + ps: remotePeerDatas, + pk: remotePackages, + dk + } = await res.json(); + + if (dk) { + this.deleteKey = dk; + } + + if (finish) return; + + // Slight optimization: if the peers are empty on the first poll, immediately publish data to reduce + // delay before first peers show up. + if (remotePeerDatas.length === 0 && !this.sentFirstPoll) { + payload.d = localPeerInfo; + payload.t = this.dataTimestamp; + payload.x = this.stateExpirationIntervalMs; + payload.p = packages; + this.lastPackages = JSON.stringify(packages); + + const res = await fetch(this.workerUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload) + }); + + const { dk } = await res.json(); + + if (dk) { + this.deleteKey = dk; + } + } + + this.sentFirstPoll = true; + + const previousPeerSessionIds = [...this.peers.keys()]; + + this._handleWorkerResponse( + localPeerInfo, + localDtlsFingerprintBase64, + packages, + remotePeerDatas, + remotePackages + ); + + const activeSessionIds = remotePeerDatas.map((p) => p[0]); + + const peersChanged = + previousPeerSessionIds.length !== activeSessionIds.length || + activeSessionIds.find( + (c) => !previousPeerSessionIds.includes(c) + ) || + previousPeerSessionIds.find( + (c) => !activeSessionIds.includes(c) + ); + + // Rate limit requests when room is empty, or look for new joins + // Go faster when things are changing to avoid ICE timeouts + if (peersChanged) { + this.stopFastPollingAt = now + fastPollingDurationMs; + } + + if (now < this.stopFastPollingAt) { + this.nextStepTime = now + fastPollingRateMs; + } else { + this.nextStepTime = now + slowPollingRateMs; + } + } catch (e) { + console.error(e); + this.nextStepTime = now + slowPollingRateMs; + } finally { + this.isSending = false; + } + } + + _handleWorkerResponse( + localPeerData, + localDtlsFingerprintBase64, + localPackages, + remotePeerDatas, + remotePackages + ) { + const localStartedAtTimestamp = this.startedAtTimestamp; + + const { + dtlsCert: localDtlsCert, + peers, + lastProcessedReceivedDataTimestamps, + packageReceivedFromPeers, + stunIceServers, + turnIceServers + } = this; + const [localSessionId, , localSymmetric] = localPeerData; + + const now = Date.now(); + + for (const remotePeerData of remotePeerDatas) { + const [ + remoteSessionId, + remoteClientId, + remoteSymmetric, + remoteDtlsFingerprintBase64, + remoteStartedAtTimestamp, + remoteReflexiveIps, + remoteDataTimestamp + ] = remotePeerData; + + // Don't process the same messages twice. This covers disconnect cases where stale data re-creates a peer too early. + if ( + lastProcessedReceivedDataTimestamps.get(remoteSessionId) === + remoteDataTimestamp + ) { + continue; + } + + // Peer A is: + // - if both not symmetric or both symmetric, whoever has the most recent data is peer A, since we want Peer B created faster, + // and latency will be lowest with older data. + // - if one is and one isn't, the non symmetric one is the only one who has valid candidates, so the symmetric one is peer A + const isPeerA = + localSymmetric === remoteSymmetric + ? localStartedAtTimestamp === remoteStartedAtTimestamp + ? localSessionId > remoteSessionId + : localStartedAtTimestamp > remoteStartedAtTimestamp + : localSymmetric; + + // If either side is symmetric, use TURN and hope we avoid connecting via relays + // We can't just use TURN if both sides are symmetric because one side might be port restricted and hence won't connect without a relay. + const iceServers = + localSymmetric || remoteSymmetric + ? turnIceServers + : stunIceServers; + + // Firefox answer side is very aggressive with ICE timeouts, so always delay answer set until second candidates received. + const delaySetRemoteUntilReceiveCandidates = isFirefox; + const remotePackage = remotePackages.find( + (p) => p[1] === remoteSessionId + ); + + const peerOptions = { ...this.peerOptions, iceServers }; + + if (localDtlsCert) { + peerOptions.certificates = [localDtlsCert]; + } + + if (isPeerA) { + if (peers.has(remoteSessionId)) continue; + if (!remotePackage) continue; + + lastProcessedReceivedDataTimestamps.set( + remoteSessionId, + remoteDataTimestamp + ); + + // If we already added the candidates from B, skip. This check is not strictly necessary given the peer will exist. + if (packageReceivedFromPeers.has(remoteSessionId)) continue; + packageReceivedFromPeers.add(remoteSessionId); + + // - I create PC + // - I create an answer SDP, and munge the ufrag + // - Set local description with answer + // - Set remote description via the received sdp + // - Add the ice candidates + + const [ + , + , + remoteIceUFrag, + remoteIcePwd, + remoteDtlsFingerprintBase64, + localIceUFrag, + localIcePwd, + , + remoteCandidates + ] = remotePackage; + + const peer = new Peer({ + config: peerOptions, + initiator: false, + iceCompleteTimeout: 3000, + proprietaryConstraints: this.peerProprietaryConstraints, + sdpTransform: (sdp) => { + const lines = []; + + for (const l of sdp.split("\r\n")) { + if (l.startsWith("a=ice-ufrag")) { + lines.push(`a=ice-ufrag:${localIceUFrag}`); + } else if (l.startsWith("a=ice-pwd")) { + lines.push(`a=ice-pwd:${localIcePwd}`); + } else { + lines.push(l); + } + } + + return this.peerSdpTransform(lines.join("\r\n")); + } + }); + + peer.id = remoteSessionId; + peer.client_id = remoteClientId; + + this._wireUpCommonPeerEvents(peer); + + peers.set(peer.id, peer); + + // Special case if both behind sym NAT or other hole punching isn't working: peer A needs to send its candidates as well. + const pkg = [ + remoteSessionId, + localSessionId, + /* lfrag */ null, + /* lpwd */ null, + /* ldtls */ null, + /* remote ufrag */ null, + /* remote Pwd */ null, + now, + [] + ]; + + const pkgCandidates = pkg[pkg.length - 1]; + + const initialCandidateSignalling = (e) => { + if (!e.candidate?.candidate) return; + pkgCandidates.push(e.candidate.candidate); + }; + + peer.on("signal", initialCandidateSignalling); + + const finishIce = () => { + peer.removeListener("signal", initialCandidateSignalling); + if (localPackages.includes(pkg)) return; + if (pkgCandidates.length === 0) return; + + localPackages.push(pkg); + }; + + peer.once("_iceComplete", finishIce); + + const remoteSdp = createSdp( + true, + remoteIceUFrag, + remoteIcePwd, + remoteDtlsFingerprintBase64 + ); + + for (const candidate of remoteCandidates) { + peer.signal({ candidate: { candidate, sdpMLineIndex: 0 } }); + } + + peer.signal({ type: "offer", sdp: remoteSdp }); + } else { + // I am peer B, I need to create a peer first if none exists, and send a package. + // - Create PC + // - Create offer + // - Set local description as-is + // - Generate ufrag + pwd + // - Generate remote SDP using the dtls fingerprint for A, and my generated ufrag + pwd + // - Add an srflx candidate for each of the reflexive IPs for A (on a random port) to hole punch + // - Set remote description + // so peer reflexive candidates for it show up. + // - Let trickle run, then once trickle finishes send a package for A to pick up = [my session id, my offer sdp, generated ufrag/pwd, dtls fingerprint, ice candidates] + // - keep the icecandidate listener active, and add the pfrlx candidates when they arrive (but don't send another package) + if (!peers.has(remoteSessionId)) { + lastProcessedReceivedDataTimestamps.set( + remoteSessionId, + remoteDataTimestamp + ); + + const remoteUfrag = randomstring(12); + const remotePwd = randomstring(32); + const peer = new Peer({ + config: peerOptions, + proprietaryConstraints: + this.rtcPeerConnectionProprietaryConstraints, + iceCompleteTimeout: 3000, + initiator: true, + sdpTransform: this.peerSdpTransform + }); + + peer.id = remoteSessionId; + peer.client_id = remoteClientId; + + this._wireUpCommonPeerEvents(peer); + + peers.set(peer.id, peer); + + // This is the 'package' sent to peer A that it needs to start ICE + const pkg = [ + remoteSessionId, + localSessionId, + /* lfrag */ null, + /* lpwd */ null, + /* ldtls */ null, + remoteUfrag, + remotePwd, + now, + [] + ]; + + const pkgCandidates = pkg[pkg.length - 1]; + + const initialCandidateSignalling = (e) => { + // Push package onto the given package list, so it will be sent in next polling step. + if (!e.candidate?.candidate) return; + pkgCandidates.push(e.candidate.candidate); + }; + + peer.on("signal", initialCandidateSignalling); + + const finishIce = () => { + peer.removeListener( + "signal", + initialCandidateSignalling + ); + + if (localPackages.includes(pkg)) return; + if (pkgCandidates.length === 0) return; + + localPackages.push(pkg); + }; + + peer.once("_iceComplete", finishIce); + + const enqueuePackageFromOffer = (e) => { + if (e.type !== "offer") return; + peer.removeListener("signal", enqueuePackageFromOffer); + + for (const l of e.sdp.split("\r\n")) { + switch (l.split(":")[0]) { + case "a=ice-ufrag": + pkg[2] = l.substring(12); + break; + case "a=ice-pwd": + pkg[3] = l.substring(10); + break; + case "a=fingerprint": + pkg[4] = hexToBase64( + l.substring(22).replaceAll(":", "") + ); + break; + } + } + + // Peer A posted its reflexive IPs to try to speed up hole punching by B. + let remoteSdp = createSdp( + false, + remoteUfrag, + remotePwd, + remoteDtlsFingerprintBase64 + ); + + for (let i = 0; i < remoteReflexiveIps.length; i++) { + remoteSdp += `a=candidate:0 1 udp ${i + 1} ${ + remoteReflexiveIps[i] + } 30000 typ srflx\r\n`; + } + + if (!delaySetRemoteUntilReceiveCandidates) { + peer.signal({ type: "answer", sdp: remoteSdp }); + } else { + peer._pendingRemoteSdp = remoteSdp; + } + }; + + peer.once("signal", enqueuePackageFromOffer); + } + + if (!remotePackage) continue; + + // Peer B will also receive candidates in the case where hole punch fails. + // If we already added the candidates from A, skip + const [, , , , , , , , remoteCandidates] = remotePackage; + if (packageReceivedFromPeers.has(remoteSessionId)) continue; + if (!peers.has(remoteSessionId)) continue; + + const peer = peers.get(remoteSessionId); + + if ( + delaySetRemoteUntilReceiveCandidates && + !peer._pc.remoteDescription && + peer._pendingRemoteSdp + ) { + if (!peer.connected) { + for (const candidate of remoteCandidates) { + peer.signal({ + candidate: { candidate, sdpMLineIndex: 0 } + }); + } + } + + peer.signal({ + type: "answer", + sdp: peer._pendingRemoteSdp + }); + delete peer._pendingRemoteSdp; + packageReceivedFromPeers.add(remoteSessionId); + } + + if ( + !delaySetRemoteUntilReceiveCandidates && + peer._pc.remoteDescription && + remoteCandidates.length > 0 + ) { + if (!peer.connected) { + for (const candidate of remoteCandidates) { + peer.signal({ + candidate: { candidate, sdpMLineIndex: 0 } + }); + } + } + + packageReceivedFromPeers.add(remoteSessionId); + } + } + } + + const remoteSessionIds = remotePeerDatas.map((p) => p[0]); + + // Remove all peers no longer in the peer list. + // TODO deal with simple peer + for (const [sessionId, peer] of peers.entries()) { + if (remoteSessionIds.includes(sessionId)) continue; + this._removePeer(peer, true); + } + } + + /** + * Connect to network and start discovering peers + */ + async start() { + this.startedAtTimestamp = Date.now(); + await this._init(); + + const [udpEnabled, isSymmetric, reflexiveIps, dtlsFingerprint] = + await this._getNetworkSettings(this.dtlsCert); + + if (this.finished) return; + + this.udpEnabled = udpEnabled; + this.isSymmetric = isSymmetric; + this.reflexiveIps = reflexiveIps; + this.dtlsFingerprint = dtlsFingerprint; + + this.networkSettingsInterval = setInterval(async () => { + const [ + newUdpEnabled, + newIsSymmetric, + newReflexiveIps, + newDtlsFingerprint + ] = await this._getNetworkSettings(this.dtlsCert); + + if ( + newUdpEnabled !== this.udpEnabled || + newIsSymmetric !== this.isSymmetric || + newDtlsFingerprint !== this.dtlsFingerprint || + !![...newReflexiveIps].find( + (ip) => ![...this.reflexiveIps].find((ip2) => ip === ip2) + ) || + !![...reflexiveIps].find( + (ip) => ![...newReflexiveIps].find((ip2) => ip === ip2) + ) + ) { + // Network changed, force pushing new data + this.dataTimestamp = null; + } + + this.udpEnabled = newUdpEnabled; + this.isSymmetric = newIsSymmetric; + this.reflexiveIps = newReflexiveIps; + this.dtlsFingerprint = newDtlsFingerprint; + }, this.networkChangePollIntervalMs); + + this._step = this._step.bind(this); + this.stepInterval = setInterval(this._step, 500); + this.destroyOnUnload = () => this.destroy(); + + for (const ev of iOSSafari + ? ["pagehide"] + : ["beforeunload", "unload"]) { + window.addEventListener(ev, this.destroyOnUnload); + } + } + + _removePeer(peer, destroy = false) { + const { packageReceivedFromPeers, packages, peers } = this; + if (!peers.has(peer.id)) return; + + removeInPlace(packages, (pkg) => pkg[0] === peer.id); + packageReceivedFromPeers.delete(peer.id); + + peers.delete(peer.id); + + if (destroy) { + peer.destroy(); + } + + this.emit("peerclose", peer); + } + + /** + * Send a msg and get response for it + * + * @param Peer peer simple-peer object to send msg to + * @param string msg Message to send + * @param integer msgID ID of message if it's a response to a previous message + * @param peer + * @param msg + */ + send(peer, msg) { + return new Promise((resolve, reject) => { + // if leading byte is zero + // next two bytes is message id, then remaining bytes + // otherwise its just raw + let dataArrBuffer = null; + + let messageId = null; + + if (msg instanceof ArrayBuffer) { + dataArrBuffer = msg; + } else if (msg instanceof Uint8Array) { + if (msg.buffer.byteLength === msg.length) { + dataArrBuffer = msg.buffer; + } else { + dataArrBuffer = msg.buffer.slice( + msg.byteOffset, + msg.byteOffset + msg.byteLength + ); + } + } else { + throw new Error("Unsupported send data type", msg); + } + + // If the magic word happens to be the beginning of this message, chunk it + if ( + dataArrBuffer.byteLength > MAX_MESSAGE_LENGTH_BYTES || + new Uint16Array(dataArrBuffer, 0, 1) === CHUNK_MAGIC_WORD + ) { + messageId = Math.floor(Math.random() * 256 * 128); + } + + if (messageId !== null) { + for ( + let offset = 0, chunkId = 0; + offset < dataArrBuffer.byteLength; + offset += CHUNK_MAX_LENGTH_BYTES, chunkId++ + ) { + const chunkSize = Math.min( + CHUNK_MAX_LENGTH_BYTES, + dataArrBuffer.byteLength - offset + ); + let bufSize = CHUNK_HEADER_LENGTH_BYTES + chunkSize; + + while (bufSize % 4 !== 0) { + bufSize++; + } + + const buf = new ArrayBuffer(bufSize); + new Uint8Array(buf, CHUNK_HEADER_LENGTH_BYTES).set( + new Uint8Array(dataArrBuffer, offset, chunkSize) + ); + const u16 = new Uint16Array(buf); + const u32 = new Uint32Array(buf); + + u16[0] = CHUNK_MAGIC_WORD; + u16[1] = messageId; + u16[2] = chunkId; + u16[3] = + offset + CHUNK_MAX_LENGTH_BYTES >= + dataArrBuffer.byteLength + ? 1 + : 0; + u32[2] = dataArrBuffer.byteLength; + + peer.send(buf); + } + } else { + peer.send(dataArrBuffer); + } + }); + } + + broadcast(msg) { + const ps = []; + + for (const peer of this.peers.values()) { + if (!peer.connected) continue; + + ps.push(this.send(peer, msg)); + } + + return Promise.all(ps); + } + + /** + * Destroy object + */ + destroy() { + if (this._step) { + this._step(true); + } + + if (this.networkSettingsInterval) { + clearInterval(this.networkSettingsInterval); + this.networkSettingsInterval = null; + } + + if (this.stepInterval) { + clearInterval(this.stepInterval); + this.stepInterval = null; + } + + if (this.destroyOnUnload) { + for (const ev of iOSSafari + ? ["pagehide"] + : ["beforeunload", "unload"]) { + window.removeEventListener(ev, this.destroyOnUnload); + } + + this.destroyOnUnload = null; + } + + for (const peer of this.peers.values()) { + peer.destroy(); + } + } + + /** + * Handle msg chunks. Returns false until the last chunk is received. Finally returns the entire msg + * + * @param object data + * @param data + * @param messageId + * @param chunkId + */ + _chunkHandler(data, messageId, chunkId) { + let target = null; + + if (!this.msgChunks.has(messageId)) { + const totalLength = new Uint32Array(data, 0, 3)[2]; + target = new Uint8Array(totalLength); + this.msgChunks.set(messageId, target); + } else { + target = this.msgChunks.get(messageId); + } + + const offsetToSet = chunkId * CHUNK_MAX_LENGTH_BYTES; + + const numBytesToSet = Math.min( + target.byteLength - offsetToSet, + CHUNK_MAX_LENGTH_BYTES + ); + + target.set( + new Uint8Array(data, CHUNK_HEADER_LENGTH_BYTES, numBytesToSet), + chunkId * CHUNK_MAX_LENGTH_BYTES + ); + + return target.buffer; + } + + _updateConnectedSessions() { + this.connectedSessions.length = 0; + + for (const [sessionId, peer] of this.peers) { + if (peer.connected) { + this.connectedSessions.push(sessionId); + continue; + } + } + } + + async _getNetworkSettings() { + await this._init(); + + let dtlsFingerprint = null; + const candidates = []; + const reflexiveIps = new Set(); + + const peerOptions = { iceServers: this.stunIceServers }; + + if (this.dtlsCert) { + peerOptions.certificates = [this.dtlsCert]; + } + + const pc = new this.wrtc.RTCPeerConnection(peerOptions); + pc.createDataChannel("x"); + + const p = new Promise((resolve) => { + setTimeout(() => resolve(), 5000); + + pc.onicecandidate = (e) => { + if (!e.candidate) return resolve(); + + if (e.candidate.candidate) { + candidates.push(parseCandidate(e.candidate.candidate)); + } + }; + }); + + pc.createOffer().then((offer) => { + for (const l of offer.sdp.split("\n")) { + if (l.indexOf("a=fingerprint") === -1) continue; + dtlsFingerprint = l.split(" ")[1].trim(); + } + + pc.setLocalDescription(offer); + }); + + await p; + + pc.close(); + + let isSymmetric = false; + let udpEnabled = false; + + // Network is not symmetric if we can find a srflx candidate that has a unique related port + /* eslint-disable no-labels */ + loop: for (const c of candidates) { + /* eslint-enable no-labels */ + if (c[0] !== CANDIDATE_TYPES.srflx) continue; + udpEnabled = true; + + reflexiveIps.add(c[CANDIDATE_IDX.IP]); + + for (const d of candidates) { + if (d[0] !== CANDIDATE_TYPES.srflx) continue; + if (c === d) continue; + + if ( + typeof c[CANDIDATE_IDX.RELATED_PORT] === "number" && + typeof d[CANDIDATE_IDX.RELATED_PORT] === "number" && + c[CANDIDATE_IDX.RELATED_PORT] === + d[CANDIDATE_IDX.RELATED_PORT] && + c[CANDIDATE_IDX.PORT] !== d[CANDIDATE_IDX.PORT] + ) { + // check port and related port + // Symmetric, continue + isSymmetric = true; + break; + } + } + } + + return [udpEnabled, isSymmetric, reflexiveIps, dtlsFingerprint]; + } + + _handlePeerError(peer, err) { + if ( + err.errorDetail === "sctp-failure" && + err.message.indexOf("User-Initiated Abort") >= 0 + ) { + return; // Benign shutdown + } + + console.error(err); + } + + _checkForSignalOrEmitMessage(peer, msg) { + if (msg.byteLength < SIGNAL_MESSAGE_HEADER_WORDS.length * 2) { + this.emit("msg", peer, msg); + return; + } + + const u16 = new Uint16Array(msg, 0, SIGNAL_MESSAGE_HEADER_WORDS.length); + + for (let i = 0; i < SIGNAL_MESSAGE_HEADER_WORDS.length; i++) { + if (u16[i] !== SIGNAL_MESSAGE_HEADER_WORDS[i]) { + this.emit("msg", peer, msg); + return; + } + } + + const u8 = new Uint8Array(msg, SIGNAL_MESSAGE_HEADER_WORDS.length * 2); + + let payload = arrToText(u8); + + // Might have a trailing byte + if (payload.endsWith("\0")) { + payload = payload.substring(0, payload.length - 1); + } + + peer.signal(payload); + } + + _wireUpCommonPeerEvents(peer) { + peer.on("connect", () => { + this.emit("peerconnect", peer); + + // Remove packages for the peer once connected + removeInPlace(this.packages, (pkg) => pkg[0] === peer.id); + this._updateConnectedSessions(); + }); + + peer.on("data", (data) => { + let messageId = null; + let u16 = null; + if (data.byteLength >= CHUNK_HEADER_LENGTH_BYTES) { + u16 = new Uint16Array(data, 0, CHUNK_HEADER_LENGTH_BYTES / 2); + + if (u16[0] === CHUNK_MAGIC_WORD) { + messageId = u16[1]; + } + } + if (messageId !== null) { + try { + const chunkId = u16[2]; + const last = u16[3] !== 0; + const msg = this._chunkHandler( + data, + messageId, + chunkId, + last + ); + if (last) { + this._checkForSignalOrEmitMessage(peer, msg); + this.msgChunks.delete(messageId); + } + } catch (e) { + console.error(e); + } + } else { + this._checkForSignalOrEmitMessage(peer, data); + } + }); + + peer.on("error", (err) => { + console.warn(err); + }); + + peer.on("close", () => { + this._removePeer(peer); + this._updateConnectedSessions(); + }); + + // Once ICE completes, perform subsequent signalling via the datachannel + peer.once("_iceComplete", () => { + peer.on("signal", (signalData) => { + const payloadBytes = textToArr(JSON.stringify(signalData)); + + let len = + payloadBytes.byteLength + + SIGNAL_MESSAGE_HEADER_WORDS.length * 2; + + if (len % 2 !== 0) { + len++; + } + + // Add signal header + const buf = new ArrayBuffer(len); + const u8 = new Uint8Array(buf); + const u16 = new Uint16Array(buf); + + u8.set(payloadBytes, SIGNAL_MESSAGE_HEADER_WORDS.length * 2); + + for (let i = 0; i < SIGNAL_MESSAGE_HEADER_WORDS.length; i++) { + u16[i] = SIGNAL_MESSAGE_HEADER_WORDS[i]; + } + + this.send(peer, buf); + }); + }); + } +} diff --git a/blocks/environment/editor.scss b/blocks/environment/editor.scss index a41c19e..0864478 100644 --- a/blocks/environment/editor.scss +++ b/blocks/environment/editor.scss @@ -2,6 +2,14 @@ .wp-block-three-object-block { border: 1px dotted #f00; } + +.wp-block-three-object-viewer-environment.alignfull { + position: relative; + top: 0; + bottom: 0; + width:100vw; + height: 100vh; +} .glb-preview-container { padding: 100px; text-align: center; @@ -16,9 +24,104 @@ } .three-object-viewer-button { - background-color:rgb(199, 254, 0); color: black; border: solid 1.5px black; + border-radius: 8px; + cursor: pointer; + +} + +.three-html-block-inner-wrapper{ + border-radius: 20px; + padding: 10px; + box-sizing: border-box; +} + +.wp-block-three-object-viewer-sky-block, +.wp-block-three-object-viewer-model-block, +.wp-block-three-object-viewer-three-image-block, +.wp-block-three-object-viewer-three-audio-block, +.wp-block-three-object-viewer-three-portal-block, +.wp-block-three-object-viewer-three-video-block, +.wp-block-three-object-viewer-spawn-point-block, +.wp-block-three-object-viewer-three-html-block { + display: flex; + float: left; + padding-left:10px !important; + height: auto; + padding-right: 10px !important; + // background-color: rgb(42, 42, 42); +} + +.wp-block-three-object-viewer-environment .block-editor-inner-blocks { + background-color: rgb(42, 42, 42); + height: 210px; + overflow: scroll; +} + +.three-object-viewer-component-container { + display: flex; + flex-direction: column; +} +.three-object-viewer-component-container p { + font-size: 0.6em; +} + +.three-object-viewer-inner-edit-container p{ + margin: 0 auto; +} +.three-object-viewer-inner-edit-container .three-object-viewer-model-name { + font-size: 0.7em; +} + +.three-object-viewer-inner p { + font-size: 0.8em; + margin: 0; +} + +.three-object-viewer-inner { + z-index:1; + flex: 1; + background-color: #3f3f3f; + padding: 10px; + color: white; + box-sizing: border-box; + margin-bottom: 20px; + margin-top: 20px; + max-width: 130px; + width: 130px; + max-height: 93px; + height: 93px; + font-size: 0.8em; + text-align: center; + border-radius: 8px; + box-shadow:0px 1px 5px 1px #1e1e1e; +} + +.three-object-viewer-inner svg { + max-height: 30px; + filter: invert(88%) ; +} + +.wp-block-three-object-viewer-environment .block-editor-inner-blocks .block-editor-button-block-appender { + width: 60px; + height: 60px; +} + +.wp-block-three-object-viewer-environment .block-editor-inner-blocks .block-editor-button-block-appender svg{ + width: 40px; + height: 40px; +} +.wp-block-three-object-viewer-environment .block-editor-inner-blocks .block-editor-button-block-appender{ + margin: 0px 0px -60px; +} +.wp-block-three-object-viewer-environment { + background-color: rgb(42, 42, 42); +} + + +.stats { + margin-top: 200px !important; } .glb-preview-container button:hover{ diff --git a/blocks/environment/frontend.js b/blocks/environment/frontend.js index 0a4c388..ea5fcb4 100644 --- a/blocks/environment/frontend.js +++ b/blocks/environment/frontend.js @@ -1,72 +1,129 @@ const { Component, render } = wp.element; +import React, { Suspense, useRef, useState, useEffect, useMemo } from "react"; -import EnvironmentFront from './components/EnvironmentFront'; +import EnvironmentFront from "./components/EnvironmentFront"; +import Networking from "./components/Networking"; -const threeApp = document.querySelectorAll( '.three-object-three-app-environment' ); -const modelsToAdd = document.querySelectorAll( '.three-object-three-app-model-block' ); -const sky = document.querySelectorAll( '.three-object-three-app-sky-block' ); -const imagesToAdd = document.querySelectorAll( '.three-object-three-app-image-block' ); -const videosToAdd = document.querySelectorAll( '.three-object-three-app-video-block' ); - -threeApp.forEach( ( threeApp ) => { - if ( threeApp ) { - const threeUrl = threeApp.querySelector( 'p.three-object-block-url' ) - ? threeApp.querySelector( 'p.three-object-block-url' ).innerText - : ''; +const threeApp = document.querySelectorAll( + ".three-object-three-app-environment" +); +const modelsToAdd = document.querySelectorAll( + ".three-object-three-app-model-block" +); +const htmlToAdd = document.querySelectorAll( + ".three-object-three-app-three-html-block" +); +const portalsToAdd = document.querySelectorAll( + ".three-object-three-app-three-portal-block" +); +const sky = document.querySelectorAll(".three-object-three-app-sky-block"); +const imagesToAdd = document.querySelectorAll( + ".three-object-three-app-image-block" +); +const spawnToAdd = document.querySelectorAll( + ".three-object-three-app-spawn-point-block" +); +const videosToAdd = document.querySelectorAll( + ".three-object-three-app-video-block" +); +threeApp.forEach((threeApp) => { + if (threeApp) { + const spawnPoint = + spawnToAdd.length !== 0 + ? [ + spawnToAdd[0].querySelector( + "p.spawn-point-block-positionX" + ).innerText, + spawnToAdd[0].querySelector( + "p.spawn-point-block-positionY" + ).innerText, + spawnToAdd[0].querySelector( + "p.spawn-point-block-positionZ" + ).innerText + ] + : [0, 0, 0]; + const threeUrl = threeApp.querySelector("p.three-object-block-url") + ? threeApp.querySelector("p.three-object-block-url").innerText + : ""; + const threePreviewImage = threeApp.querySelector( + "p.three-object-preview-image" + ) + ? threeApp.querySelector("p.three-object-preview-image").innerText + : ""; const deviceTarget = threeApp.querySelector( - 'p.three-object-block-device-target' + "p.three-object-block-device-target" ) - ? threeApp.querySelector( 'p.three-object-block-device-target' ) + ? threeApp.querySelector("p.three-object-block-device-target") .innerText - : '2D'; + : "2D"; const backgroundColor = threeApp.querySelector( - 'p.three-object-background-color' + "p.three-object-background-color" ) - ? threeApp.querySelector( 'p.three-object-background-color' ).innerText - : '#ffffff'; - const zoom = threeApp.querySelector( 'p.three-object-zoom' ) - ? threeApp.querySelector( 'p.three-object-zoom' ).innerText + ? threeApp.querySelector("p.three-object-background-color") + .innerText + : "#ffffff"; + const zoom = threeApp.querySelector("p.three-object-zoom") + ? threeApp.querySelector("p.three-object-zoom").innerText : 90; - const scale = threeApp.querySelector( 'p.three-object-scale' ) - ? threeApp.querySelector( 'p.three-object-scale' ).innerText + const scale = threeApp.querySelector("p.three-object-scale") + ? threeApp.querySelector("p.three-object-scale").innerText : 1; - const hasZoom = threeApp.querySelector( 'p.three-object-has-zoom' ) - ? threeApp.querySelector( 'p.three-object-has-zoom' ).innerText + const hasZoom = threeApp.querySelector("p.three-object-has-zoom") + ? threeApp.querySelector("p.three-object-has-zoom").innerText : false; - const hasTip = threeApp.querySelector( 'p.three-object-has-tip' ) - ? threeApp.querySelector( 'p.three-object-has-tip' ).innerText + const hasTip = threeApp.querySelector("p.three-object-has-tip") + ? threeApp.querySelector("p.three-object-has-tip").innerText : true; - const positionY = threeApp.querySelector( 'p.three-object-position-y' ) - ? threeApp.querySelector( 'p.three-object-position-y' ).innerText + const positionY = threeApp.querySelector("p.three-object-position-y") + ? threeApp.querySelector("p.three-object-position-y").innerText : 0; - const rotationY = threeApp.querySelector( 'p.three-object-rotation-y' ) - ? threeApp.querySelector( 'p.three-object-rotation-y' ).innerText + const rotationY = threeApp.querySelector("p.three-object-rotation-y") + ? threeApp.querySelector("p.three-object-rotation-y").innerText : 0; - const animations = threeApp.querySelector( 'p.three-object-animations' ) - ? threeApp.querySelector( 'p.three-object-animations' ).innerText - : ''; + const animations = threeApp.querySelector("p.three-object-animations") + ? threeApp.querySelector("p.three-object-animations").innerText + : ""; render( - , + <> + {/*
+
+

Peers

+
+

Messages

+
+
Send Button
+ +
+
*/} + {/* */} + + , threeApp ); } -} ); - - +}); diff --git a/blocks/environment/index.js b/blocks/environment/index.js index 22b14b6..0b83de5 100644 --- a/blocks/environment/index.js +++ b/blocks/environment/index.js @@ -1,11 +1,11 @@ -import { registerBlockType } from '@wordpress/blocks'; -import Edit from './Edit'; -import Save from './Save'; -import { useBlockProps } from '@wordpress/block-editor'; +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; const icon = ( ); -const blockConfig = require( './block.json' ); -registerBlockType( blockConfig.name, { +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { ...blockConfig, - icon: icon, + icon, apiVersion: 2, edit: Edit, save: Save, @@ -27,171 +27,177 @@ registerBlockType( blockConfig.name, { { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', - }, + type: "string", + default: "2d" + } }, - save( props ) { + save(props) { return ( -
+
<>

- { props.attributes.deviceTarget } + {props.attributes.deviceTarget}

- { props.attributes.threeObjectUrl } + {props.attributes.threeObjectUrl}

- { props.attributes.scale } + {props.attributes.scale}

- { props.attributes.bg_color } + {props.attributes.bg_color}

- { props.attributes.zoom } + {props.attributes.zoom}

- { props.attributes.hasZoom ? 1 : 0 } + {props.attributes.hasZoom ? 1 : 0}

- { props.attributes.hasTip ? 1 : 0 } + {props.attributes.hasTip ? 1 : 0}

- { props.attributes.positionY } + {props.attributes.positionY}

- { props.attributes.rotationY } + {props.attributes.rotationY}

- { props.attributes.scale } + {props.attributes.scale}

); - }, + } }, { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', + type: "string", + default: "2d" }, animations: { - type: 'string', - default: '', + type: "string", + default: "" } }, - save( props ) { + save(props) { return ( -
- <> -
-

- { props.attributes.deviceTarget } -

-

- { props.attributes.threeObjectUrl } -

-

{ props.attributes.scale }

-

- { props.attributes.bg_color } -

-

{ props.attributes.zoom }

-

- { props.attributes.hasZoom ? 1 : 0 } -

-

- { props.attributes.hasTip ? 1 : 0 } -

-

- { props.attributes.positionY } -

-

- { props.attributes.rotationY } -

-

{ props.attributes.scale }

-

- { props.attributes.animations } -

-
- -
- ); - }, - }, - ], -} ); +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/environment/style.scss b/blocks/environment/style.scss index 18f1fcf..5e8f67d 100644 --- a/blocks/environment/style.scss +++ b/blocks/environment/style.scss @@ -4,6 +4,10 @@ padding: 2px; } +#networking { + display: none !important; +} + .wp-block-three-object-block { border: 1px dotted #f00; } diff --git a/blocks/model-block/Edit.js b/blocks/model-block/Edit.js index 1318ae6..5fe95a2 100644 --- a/blocks/model-block/Edit.js +++ b/blocks/model-block/Edit.js @@ -1,13 +1,13 @@ -import { __ } from '@wordpress/i18n'; -import React, { useState } from 'react'; -import { DropZone } from '@wordpress/components'; -import './editor.scss'; +import { __ } from "@wordpress/i18n"; +import React, { useState } from "react"; +import { DropZone } from "@wordpress/components"; +import "./editor.scss"; import { useBlockProps, ColorPalette, InspectorControls, - MediaUpload, -} from '@wordpress/block-editor'; + MediaUpload +} from "@wordpress/block-editor"; import { Panel, PanelBody, @@ -16,103 +16,115 @@ import { ToggleControl, SelectControl, TextControl, -} from '@wordpress/components'; -import { more } from '@wordpress/icons'; + TextareaControl +} from "@wordpress/components"; +import { more } from "@wordpress/icons"; -import ModelEdit from './components/ModelEdit'; - -export default function Edit( { attributes, setAttributes, isSelected } ) { - - const onChangePositionX = ( positionX ) => { - setAttributes( { positionX: positionX } ); +export default function Edit({ attributes, setAttributes, isSelected }) { + const onChangePositionX = (positionX) => { + setAttributes({ positionX }); + }; + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); }; - const onChangePositionY = ( positionY ) => { - setAttributes( { positionY: positionY } ); + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); }; - const onChangePositionZ = ( positionZ ) => { - setAttributes( { positionZ: positionZ } ); + + const onChangeAlt = (altValue) => { + setAttributes({ alt: altValue }); }; - const onChangeRotationX = ( rotationX ) => { - setAttributes( { rotationX: rotationX } ); + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); }; - const onChangeRotationY = ( rotationY ) => { - setAttributes( { rotationY: rotationY } ); + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); }; - const onChangeRotationZ = ( rotationZ ) => { - setAttributes( { rotationZ: rotationZ } ); + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); }; - const onChangeScaleX = ( scaleX ) => { - setAttributes( { scaleX: scaleX } ); + const onChangeScaleX = (scaleX) => { + setAttributes({ scaleX }); + }; + const onChangeScaleY = (scaleY) => { + setAttributes({ scaleY }); }; - const onChangeScaleY = ( scaleY ) => { - setAttributes( { scaleY: scaleY } ); + const onChangeScaleZ = (scaleZ) => { + setAttributes({ scaleZ }); }; - const onChangeScaleZ = ( scaleZ ) => { - setAttributes( { scaleZ: scaleZ } ); + + const onChangeAnimations = (animations) => { + setAttributes({ animations }); }; - const onChangeAnimations = ( animations ) => { - setAttributes( { animations: animations } ); + const onChangeName = (name) => { + setAttributes({ name }); }; - const onImageSelect = ( imageObject ) => { - setAttributes( { threeObjectUrl: null } ); - setAttributes( { threeObjectUrl: imageObject.url } ); + const onImageSelect = (imageObject) => { + setAttributes({ threeObjectUrl: null }); + setAttributes({ threeObjectUrl: imageObject.url }); }; - const onChangeCollidable = ( collidableSetting ) => { - setAttributes( { collidable: collidableSetting } ); + const onChangeCollidable = (collidableSetting) => { + setAttributes({ collidable: collidableSetting }); }; - const [ enteredURL, setEnteredURL ] = useState( "" ); + const [enteredURL, setEnteredURL] = useState(""); const { mediaUpload } = wp.editor; const ALLOWED_MEDIA_TYPES = [ - 'model/gltf-binary', - 'application/octet-stream', + "model/gltf-binary", + "application/octet-stream" ]; const MyDropZone = () => { - const [ hasDropped, setHasDropped ] = useState( false ); + const [hasDropped, setHasDropped] = useState(false); return (
- { hasDropped ? 'Dropped!' : 'Drop a glb here or' } + {hasDropped ? "Dropped!" : "Drop a glb here or"} - mediaUpload( { + onFilesDrop={(files) => + mediaUpload({ allowedTypes: ALLOWED_MEDIA_TYPES, filesList: files, - onFileChange: ( [ images ] ) => { - onImageSelect( images ); - }, - } ) + onFileChange: ([images]) => { + onImageSelect(images); + } + }) } />
); }; - - function handleClick(objectURL){ - if(objectURL){ - console.log("success good job", objectURL); + + function handleClick(objectURL) { + if (objectURL) { onImageSelect(objectURL); } console.log("fail", objectURL); } - return ( -
+
+ + onChangeName(value)} + /> + select a glb file from your media library to @@ -121,249 +133,267 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { - onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="image" label="GLB File" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.threeObjectUrl } - render={ ( { open } ) => ( - - ) } + )} /> { - onChangeCollidable( e ); - } } + checked={attributes.collidable} + onChange={(e) => { + onChangeCollidable(e); + }} /> - onChangeAnimations( value ) - } + value={attributes.animations} + onChange={(value) => onChangeAnimations(value)} /> - + + onChangeAlt(value)} + /> + + - { __( 'Position', 'three-object-viewer' ) } - + {__("Position", "three-object-viewer")} + - onChangePositionX( value ) - } + value={attributes.positionX} + onChange={(value) => onChangePositionX(value)} /> - onChangePositionY( value ) - } + value={attributes.positionY} + onChange={(value) => onChangePositionY(value)} /> - onChangePositionZ( value ) - } + value={attributes.positionZ} + onChange={(value) => onChangePositionZ(value)} /> - + - { __( 'Rotation', 'three-object-viewer' ) } - + {__("Rotation", "three-object-viewer")} + - onChangeRotationX( value ) - } + value={attributes.rotationX} + onChange={(value) => onChangeRotationX(value)} /> - onChangeRotationY( value ) - } + value={attributes.rotationY} + onChange={(value) => onChangeRotationY(value)} /> - onChangeRotationZ( value ) - } + value={attributes.rotationZ} + onChange={(value) => onChangeRotationZ(value)} /> - + - { __( 'Scale', 'three-object-viewer' ) } - + {__("Scale", "three-object-viewer")} + - onChangeScaleX( value ) - } + value={attributes.scaleX} + onChange={(value) => onChangeScaleX(value)} /> - onChangeScaleY( value ) - } + value={attributes.scaleY} + onChange={(value) => onChangeScaleY(value)} /> - onChangeScaleZ( value ) - } + value={attributes.scaleZ} + onChange={(value) => onChangeScaleZ(value)} /> - { isSelected ? ( + {isSelected ? ( <> - { attributes.threeObjectUrl ? ( - - ) : ( -
- - -
- - Select a glb file to render in the canvas: - - {/*
- setEnteredURL(e.target.value)}> - -
*/} - - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.threeObjectUrl } - render={ ( { open } ) => ( - - ) } - /> + + + + +

+ Model block +

+
+

+ {attributes.name} +

+
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + /> +
- ) } + )} ) : ( <> - { attributes.threeObjectUrl ? ( - - ) : ( -
- -
- - Select a glb file to render in the canvas: - - {/*
- console.log(e.target.value) && setEnteredURL(e.target.value)}> - -
*/} + + + + +

+ Model block +

+
+

+ {attributes.name} +

+
+
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + />
- - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.threeObjectUrl } - render={ ( { open } ) => ( - - ) } - />
- ) } + )} - ) } + )}
); } diff --git a/blocks/model-block/Edit.test.js b/blocks/model-block/Edit.test.js index ab10afe..ab22d96 100644 --- a/blocks/model-block/Edit.test.js +++ b/blocks/model-block/Edit.test.js @@ -1,57 +1,47 @@ - //Import React -import React from 'react'; +import React from "react"; //Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; +import { render, fireEvent, cleanup } from "@testing-library/react"; //Import component to test -import { Editor } from './Edit'; - +import { Editor } from "./Edit"; describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/model-block/Save.js b/blocks/model-block/Save.js index 518ee4a..e6a7ec6 100644 --- a/blocks/model-block/Save.js +++ b/blocks/model-block/Save.js @@ -1,26 +1,42 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; -export default function save( { attributes } ) { +export default function save({ attributes }) { return ( -
+
<>

- { attributes.threeObjectUrl } -

-

{ attributes.scaleX }

-

{ attributes.scaleY }

-

{ attributes.scaleZ }

-

{ attributes.positionX }

-

{ attributes.positionY }

-

{ attributes.positionZ }

-

{ attributes.rotationX }

-

{ attributes.rotationY }

-

{ attributes.rotationZ }

+ {attributes.threeObjectUrl} +

+

{attributes.scaleX}

+

{attributes.scaleY}

+

{attributes.scaleZ}

+

+ {attributes.positionX} +

+

+ {attributes.positionY} +

+

+ {attributes.positionZ} +

+

+ {attributes.rotationX} +

+

+ {attributes.rotationY} +

+

+ {attributes.rotationZ} +

- { attributes.animations } + {attributes.animations} +

+

+ {attributes.collidable ? 1 : 0}

+

{attributes.alt}

diff --git a/blocks/model-block/block.json b/blocks/model-block/block.json index 3fe62a1..a70f858 100644 --- a/blocks/model-block/block.json +++ b/blocks/model-block/block.json @@ -1,12 +1,15 @@ { "name": "three-object-viewer/model-block", - "title": "Model Block", - "description": "A 3D model for your VersePress environment", + "title": "3D Model", + "description": "A 3D model for your XP Portal environment", "attributes": { "scaleX": { "type": "int", "default":1 }, + "name": { + "type": "string" + }, "scaleY": { "type": "int", "default":1 @@ -47,12 +50,17 @@ "type": "string", "default": "" }, + "alt": { + "type": "string", + "default": "" + }, "collidable": { "type": "boolean", "default": false } }, - "category": "3D", + "category": "design", + "parent": [ "three-object-viewer/environment" ], "apiVersion": 2, "supports": { "html": false, diff --git a/blocks/model-block/components/ModelEdit.js b/blocks/model-block/components/ModelEdit.js deleted file mode 100644 index c71bd1b..0000000 --- a/blocks/model-block/components/ModelEdit.js +++ /dev/null @@ -1,105 +0,0 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; -import { - OrthographicCamera, - PerspectiveCamera, - OrbitControls, - useAnimations, -} from '@react-three/drei'; -import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' -import { GLTFAudioEmitterExtension } from 'three-omi'; - - -function ThreeObject( props ) { - const [ url, set ] = useState( props.url ); - useEffect( () => { - setTimeout( () => set( props.url ), 2000 ); - }, [] ); - const [ listener ] = useState( () => new THREE.AudioListener() ); - - useThree( ( { camera } ) => { - camera.add( listener ); - } ); - - const gltf = useLoader( GLTFLoader, url, ( loader ) => { - loader.register( - ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) - ); - loader.register( ( parser ) => { - - return new VRMLoaderPlugin( parser ); - - } ); - - } ); - - const { actions } = useAnimations( gltf.animations, gltf.scene ); - - const animationList = props.animations ? props.animations.split( ',' ) : ''; - - useEffect( () => { - if ( animationList ) { - animationList.forEach( ( name ) => { - if ( Object.keys( actions ).includes( name ) ) { - actions[ name ].play(); - } - } ); - } - }, [] ); - - if(gltf?.userData?.gltfExtensions?.VRM){ - const vrm = gltf.userData.vrm; - vrm.scene.position.set( 0, props.positionY, 0 ); - VRMUtils.rotateVRM0( vrm ); - const rotationVRM = vrm.scene.rotation.y + parseFloat(props.rotationY); - vrm.scene.rotation.set( 0, rotationVRM, 0 ); - vrm.scene.scale.set( props.scale, props.scale, props.scale ); - return ; - } - gltf.scene.position.set( 0, 0, 0 ); - gltf.scene.rotation.set( 0, 0, 0 ); - gltf.scene.scale.set( 1, 1, 1 ); - return ; -} - -export default function ModelEdit( props ) { - return ( - <> - - - - - { props.url && ( - - - - ) } - - - { props.hasTip && ( -

Click and drag ^

- ) } - - ); -} diff --git a/blocks/model-block/editor.scss b/blocks/model-block/editor.scss index 9ed5c19..5f49231 100644 --- a/blocks/model-block/editor.scss +++ b/blocks/model-block/editor.scss @@ -15,17 +15,12 @@ border-radius: 30px; } -.three-object-viewer-button { - background-color:rgb(199, 254, 0); - color: black; - border: solid 1.5px black; -} - .glb-preview-container button:hover{ border-radius: 30px; - background-color:rgb(156, 199, 0); + // background-color:rgb(156, 199, 0); cursor: pointer; } + .three-object-block-tip { overflow-wrap: break-word; background-color: black; diff --git a/blocks/model-block/index.js b/blocks/model-block/index.js index 22b14b6..0b83de5 100644 --- a/blocks/model-block/index.js +++ b/blocks/model-block/index.js @@ -1,11 +1,11 @@ -import { registerBlockType } from '@wordpress/blocks'; -import Edit from './Edit'; -import Save from './Save'; -import { useBlockProps } from '@wordpress/block-editor'; +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; const icon = ( ); -const blockConfig = require( './block.json' ); -registerBlockType( blockConfig.name, { +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { ...blockConfig, - icon: icon, + icon, apiVersion: 2, edit: Edit, save: Save, @@ -27,171 +27,177 @@ registerBlockType( blockConfig.name, { { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', - }, + type: "string", + default: "2d" + } }, - save( props ) { + save(props) { return ( -
+
<>

- { props.attributes.deviceTarget } + {props.attributes.deviceTarget}

- { props.attributes.threeObjectUrl } + {props.attributes.threeObjectUrl}

- { props.attributes.scale } + {props.attributes.scale}

- { props.attributes.bg_color } + {props.attributes.bg_color}

- { props.attributes.zoom } + {props.attributes.zoom}

- { props.attributes.hasZoom ? 1 : 0 } + {props.attributes.hasZoom ? 1 : 0}

- { props.attributes.hasTip ? 1 : 0 } + {props.attributes.hasTip ? 1 : 0}

- { props.attributes.positionY } + {props.attributes.positionY}

- { props.attributes.rotationY } + {props.attributes.rotationY}

- { props.attributes.scale } + {props.attributes.scale}

); - }, + } }, { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', + type: "string", + default: "2d" }, animations: { - type: 'string', - default: '', + type: "string", + default: "" } }, - save( props ) { + save(props) { return ( -
- <> -
-

- { props.attributes.deviceTarget } -

-

- { props.attributes.threeObjectUrl } -

-

{ props.attributes.scale }

-

- { props.attributes.bg_color } -

-

{ props.attributes.zoom }

-

- { props.attributes.hasZoom ? 1 : 0 } -

-

- { props.attributes.hasTip ? 1 : 0 } -

-

- { props.attributes.positionY } -

-

- { props.attributes.rotationY } -

-

{ props.attributes.scale }

-

- { props.attributes.animations } -

-
- -
- ); - }, - }, - ], -} ); +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/npc-block/Edit.js b/blocks/npc-block/Edit.js deleted file mode 100644 index a06a08d..0000000 --- a/blocks/npc-block/Edit.js +++ /dev/null @@ -1,26 +0,0 @@ -import { TextControl } from "@wordpress/components"; -import { __ } from "@wordpress/i18n"; -import { useBlockProps } from "@wordpress/block-editor"; -import './editor.scss'; - -export const Editor = ({ value, onChange, isSelected }) => ( - <> - {isSelected ? ( - - ) : ( -

{value}

- )} - -); - -export default function Edit({ attributes, setAttributes, isSelected }) { - return ( -
- setAttributes({ content })} - /> -
- ); -} diff --git a/blocks/npc-block/Edit.test.js b/blocks/npc-block/Edit.test.js deleted file mode 100644 index ab10afe..0000000 --- a/blocks/npc-block/Edit.test.js +++ /dev/null @@ -1,57 +0,0 @@ - -//Import React -import React from 'react'; -//Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; -//Import component to test -import { Editor } from './Edit'; - - -describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); - - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); - - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file diff --git a/blocks/npc-block/Save.js b/blocks/npc-block/Save.js deleted file mode 100644 index 3a499f1..0000000 --- a/blocks/npc-block/Save.js +++ /dev/null @@ -1,6 +0,0 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; - -export default function save({ attributes }) { - return
{attributes.content}
; -} \ No newline at end of file diff --git a/blocks/npc-block/block.json b/blocks/npc-block/block.json deleted file mode 100644 index e197d03..0000000 --- a/blocks/npc-block/block.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "three-object-viewer/npc-block", - "title": "NPC Block", - "description": "A NPC Block to make your experience a bit more personal.", - "attributes": { - "content": { - "type": "string", - "default": "Hi Roy" - } - }, - "category": "theme", - "apiVersion": 2, - "icon": "smiley", - "supports": { - "html": false - }, - "editorScript": "file:../../build/block-npc-block.js", - "editorStyle": "file:../../build/block-npc-block.css", - "style": "file:../../build/block-npc-block.css" -} diff --git a/blocks/npc-block/editor.scss b/blocks/npc-block/editor.scss deleted file mode 100644 index 318f617..0000000 --- a/blocks/npc-block/editor.scss +++ /dev/null @@ -1,4 +0,0 @@ - - .wp-block-npc-block { - border: 1px dotted #f00; -} diff --git a/blocks/npc-block/index.js b/blocks/npc-block/index.js deleted file mode 100644 index 3539797..0000000 --- a/blocks/npc-block/index.js +++ /dev/null @@ -1,12 +0,0 @@ - -import { registerBlockType } from "@wordpress/blocks"; -import Edit from './Edit'; -import Save from './Save'; - -const blockConfig = require('./block.json'); -registerBlockType(blockConfig.name, { - ...blockConfig, - apiVersion: 2, - edit: Edit, - save: Save -}); diff --git a/blocks/npc-block/init.php b/blocks/npc-block/init.php deleted file mode 100644 index 93dd084..0000000 --- a/blocks/npc-block/init.php +++ /dev/null @@ -1,10 +0,0 @@ - { - setAttributes( { skyUrl: null } ); - setAttributes( { skyUrl: imageObject.url } ); +export default function Edit({ attributes, setAttributes, isSelected }) { + const onImageSelect = (imageObject) => { + setAttributes({ skyUrl: null }); + setAttributes({ skyUrl: imageObject.url }); }; - const onChangeCollidable = ( zoomSetting ) => { - setAttributes( { hasZoom: zoomSetting } ); + const onChangeCollidable = (zoomSetting) => { + setAttributes({ hasZoom: zoomSetting }); }; - const { mediaUpload } = wp.editor; - const ALLOWED_MEDIA_TYPES = [ - 'image' - ]; + const ALLOWED_MEDIA_TYPES = ["image"]; const MyDropZone = () => { - const [ hasDropped, setHasDropped ] = useState( false ); + const [hasDropped, setHasDropped] = useState(false); return (
- { hasDropped ? 'Dropped!' : 'Drop an image here or' } + {hasDropped ? "Dropped!" : "Drop an image here or"} - mediaUpload( { + onFilesDrop={(files) => + mediaUpload({ allowedTypes: ALLOWED_MEDIA_TYPES, filesList: files, - onFileChange: ( [ images ] ) => { - onImageSelect( images ); - }, - } ) + onFileChange: ([images]) => { + onImageSelect(images); + } + }) } />
); }; - - function handleClick(objectURL){ - if(objectURL){ - console.log("success good job", objectURL); + + function handleClick(objectURL) { + if (objectURL) { onImageSelect(objectURL); } console.log("fail", objectURL); - } + } - return ( -
+
- Select an image to be used as your skybox. 360 spherical panoramics recommended: + Select an image to be used as your skybox. 360 + spherical panoramics recommended: - onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="image" label="Sky File" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.skyUrl } - render={ ( { open } ) => ( - - ) } + )} /> - { isSelected ? ( + {isSelected ? ( <> - { attributes.skyUrl ? ( + {attributes.skyUrl ? ( <> - - ) : ( -
- - -
- - Select an image to be used as your skybox. 360 spherical panoramics recommended: - - - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.skyUrl } - render={ ( { open } ) => ( - - ) } - /> -
+
+
+ + + + + +

+ Sky block +

+ {/*

URL: {attributes.skyUrl}

*/} +
+
+ + ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.skyUrl} + render={({ open }) => ( + + )} + /> +
- ) } + )} ) : ( <> - { attributes.skyUrl ? ( - <> - - ) : ( -
- -
- - Select an image to be used as your skybox. 360 spherical panoramics recommended: - - {/*
- console.log(e.target.value) && setEnteredURL(e.target.value)}> - -
*/} + + + + +

+ Sky block +

+ {/*

URL: {attributes.skyUrl}

*/} +
+
+ + ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.skyUrl} + render={({ open }) => ( + + )} + />
- - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.skyUrl } - render={ ( { open } ) => ( - - ) } - />
- ) } + )} - ) } + )}
); } diff --git a/blocks/sky-block/Edit.test.js b/blocks/sky-block/Edit.test.js index ab10afe..ab22d96 100644 --- a/blocks/sky-block/Edit.test.js +++ b/blocks/sky-block/Edit.test.js @@ -1,57 +1,47 @@ - //Import React -import React from 'react'; +import React from "react"; //Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; +import { render, fireEvent, cleanup } from "@testing-library/react"; //Import component to test -import { Editor } from './Edit'; - +import { Editor } from "./Edit"; describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/sky-block/Save.js b/blocks/sky-block/Save.js index ee57703..1e38284 100644 --- a/blocks/sky-block/Save.js +++ b/blocks/sky-block/Save.js @@ -1,14 +1,12 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; -export default function save( { attributes } ) { +export default function save({ attributes }) { return ( -
+
<>
-

- { attributes.skyUrl } -

+

{attributes.skyUrl}

diff --git a/blocks/sky-block/block.json b/blocks/sky-block/block.json index fa63499..3a0ed3e 100644 --- a/blocks/sky-block/block.json +++ b/blocks/sky-block/block.json @@ -1,6 +1,6 @@ { "name": "three-object-viewer/sky-block", - "title": "Sky Block", + "title": "3D Sky Block", "description": "A sky your environment", "attributes": { "skyUrl": { @@ -8,7 +8,8 @@ "default": null } }, - "category": "3D", + "category": "design", + "parent": [ "three-object-viewer/environment" ], "apiVersion": 2, "supports": { "html": false, diff --git a/blocks/sky-block/components/SkyEdit.js b/blocks/sky-block/components/SkyEdit.js deleted file mode 100644 index eb2cde8..0000000 --- a/blocks/sky-block/components/SkyEdit.js +++ /dev/null @@ -1,66 +0,0 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; -import { - OrthographicCamera, - PerspectiveCamera, - OrbitControls, - useAnimations, -} from '@react-three/drei'; -import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' -import { GLTFAudioEmitterExtension } from 'three-omi'; - - // Geometry -function Sphere(props) { - const texture_1 = useLoader(THREE.TextureLoader, props.url); - - return ( - - - - - ); -} - -function ThreeObject( props ) { - const [ url, set ] = useState( props.src ); - useEffect( () => { - setTimeout( () => set( props.src ), 2000 ); - }, [] ); - - return Sphere(props); -} - -export default function SkyEdit( props ) { - return ( - <> - - - - { props.src && ( - - - - ) } - - - - ); -} diff --git a/blocks/sky-block/editor.scss b/blocks/sky-block/editor.scss index a41c19e..4a6a4c4 100644 --- a/blocks/sky-block/editor.scss +++ b/blocks/sky-block/editor.scss @@ -15,12 +15,6 @@ border-radius: 30px; } -.three-object-viewer-button { - background-color:rgb(199, 254, 0); - color: black; - border: solid 1.5px black; -} - .glb-preview-container button:hover{ border-radius: 30px; background-color:rgb(156, 199, 0); diff --git a/blocks/sky-block/index.js b/blocks/sky-block/index.js index 22b14b6..0b83de5 100644 --- a/blocks/sky-block/index.js +++ b/blocks/sky-block/index.js @@ -1,11 +1,11 @@ -import { registerBlockType } from '@wordpress/blocks'; -import Edit from './Edit'; -import Save from './Save'; -import { useBlockProps } from '@wordpress/block-editor'; +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; const icon = ( ); -const blockConfig = require( './block.json' ); -registerBlockType( blockConfig.name, { +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { ...blockConfig, - icon: icon, + icon, apiVersion: 2, edit: Edit, save: Save, @@ -27,171 +27,177 @@ registerBlockType( blockConfig.name, { { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', - }, + type: "string", + default: "2d" + } }, - save( props ) { + save(props) { return ( -
+
<>

- { props.attributes.deviceTarget } + {props.attributes.deviceTarget}

- { props.attributes.threeObjectUrl } + {props.attributes.threeObjectUrl}

- { props.attributes.scale } + {props.attributes.scale}

- { props.attributes.bg_color } + {props.attributes.bg_color}

- { props.attributes.zoom } + {props.attributes.zoom}

- { props.attributes.hasZoom ? 1 : 0 } + {props.attributes.hasZoom ? 1 : 0}

- { props.attributes.hasTip ? 1 : 0 } + {props.attributes.hasTip ? 1 : 0}

- { props.attributes.positionY } + {props.attributes.positionY}

- { props.attributes.rotationY } + {props.attributes.rotationY}

- { props.attributes.scale } + {props.attributes.scale}

); - }, + } }, { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', + type: "string", + default: "2d" }, animations: { - type: 'string', - default: '', + type: "string", + default: "" } }, - save( props ) { + save(props) { return ( -
- <> -
-

- { props.attributes.deviceTarget } -

-

- { props.attributes.threeObjectUrl } -

-

{ props.attributes.scale }

-

- { props.attributes.bg_color } -

-

{ props.attributes.zoom }

-

- { props.attributes.hasZoom ? 1 : 0 } -

-

- { props.attributes.hasTip ? 1 : 0 } -

-

- { props.attributes.positionY } -

-

- { props.attributes.rotationY } -

-

{ props.attributes.scale }

-

- { props.attributes.animations } -

-
- -
- ); - }, - }, - ], -} ); +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/spawn-point-block/Edit.js b/blocks/spawn-point-block/Edit.js new file mode 100644 index 0000000..3f19501 --- /dev/null +++ b/blocks/spawn-point-block/Edit.js @@ -0,0 +1,126 @@ +import { __ } from "@wordpress/i18n"; +import React, { useState } from "react"; +import { DropZone } from "@wordpress/components"; +import "./editor.scss"; +import { + useBlockProps, + ColorPalette, + InspectorControls, + MediaUpload +} from "@wordpress/block-editor"; +import { + Panel, + PanelBody, + PanelRow, + RangeControl, + ToggleControl, + SelectControl, + TextControl +} from "@wordpress/components"; +import { more } from "@wordpress/icons"; + +export default function Edit({ attributes, setAttributes, isSelected }) { + const onChangePositionX = (positionX) => { + setAttributes({ positionX }); + }; + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); + }; + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); + }; + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); + }; + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); + }; + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); + }; + + return ( +
+ + + + + onChangePositionX(value)} + /> + onChangePositionY(value)} + /> + onChangePositionZ(value)} + /> + + + + {__("Rotation", "three-object-viewer")} + + + + onChangeRotationX(value)} + /> + onChangeRotationY(value)} + /> + onChangeRotationZ(value)} + /> + + + + + <> +
+
+ + + + + +

+ Spawn Point +

+
+
+ +
+ ); +} diff --git a/blocks/spawn-point-block/Edit.test.js b/blocks/spawn-point-block/Edit.test.js new file mode 100644 index 0000000..ab22d96 --- /dev/null +++ b/blocks/spawn-point-block/Edit.test.js @@ -0,0 +1,47 @@ +//Import React +import React from "react"; +//Import test renderer +import { render, fireEvent, cleanup } from "@testing-library/react"; +//Import component to test +import { Editor } from "./Edit"; + +describe("Editor componet", () => { + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); + + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/spawn-point-block/Save.js b/blocks/spawn-point-block/Save.js new file mode 100644 index 0000000..9ef1449 --- /dev/null +++ b/blocks/spawn-point-block/Save.js @@ -0,0 +1,31 @@ +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; + +export default function save({ attributes }) { + return ( +
+ <> +
+

+ {attributes.positionX} +

+

+ {attributes.positionY} +

+

+ {attributes.positionZ} +

+

+ {attributes.rotationX} +

+

+ {attributes.rotationY} +

+

+ {attributes.rotationZ} +

+
+ +
+ ); +} diff --git a/blocks/spawn-point-block/block.json b/blocks/spawn-point-block/block.json new file mode 100644 index 0000000..26404a4 --- /dev/null +++ b/blocks/spawn-point-block/block.json @@ -0,0 +1,41 @@ +{ + "name": "three-object-viewer/spawn-point-block", + "title": "Spawn Point", + "description": "A spawn point for your users", + "attributes": { + "positionX": { + "type": "int", + "default":0 + }, + "positionY": { + "type": "int", + "default":0 + }, + "positionZ": { + "type": "int", + "default":0 + }, + "rotationX": { + "type": "int", + "default":0 + }, + "rotationY": { + "type": "int", + "default":0 + }, + "rotationZ": { + "type": "int", + "default":0 + } + }, + "category": "design", + "parent": [ "three-object-viewer/environment" ], + "apiVersion": 2, + "supports": { + "html": false, + "multiple": false + }, + "editorScript": "file:../../build/block-spawn-point-block.js", + "editorStyle": "file:../../build/block-spawn-point-block.css", + "style": "file:../../build/block-spawn-point-block.css" +} diff --git a/blocks/spawn-point-block/editor.scss b/blocks/spawn-point-block/editor.scss new file mode 100644 index 0000000..9fd1cb9 --- /dev/null +++ b/blocks/spawn-point-block/editor.scss @@ -0,0 +1,42 @@ + + .wp-block-three-object-block { + border: 1px dotted #f00; +} + .glb-preview-container { + padding: 100px; + text-align: center; + align-items: center; + align-content: center; + background-color:#f2f2f2; + } + + .glb-preview-container button{ + padding: 15px; + border-radius: 30px; +} + +.three-object-viewer-button { + color: black; + border: solid 1.5px black; +} + +.three-object-block-tip { + overflow-wrap: break-word; + background-color: black; + color: white; + padding: 10px; + font-weight: 500; + max-width: 160px; + font-size: 12px; + margin-top: 0px; + margin: 0 auto; + text-align: center; +} + +.three-object-block-url-input { + padding-bottom: 20px; +} + +.three-object-block-url-input input{ + height: 40px; +} diff --git a/blocks/spawn-point-block/index.js b/blocks/spawn-point-block/index.js new file mode 100644 index 0000000..0b83de5 --- /dev/null +++ b/blocks/spawn-point-block/index.js @@ -0,0 +1,203 @@ +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; + +const icon = ( + + + + + +); + +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { + ...blockConfig, + icon, + apiVersion: 2, + edit: Edit, + save: Save, + deprecated: [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/spawn-point-block/init.php b/blocks/spawn-point-block/init.php new file mode 100644 index 0000000..4d16124 --- /dev/null +++ b/blocks/spawn-point-block/init.php @@ -0,0 +1,10 @@ + { +export default function Edit({ attributes, setAttributes, isSelected }) { + const onImageSelect = (imageObject) => { console.log(imageObject); - setAttributes( { videoUrl: null } ); - setAttributes( { videoUrl: imageObject.url, aspectHeight: imageObject.height, aspectWidth: imageObject.width } ); - }; - const onChangePositionX = ( positionX ) => { - setAttributes( { positionX: positionX } ); + setAttributes({ videoUrl: null }); + setAttributes({ + videoUrl: imageObject.url, + aspectHeight: imageObject.height, + aspectWidth: imageObject.width + }); }; - const onChangePositionY = ( positionY ) => { - setAttributes( { positionY: positionY } ); - }; - const onChangePositionZ = ( positionZ ) => { - setAttributes( { positionZ: positionZ } ); - }; - - const onChangeRotationX = ( rotationX ) => { - setAttributes( { rotationX: rotationX } ); + const onChangePositionX = (positionX) => { + setAttributes({ positionX }); }; - const onChangeRotationY = ( rotationY ) => { - setAttributes( { rotationY: rotationY } ); + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); }; - const onChangeRotationZ = ( rotationZ ) => { - setAttributes( { rotationZ: rotationZ } ); + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); }; - const onChangeScaleX = ( scaleX ) => { - setAttributes( { scaleX: scaleX } ); + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); }; - const onChangeScaleY = ( scaleY ) => { - setAttributes( { scaleY: scaleY } ); + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); }; - const onChangeScaleZ = ( scaleZ ) => { - setAttributes( { scaleZ: scaleZ } ); + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); }; - const onChangeAutoPlay = ( autoPlaySetting ) => { - setAttributes( { autoPlay: autoPlaySetting } ); + const onChangeAutoPlay = (autoPlaySetting) => { + setAttributes({ autoPlay: autoPlaySetting }); }; - const onChangeLoop = ( loopSetting ) => { - setAttributes( { loop: loopSetting } ); + const onChangeLoop = (loopSetting) => { + setAttributes({ loop: loopSetting }); }; - const onChangePositional = ( positionalSetting ) => { - setAttributes( { positional: positionalSetting } ); + const onChangePositional = (positionalSetting) => { + setAttributes({ positional: positionalSetting }); }; - const onChangeVolume = ( volumeSetting ) => { - setAttributes( { volume: volumeSetting } ); + const onChangeVolume = (volumeSetting) => { + setAttributes({ volume: volumeSetting }); }; - const onChangeConeInnerAngle = ( coneInnerAngleSetting ) => { - setAttributes( { coneInnerAngle: coneInnerAngleSetting } ); + const onChangeConeInnerAngle = (coneInnerAngleSetting) => { + setAttributes({ coneInnerAngle: coneInnerAngleSetting }); }; - const onChangeConeOuterAngle = ( coneOuterAngleSetting ) => { - setAttributes( { coneOuterAngle: coneOuterAngleSetting } ); + const onChangeConeOuterAngle = (coneOuterAngleSetting) => { + setAttributes({ coneOuterAngle: coneOuterAngleSetting }); }; - const onChangeConeOuterGain = ( coneOuterGainSetting ) => { - setAttributes( { coneOuterGain: coneOuterGainSetting } ); + const onChangeConeOuterGain = (coneOuterGainSetting) => { + setAttributes({ coneOuterGain: coneOuterGainSetting }); }; - const onChangeDistanceModel = ( distanceModelSetting ) => { - setAttributes( { distanceModel: distanceModelSetting } ); + const onChangeDistanceModel = (distanceModelSetting) => { + setAttributes({ distanceModel: distanceModelSetting }); }; - const onChangeMaxDistance = ( maxDistanceSetting ) => { - setAttributes( { maxDistance: maxDistanceSetting } ); + const onChangeMaxDistance = (maxDistanceSetting) => { + setAttributes({ maxDistance: maxDistanceSetting }); }; - const onChangeRefDistance = ( refDistanceSetting ) => { - setAttributes( { refDistance: refDistanceSetting } ); + const onChangeRefDistance = (refDistanceSetting) => { + setAttributes({ refDistance: refDistanceSetting }); }; - - const onChangeRolloffFactor = ( rolloffFactorSetting ) => { - setAttributes( { rolloffFactor: rolloffFactorSetting } ); + + const onChangeRolloffFactor = (rolloffFactorSetting) => { + setAttributes({ rolloffFactor: rolloffFactorSetting }); }; - - - + const { mediaUpload } = wp.editor; - const ALLOWED_MEDIA_TYPES = [ - 'audio' - ]; + const ALLOWED_MEDIA_TYPES = ["audio"]; const MyDropZone = () => { - const [ hasDropped, setHasDropped ] = useState( false ); + const [hasDropped, setHasDropped] = useState(false); return (
- { hasDropped ? 'Dropped!' : 'Drop an image here or' } + {hasDropped ? "Dropped!" : "Drop an image here or"} - mediaUpload( { + onFilesDrop={(files) => + mediaUpload({ allowedTypes: ALLOWED_MEDIA_TYPES, filesList: files, - onFileChange: ( [ images ] ) => { - onImageSelect( images ); - }, - } ) + onFileChange: ([images]) => { + onImageSelect(images); + } + }) } />
); }; - - function handleClick(objectURL){ - if(objectURL){ + + function handleClick(objectURL) { + if (objectURL) { console.log("success good job", objectURL); onImageSelect(objectURL); } console.log("fail", objectURL); - } + } - return ( -
+
- Select an image or object to attach to your audio. Leave blank for no mesh. + Select an image or object to attach to your + audio. Leave blank for no mesh. - onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="audio" label="Audio File" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.audioUrl } - render={ ( { open } ) => ( - - ) } + )} /> - + - { __( 'Position', 'three-object-viewer' ) } - + {__("Position", "three-object-viewer")} + - onChangePositionX( value ) - } + value={attributes.positionX} + onChange={(value) => onChangePositionX(value)} /> - onChangePositionY( value ) - } + value={attributes.positionY} + onChange={(value) => onChangePositionY(value)} /> - onChangePositionZ( value ) - } + value={attributes.positionZ} + onChange={(value) => onChangePositionZ(value)} /> - + - { __( 'Rotation', 'three-object-viewer' ) } - + {__("Rotation", "three-object-viewer")} + - onChangeRotationX( value ) - } + value={attributes.rotationX} + onChange={(value) => onChangeRotationX(value)} /> - onChangeRotationY( value ) - } + value={attributes.rotationY} + onChange={(value) => onChangeRotationY(value)} /> - onChangeRotationZ( value ) - } + value={attributes.rotationZ} + onChange={(value) => onChangeRotationZ(value)} /> @@ -235,13 +210,13 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { label="AutoPlay" help={ attributes.autoPlay - ? 'Item will autoplay.' - : 'Item will not autoplay.' + ? "Item will autoplay." + : "Item will not autoplay." } - checked={ attributes.autoPlay } - onChange={ ( e ) => { - onChangeAutoPlay( e ); - } } + checked={attributes.autoPlay} + onChange={(e) => { + onChangeAutoPlay(e); + }} /> @@ -249,13 +224,13 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { label="Loop" help={ attributes.loop - ? 'Item will loop.' - : 'Item will not loop.' + ? "Item will loop." + : "Item will not loop." } - checked={ attributes.loop } - onChange={ ( e ) => { - onChangeLoop( e ); - } } + checked={attributes.loop} + onChange={(e) => { + onChangeLoop(e); + }} /> @@ -263,13 +238,13 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { label="Positional" help={ attributes.positional - ? 'Item will be spatial audio.' - : 'Item will be global audio.' + ? "Item will be spatial audio." + : "Item will be global audio." } - checked={ attributes.positional } - onChange={ ( e ) => { - onChangePositional( e ); - } } + checked={attributes.positional} + onChange={(e) => { + onChangePositional(e); + }} /> @@ -281,202 +256,213 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { min={0} step={0.01} // help="position x" - value={ attributes.volume } - onChange={ ( value ) => - onChangeVolume( value ) - } - /> - - - { attributes.positional && ( - - - - onChangeConeInnerAngle( value ) - } - /> - - - - onChangeConeOuterAngle( value ) - } - /> - - - - onChangeConeOuterGain( value ) - } - /> - - - - onChangeDistanceModel( target ) - } + value={attributes.volume} + onChange={(value) => onChangeVolume(value)} /> - - - onChangeMaxDistance( value ) - } - /> - - - - onChangeRefDistance( value ) - } - /> - - - - onChangeRolloffFactor( value ) - } - /> - + {attributes.positional && ( + + + + onChangeConeInnerAngle(value) + } + /> + + + + onChangeConeOuterAngle(value) + } + /> + + + + onChangeConeOuterGain(value) + } + /> + + + + onChangeDistanceModel(target) + } + /> + + + + onChangeMaxDistance(value) + } + /> + + + + onChangeRefDistance(value) + } + /> + + + + onChangeRolloffFactor(value) + } + /> + + )} - { isSelected ? ( + {isSelected ? ( <> - { attributes.videoUrl ? ( + {attributes.videoUrl ? ( <> - - ) : ( -
- - -
- - Select an image: - - - onImageSelect( imageObject ) - } - type="video" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.videoUrl } - render={ ( { open } ) => ( - - ) } /> + + ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="video" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.videoUrl} + render={({ open }) => ( + + )} + /> +
-
- ) } + )} ) : ( <> - { attributes.videoUrl ? ( - <> - - ) : ( -
- -
- - Select an image to render in your environment: - - {/*
- console.log(e.target.value) && setEnteredURL(e.target.value)}> - -
*/} -
- - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.videoUrl } - render={ ( { open } ) => ( - - ) } + {attributes.videoUrl ? ( + <> + + + ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.videoUrl} + render={({ open }) => ( + + )} + /> +
- ) } + )} - ) } + )}
); } diff --git a/blocks/three-audio-block/Edit.test.js b/blocks/three-audio-block/Edit.test.js index ab10afe..ab22d96 100644 --- a/blocks/three-audio-block/Edit.test.js +++ b/blocks/three-audio-block/Edit.test.js @@ -1,57 +1,47 @@ - //Import React -import React from 'react'; +import React from "react"; //Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; +import { render, fireEvent, cleanup } from "@testing-library/react"; //Import component to test -import { Editor } from './Edit'; - +import { Editor } from "./Edit"; describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/three-audio-block/Save.js b/blocks/three-audio-block/Save.js index 2cfa1de..074702c 100644 --- a/blocks/three-audio-block/Save.js +++ b/blocks/three-audio-block/Save.js @@ -1,48 +1,39 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; -export default function save( { attributes } ) { +export default function save({ attributes }) { return ( -
+
<> -
-

- { attributes.audioUrl } +

+

{attributes.audioUrl}

+

{attributes.scaleX}

+

{attributes.scaleY}

+

{attributes.scaleZ}

+

+ {attributes.positionX}

-

- { attributes.scaleX } +

+ {attributes.positionY}

-

- { attributes.scaleY } +

+ {attributes.positionZ}

-

- { attributes.scaleZ } +

+ {attributes.rotationX}

-

- { attributes.positionX } +

+ {attributes.rotationY}

-

- { attributes.positionY } +

+ {attributes.rotationZ}

-

- { attributes.positionZ } +

+ {attributes.aspectHeight}

-

- { attributes.rotationX } +

+ {attributes.aspectWidth}

-

- { attributes.rotationY } -

-

- { attributes.rotationZ } -

-

- { attributes.aspectHeight } -

-

- { attributes.aspectWidth } -

-
diff --git a/blocks/three-audio-block/block.json b/blocks/three-audio-block/block.json index 16cbfea..4f895d1 100644 --- a/blocks/three-audio-block/block.json +++ b/blocks/three-audio-block/block.json @@ -1,6 +1,6 @@ { "name": "three-object-viewer/three-audio-block", - "title": "Three Audio Block", + "title": "3D Audio", "description": "An audio block for your environment", "attributes": { "audioUrl": { @@ -96,7 +96,8 @@ "default":0 } }, - "category": "3D", + "category": "design", + "parent": [ "three-object-viewer/environment" ], "apiVersion": 2, "supports": { "html": false, diff --git a/blocks/three-audio-block/components/ImageEdit.js b/blocks/three-audio-block/components/ImageEdit.js deleted file mode 100644 index 16e566c..0000000 --- a/blocks/three-audio-block/components/ImageEdit.js +++ /dev/null @@ -1,75 +0,0 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect, useMemo } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; -import { - OrthographicCamera, - PerspectiveCamera, - OrbitControls, - useAnimations, -} from '@react-three/drei'; -import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' -import { GLTFAudioEmitterExtension } from 'three-omi'; -import { useAspect } from '@react-three/drei'; - -// Geometry -function Plane(props) { - console.log(props); - const clicked = true; - const [video] = useState(() => Object.assign(document.createElement('video'), { src: props.url, crossOrigin: 'Anonymous', loop: true, muted: true })); - - useEffect(() => void (clicked && video.play()), [video, clicked]); - - return ( - - - - - - - ); -} - -function ThreeObject( props ) { - const [ url, set ] = useState( props.src ); - useEffect( () => { - setTimeout( () => set( props.src ), 2000 ); - }, [] ); - - return Plane(props); -} - -export default function ImageEdit( props ) { - return ( - <> - - - - { props.src && ( - - - - ) } - - - - ); -} diff --git a/blocks/three-audio-block/editor.scss b/blocks/three-audio-block/editor.scss index a41c19e..4a6a4c4 100644 --- a/blocks/three-audio-block/editor.scss +++ b/blocks/three-audio-block/editor.scss @@ -15,12 +15,6 @@ border-radius: 30px; } -.three-object-viewer-button { - background-color:rgb(199, 254, 0); - color: black; - border: solid 1.5px black; -} - .glb-preview-container button:hover{ border-radius: 30px; background-color:rgb(156, 199, 0); diff --git a/blocks/three-audio-block/index.js b/blocks/three-audio-block/index.js index 22b14b6..0b83de5 100644 --- a/blocks/three-audio-block/index.js +++ b/blocks/three-audio-block/index.js @@ -1,11 +1,11 @@ -import { registerBlockType } from '@wordpress/blocks'; -import Edit from './Edit'; -import Save from './Save'; -import { useBlockProps } from '@wordpress/block-editor'; +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; const icon = ( ); -const blockConfig = require( './block.json' ); -registerBlockType( blockConfig.name, { +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { ...blockConfig, - icon: icon, + icon, apiVersion: 2, edit: Edit, save: Save, @@ -27,171 +27,177 @@ registerBlockType( blockConfig.name, { { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', - }, + type: "string", + default: "2d" + } }, - save( props ) { + save(props) { return ( -
+
<>

- { props.attributes.deviceTarget } + {props.attributes.deviceTarget}

- { props.attributes.threeObjectUrl } + {props.attributes.threeObjectUrl}

- { props.attributes.scale } + {props.attributes.scale}

- { props.attributes.bg_color } + {props.attributes.bg_color}

- { props.attributes.zoom } + {props.attributes.zoom}

- { props.attributes.hasZoom ? 1 : 0 } + {props.attributes.hasZoom ? 1 : 0}

- { props.attributes.hasTip ? 1 : 0 } + {props.attributes.hasTip ? 1 : 0}

- { props.attributes.positionY } + {props.attributes.positionY}

- { props.attributes.rotationY } + {props.attributes.rotationY}

- { props.attributes.scale } + {props.attributes.scale}

); - }, + } }, { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', + type: "string", + default: "2d" }, animations: { - type: 'string', - default: '', + type: "string", + default: "" } }, - save( props ) { + save(props) { return ( -
- <> -
-

- { props.attributes.deviceTarget } -

-

- { props.attributes.threeObjectUrl } -

-

{ props.attributes.scale }

-

- { props.attributes.bg_color } -

-

{ props.attributes.zoom }

-

- { props.attributes.hasZoom ? 1 : 0 } -

-

- { props.attributes.hasTip ? 1 : 0 } -

-

- { props.attributes.positionY } -

-

- { props.attributes.rotationY } -

-

{ props.attributes.scale }

-

- { props.attributes.animations } -

-
- -
- ); - }, - }, - ], -} ); +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/three-html-block/Edit.js b/blocks/three-html-block/Edit.js new file mode 100644 index 0000000..2d2087a --- /dev/null +++ b/blocks/three-html-block/Edit.js @@ -0,0 +1,355 @@ +import { __ } from "@wordpress/i18n"; +import React, { useState } from "react"; +import { DropZone } from "@wordpress/components"; +import "./editor.scss"; +import { + useBlockProps, + ColorPalette, + InspectorControls, + MediaUpload +} from "@wordpress/block-editor"; +import { + Panel, + PanelBody, + PanelRow, + RangeControl, + ToggleControl, + SelectControl, + TextControl, + TextareaControl +} from "@wordpress/components"; +import { more } from "@wordpress/icons"; + +export default function Edit({ attributes, setAttributes, isSelected }) { + const onChangePositionX = (positionX) => { + setAttributes({ positionX }); + }; + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); + }; + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); + }; + + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); + }; + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); + }; + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); + }; + + const onChangeScaleX = (scaleX) => { + setAttributes({ scaleX }); + }; + const onChangeScaleY = (scaleY) => { + setAttributes({ scaleY }); + }; + const onChangeScaleZ = (scaleZ) => { + setAttributes({ scaleZ }); + }; + + const onChangeAnimations = (animations) => { + setAttributes({ animations }); + }; + + const onChangeMarkup = (html) => { + setAttributes({ markup: html }); + }; + + const onChangeDestinationUrl = (destination) => { + setAttributes({ destinationUrl: destination }); + }; + + const onImageSelect = (imageObject) => { + setAttributes({ threeObjectUrl: null }); + setAttributes({ threeObjectUrl: imageObject.url }); + }; + + const onChangeCollidable = (collidableSetting) => { + setAttributes({ collidable: collidableSetting }); + }; + + const [enteredURL, setEnteredURL] = useState(""); + + const { mediaUpload } = wp.editor; + + const ALLOWED_MEDIA_TYPES = [ + "model/gltf-binary", + "application/octet-stream" + ]; + + const MyDropZone = () => { + const [hasDropped, setHasDropped] = useState(false); + return ( +
+ {hasDropped ? "Dropped!" : "Drop a glb here or"} + + mediaUpload({ + allowedTypes: ALLOWED_MEDIA_TYPES, + filesList: files, + onFileChange: ([images]) => { + onImageSelect(images); + } + }) + } + /> +
+ ); + }; + + function handleClick(objectURL) { + if (objectURL) { + console.log("success good job", objectURL); + onImageSelect(objectURL); + } + console.log("fail", objectURL); + } + + return ( +
+ + + + + + select a glb file from your media library to + render an object in the canvas: + + + + + onImageSelect(imageObject) + } + type="image" + label="GLB File" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + /> + + + + + onChangeMarkup(value)} + /> + + + { + onChangeCollidable(e); + }} + /> + + + onChangeAnimations(value)} + /> + + + + {__("Position", "three-object-viewer")} + + + + onChangePositionX(value)} + /> + onChangePositionY(value)} + /> + onChangePositionZ(value)} + /> + + + + {__("Rotation", "three-object-viewer")} + + + + onChangeRotationX(value)} + /> + onChangeRotationY(value)} + /> + onChangeRotationZ(value)} + /> + + + + {__("Scale", "three-object-viewer")} + + + + onChangeScaleX(value)} + /> + onChangeScaleY(value)} + /> + onChangeScaleZ(value)} + /> + + + + + {isSelected ? ( + <> + {attributes.threeObjectUrl ? ( +
+
+ + + + + +

+ HTML block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + +

+ HTML block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ )} + + ) : ( + <> + {attributes.threeObjectUrl ? ( +
+
+ + + + + +

+ HTML block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + +

+ HTML block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ )} + + )} +
+ ); +} diff --git a/blocks/three-html-block/Edit.test.js b/blocks/three-html-block/Edit.test.js new file mode 100644 index 0000000..ab22d96 --- /dev/null +++ b/blocks/three-html-block/Edit.test.js @@ -0,0 +1,47 @@ +//Import React +import React from "react"; +//Import test renderer +import { render, fireEvent, cleanup } from "@testing-library/react"; +//Import component to test +import { Editor } from "./Edit"; + +describe("Editor componet", () => { + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); + + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/three-html-block/Save.js b/blocks/three-html-block/Save.js new file mode 100644 index 0000000..0168269 --- /dev/null +++ b/blocks/three-html-block/Save.js @@ -0,0 +1,32 @@ +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; + +export default function save({ attributes }) { + return ( +
+ <> +
+

{attributes.markup}

+

+ {attributes.positionX} +

+

+ {attributes.positionY} +

+

+ {attributes.positionZ} +

+

+ {attributes.rotationX} +

+

+ {attributes.rotationY} +

+

+ {attributes.rotationZ} +

+
+ +
+ ); +} diff --git a/blocks/three-html-block/block.json b/blocks/three-html-block/block.json new file mode 100644 index 0000000..b3ef28d --- /dev/null +++ b/blocks/three-html-block/block.json @@ -0,0 +1,73 @@ +{ + "name": "three-object-viewer/three-html-block", + "title": "3D HTML Canvas", + "description": "A 3D HTML Canvas", + "attributes": { + "scaleX": { + "type": "int", + "default":1 + }, + "scaleY": { + "type": "int", + "default":1 + }, + "scaleZ": { + "type": "int", + "default":1 + }, + "positionX": { + "type": "int", + "default":0 + }, + "positionY": { + "type": "int", + "default":0 + }, + "positionZ": { + "type": "int", + "default":0 + }, + "rotationX": { + "type": "int", + "default":0 + }, + "rotationY": { + "type": "int", + "default":0 + }, + "rotationZ": { + "type": "int", + "default":0 + }, + "threeObjectUrl": { + "type": "string", + "default": null + }, + "destinationUrl": { + "type": "string", + "default": null + }, + "markup": { + "type": "string", + "default": null + }, + "animations": { + "type": "string", + "default": "" + }, + "collidable": { + "type": "boolean", + "default": false + } + }, + "category": "design", + "parent": [ "three-object-viewer/environment" ], + "apiVersion": 2, + "supports": { + "html": false, + "multiple": true + }, + "editorScript": "file:../../build/block-three-html-block.js", + "editorStyle": "file:../../build/block-three-html-block.css", + "style": "file:../../build/block-three-html-block.css" +} diff --git a/blocks/three-html-block/editor.scss b/blocks/three-html-block/editor.scss new file mode 100644 index 0000000..b89aa07 --- /dev/null +++ b/blocks/three-html-block/editor.scss @@ -0,0 +1,49 @@ + + .wp-block-three-object-block { + border: 1px dotted #f00; +} + .glb-preview-container { + padding: 100px; + text-align: center; + align-items: center; + align-content: center; + background-color:#f2f2f2; + } + + .glb-preview-container button{ + padding: 15px; + border-radius: 30px; +} + +.glb-preview-container button:hover{ + border-radius: 30px; + background-color:rgb(156, 199, 0); + cursor: pointer; +} +.three-object-block-tip { + overflow-wrap: break-word; + background-color: black; + color: white; + padding: 10px; + font-weight: 500; + max-width: 160px; + font-size: 12px; + margin-top: 0px; + margin: 0 auto; + text-align: center; +} + +.three-object-block-url-input { + padding-bottom: 20px; +} + +.three-object-block-url-input input{ + height: 40px; +} + +.block-editor-block-inspector .components-base-control.position-inputs:last-child { + margin-bottom: 24px !important; +} +.block-editor-block-inspector .components-base-control.position-inputs { + padding-right: 5px; +} diff --git a/blocks/three-html-block/index.js b/blocks/three-html-block/index.js new file mode 100644 index 0000000..0b83de5 --- /dev/null +++ b/blocks/three-html-block/index.js @@ -0,0 +1,203 @@ +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; + +const icon = ( + + + + + +); + +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { + ...blockConfig, + icon, + apiVersion: 2, + edit: Edit, + save: Save, + deprecated: [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/three-html-block/init.php b/blocks/three-html-block/init.php new file mode 100644 index 0000000..b45fe98 --- /dev/null +++ b/blocks/three-html-block/init.php @@ -0,0 +1,10 @@ + { +export default function Edit({ attributes, setAttributes, isSelected }) { + const onImageSelect = (imageObject) => { console.log(imageObject); - setAttributes( { imageUrl: null } ); - setAttributes( { imageUrl: imageObject.url, aspectHeight: imageObject.height, aspectWidth: imageObject.width } ); + setAttributes({ imageUrl: null }); + setAttributes({ + imageUrl: imageObject.url, + aspectHeight: imageObject.height, + aspectWidth: imageObject.width + }); }; - const onChangePositionX = ( positionX ) => { - setAttributes( { positionX: positionX } ); + const onChangePositionX = (positionX) => { + setAttributes({ positionX }); }; - const onChangePositionY = ( positionY ) => { - setAttributes( { positionY: positionY } ); + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); }; - const onChangePositionZ = ( positionZ ) => { - setAttributes( { positionZ: positionZ } ); + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); }; - const onChangeRotationX = ( rotationX ) => { - setAttributes( { rotationX: rotationX } ); + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); }; - const onChangeRotationY = ( rotationY ) => { - setAttributes( { rotationY: rotationY } ); + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); }; - const onChangeRotationZ = ( rotationZ ) => { - setAttributes( { rotationZ: rotationZ } ); + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); }; - const onChangeScaleX = ( scaleX ) => { - setAttributes( { scaleX: scaleX } ); + const onChangeScaleX = (scaleX) => { + setAttributes({ scaleX }); }; - const onChangeScaleY = ( scaleY ) => { - setAttributes( { scaleY: scaleY } ); + const onChangeScaleY = (scaleY) => { + setAttributes({ scaleY }); }; - const onChangeScaleZ = ( scaleZ ) => { - setAttributes( { scaleZ: scaleZ } ); + const onChangeScaleZ = (scaleZ) => { + setAttributes({ scaleZ }); }; - const onChangeCollidable = ( zoomSetting ) => { - setAttributes( { hasZoom: zoomSetting } ); + const onChangeCollidable = (setting) => { + setAttributes({ collidable: setting }); }; + const onChangeTransparent = (transparent) => { + setAttributes({ transparent }); + }; const { mediaUpload } = wp.editor; - const ALLOWED_MEDIA_TYPES = [ - 'image' - ]; + const ALLOWED_MEDIA_TYPES = ["image"]; const MyDropZone = () => { - const [ hasDropped, setHasDropped ] = useState( false ); + const [hasDropped, setHasDropped] = useState(false); return (
- { hasDropped ? 'Dropped!' : 'Drop an image here or' } + {hasDropped ? "Dropped!" : "Drop an image here or"} - mediaUpload( { + onFilesDrop={(files) => + mediaUpload({ allowedTypes: ALLOWED_MEDIA_TYPES, filesList: files, - onFileChange: ( [ images ] ) => { - onImageSelect( images ); - }, - } ) + onFileChange: ([images]) => { + onImageSelect(images); + } + }) } />
); }; - - function handleClick(objectURL){ - if(objectURL){ + + function handleClick(objectURL) { + if (objectURL) { console.log("success good job", objectURL); onImageSelect(objectURL); } console.log("fail", objectURL); - } + } - return ( -
+
@@ -114,201 +115,229 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { - onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="image" label="Image File" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.imageUrl } - render={ ( { open } ) => ( - - ) } + )} /> + + { + onChangeTransparent(e); + }} + /> + - onChangePositionX( value ) - } + value={attributes.positionX} + onChange={(value) => onChangePositionX(value)} /> - onChangePositionY( value ) - } + value={attributes.positionY} + onChange={(value) => onChangePositionY(value)} /> - onChangePositionZ( value ) - } + value={attributes.positionZ} + onChange={(value) => onChangePositionZ(value)} /> - + - { __( 'Rotation', 'three-object-viewer' ) } - + {__("Rotation", "three-object-viewer")} + - onChangeRotationX( value ) - } + value={attributes.rotationX} + onChange={(value) => onChangeRotationX(value)} /> - onChangeRotationY( value ) - } + value={attributes.rotationY} + onChange={(value) => onChangeRotationY(value)} /> - onChangeRotationZ( value ) - } + value={attributes.rotationZ} + onChange={(value) => onChangeRotationZ(value)} /> - + - { __( 'Scale', 'three-object-viewer' ) } - + {__("Scale", "three-object-viewer")} + - onChangeScaleX( value ) - } + value={attributes.scaleX} + onChange={(value) => onChangeScaleX(value)} /> - onChangeScaleY( value ) - } + value={attributes.scaleY} + onChange={(value) => onChangeScaleY(value)} /> - onChangeScaleZ( value ) - } + value={attributes.scaleZ} + onChange={(value) => onChangeScaleZ(value)} /> - { isSelected ? ( + {isSelected ? ( <> - { attributes.imageUrl ? ( - <> - - ) : ( -
- - -
- - Select an image: - - - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.imageUrl } - render={ ( { open } ) => ( - - ) } - /> + {attributes.imageUrl ? ( +
+
+ + + + + +

+ Image block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.imageUrl} + render={({ open }) => ( + + )} + /> +
- ) } + )} ) : ( <> - { attributes.imageUrl ? ( - <> - - ) : ( -
- -
- - Select an image to render in your environment: - - {/*
- console.log(e.target.value) && setEnteredURL(e.target.value)}> - -
*/} + {attributes.imageUrl ? ( +
+
+ + + + + +

+ Image block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.imageUrl} + render={({ open }) => ( + + )} + />
- - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.imageUrl } - render={ ( { open } ) => ( - - ) } - />
- ) } + )} - ) } + )}
); } diff --git a/blocks/three-image-block/Edit.test.js b/blocks/three-image-block/Edit.test.js index ab10afe..ab22d96 100644 --- a/blocks/three-image-block/Edit.test.js +++ b/blocks/three-image-block/Edit.test.js @@ -1,57 +1,47 @@ - //Import React -import React from 'react'; +import React from "react"; //Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; +import { render, fireEvent, cleanup } from "@testing-library/react"; //Import component to test -import { Editor } from './Edit'; - +import { Editor } from "./Edit"; describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/three-image-block/Save.js b/blocks/three-image-block/Save.js index 6c7a9ad..8b1ec5b 100644 --- a/blocks/three-image-block/Save.js +++ b/blocks/three-image-block/Save.js @@ -1,48 +1,39 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; -export default function save( { attributes } ) { +export default function save({ attributes }) { return ( -
+
<>
-

- { attributes.imageUrl } -

-

- { attributes.scaleX } -

-

- { attributes.scaleY } -

-

- { attributes.scaleZ } -

+

{attributes.imageUrl}

+

{attributes.scaleX}

+

{attributes.scaleY}

+

{attributes.scaleZ}

- { attributes.positionX } + {attributes.positionX}

- { attributes.positionY } + {attributes.positionY}

- { attributes.positionZ } + {attributes.positionZ}

- { attributes.rotationX } + {attributes.rotationX}

- { attributes.rotationY } + {attributes.rotationY}

- { attributes.rotationZ } + {attributes.rotationZ}

- { attributes.aspectHeight } + {attributes.aspectHeight}

- { attributes.aspectWidth } + {attributes.aspectWidth}

-
diff --git a/blocks/three-image-block/block.json b/blocks/three-image-block/block.json index b3e904f..1d91721 100644 --- a/blocks/three-image-block/block.json +++ b/blocks/three-image-block/block.json @@ -1,12 +1,16 @@ { "name": "three-object-viewer/three-image-block", - "title": "Three Image Block", + "title": "3D Image", "description": "An image block for your environment", "attributes": { "imageUrl": { "type": "string", "default": null }, + "transparent": { + "type": "boolean", + "default": false + }, "scaleX": { "type": "int", "default":1 @@ -52,7 +56,8 @@ "default":0 } }, - "category": "3D", + "category": "design", + "parent": [ "three-object-viewer/environment" ], "apiVersion": 2, "supports": { "html": false, diff --git a/blocks/three-image-block/components/ImageEdit.js b/blocks/three-image-block/components/ImageEdit.js deleted file mode 100644 index f1d475a..0000000 --- a/blocks/three-image-block/components/ImageEdit.js +++ /dev/null @@ -1,69 +0,0 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; -import { - OrthographicCamera, - PerspectiveCamera, - OrbitControls, - useAnimations, -} from '@react-three/drei'; -import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' -import { GLTFAudioEmitterExtension } from 'three-omi'; -import { useAspect } from '@react-three/drei' - - // Geometry -function Plane(props) { - const texture_1 = useLoader(THREE.TextureLoader, props.url); - - return ( - - - - - ); -} - -function ThreeObject( props ) { - const [ url, set ] = useState( props.src ); - useEffect( () => { - setTimeout( () => set( props.src ), 2000 ); - }, [] ); - - return Plane(props); -} - -export default function ImageEdit( props ) { - return ( - <> - - - - { props.src && ( - - - - ) } - - - - ); -} diff --git a/blocks/three-image-block/editor.scss b/blocks/three-image-block/editor.scss index a41c19e..9fd1cb9 100644 --- a/blocks/three-image-block/editor.scss +++ b/blocks/three-image-block/editor.scss @@ -16,16 +16,10 @@ } .three-object-viewer-button { - background-color:rgb(199, 254, 0); color: black; border: solid 1.5px black; } -.glb-preview-container button:hover{ - border-radius: 30px; - background-color:rgb(156, 199, 0); - cursor: pointer; -} .three-object-block-tip { overflow-wrap: break-word; background-color: black; diff --git a/blocks/three-image-block/index.js b/blocks/three-image-block/index.js index 22b14b6..0b83de5 100644 --- a/blocks/three-image-block/index.js +++ b/blocks/three-image-block/index.js @@ -1,11 +1,11 @@ -import { registerBlockType } from '@wordpress/blocks'; -import Edit from './Edit'; -import Save from './Save'; -import { useBlockProps } from '@wordpress/block-editor'; +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; const icon = ( ); -const blockConfig = require( './block.json' ); -registerBlockType( blockConfig.name, { +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { ...blockConfig, - icon: icon, + icon, apiVersion: 2, edit: Edit, save: Save, @@ -27,171 +27,177 @@ registerBlockType( blockConfig.name, { { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', - }, + type: "string", + default: "2d" + } }, - save( props ) { + save(props) { return ( -
+
<>

- { props.attributes.deviceTarget } + {props.attributes.deviceTarget}

- { props.attributes.threeObjectUrl } + {props.attributes.threeObjectUrl}

- { props.attributes.scale } + {props.attributes.scale}

- { props.attributes.bg_color } + {props.attributes.bg_color}

- { props.attributes.zoom } + {props.attributes.zoom}

- { props.attributes.hasZoom ? 1 : 0 } + {props.attributes.hasZoom ? 1 : 0}

- { props.attributes.hasTip ? 1 : 0 } + {props.attributes.hasTip ? 1 : 0}

- { props.attributes.positionY } + {props.attributes.positionY}

- { props.attributes.rotationY } + {props.attributes.rotationY}

- { props.attributes.scale } + {props.attributes.scale}

); - }, + } }, { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', + type: "string", + default: "2d" }, animations: { - type: 'string', - default: '', + type: "string", + default: "" } }, - save( props ) { + save(props) { return ( -
- <> -
-

- { props.attributes.deviceTarget } -

-

- { props.attributes.threeObjectUrl } -

-

{ props.attributes.scale }

-

- { props.attributes.bg_color } -

-

{ props.attributes.zoom }

-

- { props.attributes.hasZoom ? 1 : 0 } -

-

- { props.attributes.hasTip ? 1 : 0 } -

-

- { props.attributes.positionY } -

-

- { props.attributes.rotationY } -

-

{ props.attributes.scale }

-

- { props.attributes.animations } -

-
- -
- ); - }, - }, - ], -} ); +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/three-object-block/Edit.js b/blocks/three-object-block/Edit.js index 9127305..893438d 100644 --- a/blocks/three-object-block/Edit.js +++ b/blocks/three-object-block/Edit.js @@ -68,6 +68,7 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { const ALLOWED_MEDIA_TYPES = [ 'model/gltf-binary', 'application/octet-stream', + 'model/vnd.usdz+zip' ]; const MyDropZone = () => { @@ -104,13 +105,13 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { - select a glb file from your media library to + Select a 3D file from your media library to render an object in the canvas: @@ -266,7 +267,7 @@ export default function Edit( { attributes, setAttributes, isSelected } ) {
- Select a glb file to render in the canvas: + Select a 3D file to render in the canvas: {/*
setEnteredURL(e.target.value)}> @@ -317,7 +318,7 @@ export default function Edit( { attributes, setAttributes, isSelected } ) {
- Select a glb file to render in the canvas: + Select a 3D file to render in the canvas: {/*
console.log(e.target.value) && setEnteredURL(e.target.value)}> diff --git a/blocks/three-object-block/block.json b/blocks/three-object-block/block.json index 27ff503..49d2eb3 100644 --- a/blocks/three-object-block/block.json +++ b/blocks/three-object-block/block.json @@ -1,7 +1,7 @@ { "name": "three-object-viewer/three-object-block", "title": "Three Object Block", - "description": "A 3D object viewer focused on glTF", + "description": "A 3D object viewer for WordPress", "attributes": { "bg_color": { "type": "string", @@ -48,7 +48,7 @@ "default": "" } }, - "category": "3D", + "category": "design", "apiVersion": 2, "supports": { "html": false, diff --git a/blocks/three-object-block/components/ThreeObjectEdit.js b/blocks/three-object-block/components/ThreeObjectEdit.js index e21206c..5e1b2ce 100644 --- a/blocks/three-object-block/components/ThreeObjectEdit.js +++ b/blocks/three-object-block/components/ThreeObjectEdit.js @@ -1,4 +1,5 @@ import * as THREE from 'three'; +import { USDZLoader } from 'three/examples/jsm/loaders/USDZLoader'; import React, { Suspense, useRef, useState, useEffect } from 'react'; import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; @@ -14,6 +15,7 @@ import { GLTFAudioEmitterExtension } from 'three-omi'; function ThreeObject( props ) { const [ url, set ] = useState( props.url ); + const {scene} = useThree(); useEffect( () => { setTimeout( () => set( props.url ), 2000 ); }, [] ); @@ -23,6 +25,14 @@ function ThreeObject( props ) { camera.add( listener ); } ); + // USDZ loader. + if(props.url.split(/[#?]/)[0].split('.').pop().trim() === "usdz") { + + const usdz = useLoader( USDZLoader, url); + + return ; + } + const gltf = useLoader( GLTFLoader, url, ( loader ) => { loader.register( ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) @@ -31,10 +41,8 @@ function ThreeObject( props ) { return new VRMLoaderPlugin( parser ); - } ); - + } ); } ); - const { actions } = useAnimations( gltf.animations, gltf.scene ); const animationList = props.animations ? props.animations.split( ',' ) : ''; @@ -58,6 +66,7 @@ function ThreeObject( props ) { vrm.scene.scale.set( props.scale, props.scale, props.scale ); return ; } + gltf.scene.position.set( 0, props.positionY, 0 ); gltf.scene.rotation.set( 0, props.rotationY, 0 ); gltf.scene.scale.set( props.scale, props.scale, props.scale ); diff --git a/blocks/three-object-block/components/ThreeObjectFront.js b/blocks/three-object-block/components/ThreeObjectFront.js index 3e8fabc..f7868ae 100644 --- a/blocks/three-object-block/components/ThreeObjectFront.js +++ b/blocks/three-object-block/components/ThreeObjectFront.js @@ -3,6 +3,7 @@ import React, { Suspense, useRef, useState, useEffect } from 'react'; import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; import { Physics, RigidBody } from "@react-three/rapier"; +import { USDZLoader } from 'three/examples/jsm/loaders/USDZLoader'; import { OrthographicCamera, @@ -18,7 +19,7 @@ import { } from '@react-three/xr'; import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' import TeleportTravel from './TeleportTravel'; -import defaultVRM from '../../../inc/avatars/mummy.vrm'; +import defaultVRM from '../../../inc/avatars/3ov_default_avatar.vrm'; function SavedObject( props ) { const [ url, set ] = useState( props.url ); @@ -31,6 +32,14 @@ function SavedObject( props ) { camera.add( listener ); } ); + // USDZ loader. + if(props.url.split(/[#?]/)[0].split('.').pop().trim() === "usdz") { + + const usdz = useLoader( USDZLoader, url); + + return ; + } + const gltf = useLoader( GLTFLoader, url, ( loader ) => { loader.register( ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) @@ -39,17 +48,17 @@ function SavedObject( props ) { return new VRMLoaderPlugin( parser ); } ); } ); - const fallbackURL = threeObjectPlugin + defaultVRM; - const playerURL = props.playerData.vrm ? props.playerData.vrm : fallbackURL + // const fallbackURL = threeObjectPlugin + defaultVRM; + // const playerURL = props.playerData.vrm ? props.playerData.vrm : fallbackURL - const someSceneState = useLoader( GLTFLoader, playerURL, ( loader ) => { - loader.register( - ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) - ); - loader.register( ( parser ) => { - return new VRMLoaderPlugin( parser ); - } ); - } ); + // const someSceneState = useLoader( GLTFLoader, playerURL, ( loader ) => { + // loader.register( + // ( parser ) => new GLTFAudioEmitterExtension( parser, listener ) + // ); + // loader.register( ( parser ) => { + // return new VRMLoaderPlugin( parser ); + // } ); + // } ); const { actions } = useAnimations( gltf.animations, gltf.scene ); @@ -63,31 +72,32 @@ function SavedObject( props ) { } ); } }, [] ); - if(someSceneState?.userData?.gltfExtensions?.VRM){ - const playerController = someSceneState.userData.vrm; - const { camera } = useThree(); - useFrame(() => { - const offset = camera.position.z - 3; - playerController.scene.position.set( camera.position.x, camera.position.y, offset ); - playerController.scene.rotation.set( camera.rotation.x, camera.rotation.y, camera.rotation.z ); - }); - VRMUtils.rotateVRM0( playerController ); - const rotationVRM = playerController.scene.rotation.y; - playerController.scene.rotation.set( 0, rotationVRM, 0 ); - playerController.scene.scale.set( 1, 1, 1 ); - gltf.scene.position.set( 0, props.positionY, 0 ); - gltf.scene.rotation.set( 0, props.rotationY, 0 ); - gltf.scene.scale.set( props.scale, props.scale, props.scale ); - return <>; - } - if(gltf?.userData?.gltfExtensions?.VRM){ - const vrm = gltf.userData.vrm; - vrm.scene.position.set( 0, props.positionY, 0 ); - VRMUtils.rotateVRM0( vrm ); - const rotationVRM = vrm.scene.rotation.y + parseFloat(props.rotationY); - vrm.scene.rotation.set( 0, rotationVRM, 0 ); - vrm.scene.scale.set( props.scale, props.scale, props.scale ); - return ; + + // if(someSceneState?.userData?.gltfExtensions?.VRM){ + // const playerController = someSceneState.userData.vrm; + // const { camera } = useThree(); + // useFrame(() => { + // const offset = camera.position.z - 3; + // playerController.scene.position.set( camera.position.x, camera.position.y, offset ); + // playerController.scene.rotation.set( camera.rotation.x, camera.rotation.y, camera.rotation.z ); + // }); + // VRMUtils.rotateVRM0( playerController ); + // const rotationVRM = playerController.scene.rotation.y; + // playerController.scene.rotation.set( 0, rotationVRM, 0 ); + // playerController.scene.scale.set( 1, 1, 1 ); + // gltf.scene.position.set( 0, props.positionY, 0 ); + // gltf.scene.rotation.set( 0, props.rotationY, 0 ); + // gltf.scene.scale.set( props.scale, props.scale, props.scale ); + // return <>; + // } + if( gltf?.userData?.gltfExtensions?.VRM ){ + const vrm = gltf.userData.vrm; + vrm.scene.position.set( 0, props.positionY, 0 ); + VRMUtils.rotateVRM0( vrm ); + const rotationVRM = vrm.scene.rotation.y + parseFloat(props.rotationY); + vrm.scene.rotation.set( 0, rotationVRM, 0 ); + vrm.scene.scale.set( props.scale, props.scale, props.scale ); + return ; } gltf.scene.position.set( 0, props.positionY, 0 ); gltf.scene.rotation.set( 0, props.rotationY, 0 ); @@ -98,7 +108,7 @@ function SavedObject( props ) { function Floor( props ) { return ( - + { + setAttributes({ positionX }); + }; + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); + }; + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); + }; + + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); + }; + + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); + }; + + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); + }; + + const onChangeScaleX = (scaleX) => { + setAttributes({ scaleX }); + }; + + const onChangeScaleY = (scaleY) => { + setAttributes({ scaleY }); + }; + + const onChangeScaleZ = (scaleZ) => { + setAttributes({ scaleZ }); + }; + + const onChangeAnimations = (animations) => { + setAttributes({ animations }); + }; + + const onChangeLabel = (label) => { + setAttributes({ label }); + }; + + const onChangeLabelX = (labelX) => { + setAttributes({ labelOffsetX: labelX }); + }; + + const onChangeLabelY = (labelY) => { + setAttributes({ labelOffsetY: labelY }); + }; + + const onChangeLabelZ = (labelZ) => { + setAttributes({ labelOffsetZ: labelZ }); + }; + const onChangeLabelTextcolor = (labelColor) => { + setAttributes({ labelTextColor: labelColor }); + }; + + const onChangeDestinationUrl = (destination) => { + setAttributes({ destinationUrl: destination }); + }; + + const onImageSelect = (imageObject) => { + setAttributes({ threeObjectUrl: null }); + setAttributes({ threeObjectUrl: imageObject.url }); + }; + + const onChangeCollidable = (collidableSetting) => { + setAttributes({ collidable: collidableSetting }); + }; + + const [enteredURL, setEnteredURL] = useState(""); + + const { mediaUpload } = wp.editor; + + const ALLOWED_MEDIA_TYPES = [ + "model/gltf-binary", + "application/octet-stream" + ]; + + const MyDropZone = () => { + const [hasDropped, setHasDropped] = useState(false); + return ( +
+ {hasDropped ? "Dropped!" : "Drop a glb here or"} + + mediaUpload({ + allowedTypes: ALLOWED_MEDIA_TYPES, + filesList: files, + onFileChange: ([images]) => { + onImageSelect(images); + } + }) + } + /> +
+ ); + }; + + function handleClick(objectURL) { + if (objectURL) { + console.log("success good job", objectURL); + onImageSelect(objectURL); + } + console.log("fail", objectURL); + } + + return ( +
+ + + + + + select a glb file from your media library to + render an object in the canvas: + + + + + onImageSelect(imageObject) + } + type="image" + label="GLB File" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + /> + + + + + { + onChangeCollidable(e); + }} + /> + + + onChangeAnimations(value)} + /> + + + + onChangeDestinationUrl(value) + } + /> + + + onChangeLabel(value)} + /> + + + + + + + {__("Label Offset", "three-object-viewer")} + + + + onChangeLabelX(value)} + /> + onChangeLabelY(value)} + /> + onChangeLabelZ(value)} + /> + + + onChangePositionX(value)} + /> + onChangePositionY(value)} + /> + onChangePositionZ(value)} + /> + + + + {__("Rotation", "three-object-viewer")} + + + + onChangeRotationX(value)} + /> + onChangeRotationY(value)} + /> + onChangeRotationZ(value)} + /> + + + + {__("Scale", "three-object-viewer")} + + + + onChangeScaleX(value)} + /> + onChangeScaleY(value)} + /> + onChangeScaleZ(value)} + /> + + + + + {isSelected ? ( + <> + {attributes.threeObjectUrl ? ( +
+
+ + + + + +

+ Portal block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + /> +
+
+ )} + + ) : ( + <> + {attributes.threeObjectUrl ? ( +
+
+ + + + + +

+ Portal block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.threeObjectUrl} + render={({ open }) => ( + + )} + /> +
+
+ )} + + )} +
+ ); +} diff --git a/blocks/three-portal-block/Edit.test.js b/blocks/three-portal-block/Edit.test.js new file mode 100644 index 0000000..ab22d96 --- /dev/null +++ b/blocks/three-portal-block/Edit.test.js @@ -0,0 +1,47 @@ +//Import React +import React from "react"; +//Import test renderer +import { render, fireEvent, cleanup } from "@testing-library/react"; +//Import component to test +import { Editor } from "./Edit"; + +describe("Editor componet", () => { + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); + + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); + + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/three-portal-block/Save.js b/blocks/three-portal-block/Save.js new file mode 100644 index 0000000..61d4ff1 --- /dev/null +++ b/blocks/three-portal-block/Save.js @@ -0,0 +1,64 @@ +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; + +export default function save({ attributes }) { + return ( +
+ <> +
+

+ {attributes.threeObjectUrl} +

+

+ {attributes.destinationUrl} +

+

+ {attributes.scaleX} +

+

+ {attributes.scaleY} +

+

+ {attributes.scaleZ} +

+

+ {attributes.positionX} +

+

+ {attributes.positionY} +

+

+ {attributes.positionZ} +

+

+ {attributes.rotationX} +

+

+ {attributes.rotationY} +

+

+ {attributes.rotationZ} +

+

+ {attributes.animations} +

+

+ {attributes.label} +

+

+ {attributes.labelOffsetX} +

+

+ {attributes.labelOffsetY} +

+

+ {attributes.labelOffsetZ} +

+

+ {attributes.labelTextColor} +

+
+ +
+ ); +} diff --git a/blocks/three-portal-block/block.json b/blocks/three-portal-block/block.json new file mode 100644 index 0000000..34d00e6 --- /dev/null +++ b/blocks/three-portal-block/block.json @@ -0,0 +1,89 @@ +{ + "name": "three-object-viewer/three-portal-block", + "title": "3D Portal", + "description": "A 3D portal", + "attributes": { + "scaleX": { + "type": "int", + "default":1 + }, + "scaleY": { + "type": "int", + "default":1 + }, + "scaleZ": { + "type": "int", + "default":1 + }, + "positionX": { + "type": "int", + "default":0 + }, + "positionY": { + "type": "int", + "default":0 + }, + "positionZ": { + "type": "int", + "default":0 + }, + "rotationX": { + "type": "int", + "default":0 + }, + "rotationY": { + "type": "int", + "default":0 + }, + "rotationZ": { + "type": "int", + "default":0 + }, + "threeObjectUrl": { + "type": "string", + "default": null + }, + "destinationUrl": { + "type": "string", + "default": null + }, + "label": { + "type": "string", + "default": null + }, + "labelTextColor": { + "type": "string", + "default": "0x000000" + }, + "labelOffsetX": { + "type": "int", + "default":0 + }, + "labelOffsetY": { + "type": "int", + "default":0 + }, + "labelOffsetZ": { + "type": "int", + "default":0 + }, + "animations": { + "type": "string", + "default": "" + }, + "collidable": { + "type": "boolean", + "default": false + } + }, + "category": "design", + "parent": [ "three-object-viewer/environment" ], + "apiVersion": 2, + "supports": { + "html": false, + "multiple": true + }, + "editorScript": "file:../../build/block-three-portal-block.js", + "editorStyle": "file:../../build/block-three-portal-block.css", + "style": "file:../../build/block-three-portal-block.css" +} diff --git a/blocks/three-portal-block/editor.scss b/blocks/three-portal-block/editor.scss new file mode 100644 index 0000000..b89aa07 --- /dev/null +++ b/blocks/three-portal-block/editor.scss @@ -0,0 +1,49 @@ + + .wp-block-three-object-block { + border: 1px dotted #f00; +} + .glb-preview-container { + padding: 100px; + text-align: center; + align-items: center; + align-content: center; + background-color:#f2f2f2; + } + + .glb-preview-container button{ + padding: 15px; + border-radius: 30px; +} + +.glb-preview-container button:hover{ + border-radius: 30px; + background-color:rgb(156, 199, 0); + cursor: pointer; +} +.three-object-block-tip { + overflow-wrap: break-word; + background-color: black; + color: white; + padding: 10px; + font-weight: 500; + max-width: 160px; + font-size: 12px; + margin-top: 0px; + margin: 0 auto; + text-align: center; +} + +.three-object-block-url-input { + padding-bottom: 20px; +} + +.three-object-block-url-input input{ + height: 40px; +} + +.block-editor-block-inspector .components-base-control.position-inputs:last-child { + margin-bottom: 24px !important; +} +.block-editor-block-inspector .components-base-control.position-inputs { + padding-right: 5px; +} diff --git a/blocks/three-portal-block/index.js b/blocks/three-portal-block/index.js new file mode 100644 index 0000000..0b83de5 --- /dev/null +++ b/blocks/three-portal-block/index.js @@ -0,0 +1,203 @@ +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; + +const icon = ( + + + + + +); + +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { + ...blockConfig, + icon, + apiVersion: 2, + edit: Edit, + save: Save, + deprecated: [ + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+
+ +
+ ); + } + }, + { + attributes: { + bg_color: { + type: "string", + default: "#FFFFFF" + }, + zoom: { + type: "integer", + default: 90 + }, + scale: { + type: "integer", + default: 1 + }, + positionX: { + type: "integer", + default: 0 + }, + positionY: { + type: "integer", + default: 0 + }, + rotationY: { + type: "integer", + default: 0 + }, + threeObjectUrl: { + type: "string", + default: null + }, + hasZoom: { + type: "bool", + default: false + }, + hasTip: { + type: "bool", + default: true + }, + deviceTarget: { + type: "string", + default: "2d" + }, + animations: { + type: "string", + default: "" + } + }, + save(props) { + return ( +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/blocks/three-portal-block/init.php b/blocks/three-portal-block/init.php new file mode 100644 index 0000000..6ed001c --- /dev/null +++ b/blocks/three-portal-block/init.php @@ -0,0 +1,10 @@ + { +export default function Edit({ attributes, setAttributes, isSelected }) { + const onImageSelect = (imageObject) => { console.log(imageObject); - setAttributes( { audioUrl: null } ); - setAttributes( { audioUrl: imageObject.url, aspectHeight: imageObject.height, aspectWidth: imageObject.width } ); + setAttributes({ videoUrl: null }); + setAttributes({ + videoUrl: imageObject.url, + aspectHeight: imageObject.height, + aspectWidth: imageObject.width + }); }; - const onChangePositionX = ( positionX ) => { - setAttributes( { positionX: positionX } ); + const onChangePositionX = (positionX) => { + setAttributes({ positionX }); }; - const onChangePositionY = ( positionY ) => { - setAttributes( { positionY: positionY } ); + const onChangePositionY = (positionY) => { + setAttributes({ positionY }); }; - const onChangePositionZ = ( positionZ ) => { - setAttributes( { positionZ: positionZ } ); + const onChangePositionZ = (positionZ) => { + setAttributes({ positionZ }); }; - const onChangeRotationX = ( rotationX ) => { - setAttributes( { rotationX: rotationX } ); + const onChangeRotationX = (rotationX) => { + setAttributes({ rotationX }); }; - const onChangeRotationY = ( rotationY ) => { - setAttributes( { rotationY: rotationY } ); + const onChangeRotationY = (rotationY) => { + setAttributes({ rotationY }); }; - const onChangeRotationZ = ( rotationZ ) => { - setAttributes( { rotationZ: rotationZ } ); + const onChangeRotationZ = (rotationZ) => { + setAttributes({ rotationZ }); }; - const onChangeScaleX = ( scaleX ) => { - setAttributes( { scaleX: scaleX } ); + const onChangeScaleX = (scaleX) => { + setAttributes({ scaleX }); }; - const onChangeScaleY = ( scaleY ) => { - setAttributes( { scaleY: scaleY } ); + const onChangeScaleY = (scaleY) => { + setAttributes({ scaleY }); }; - const onChangeScaleZ = ( scaleZ ) => { - setAttributes( { scaleZ: scaleZ } ); + const onChangeScaleZ = (scaleZ) => { + setAttributes({ scaleZ }); }; - const onChangeAutoPlay = ( autoPlaySetting ) => { - setAttributes( { autoPlay: autoPlaySetting } ); + const onChangeAutoPlay = (autoPlaySetting) => { + setAttributes({ autoPlay: autoPlaySetting }); }; - const { mediaUpload } = wp.editor; - const ALLOWED_MEDIA_TYPES = [ - 'video' - ]; + const ALLOWED_MEDIA_TYPES = ["video"]; const MyDropZone = () => { - const [ hasDropped, setHasDropped ] = useState( false ); + const [hasDropped, setHasDropped] = useState(false); return (
- { hasDropped ? 'Dropped!' : 'Drop an image here or' } + {hasDropped ? "Dropped!" : "Drop an image here or"} - mediaUpload( { + onFilesDrop={(files) => + mediaUpload({ allowedTypes: ALLOWED_MEDIA_TYPES, filesList: files, - onFileChange: ( [ images ] ) => { - onImageSelect( images ); - }, - } ) + onFileChange: ([images]) => { + onImageSelect(images); + } + }) } />
); }; - - function handleClick(objectURL){ - if(objectURL){ + + function handleClick(objectURL) { + if (objectURL) { console.log("success good job", objectURL); onImageSelect(objectURL); } console.log("fail", objectURL); - } + } - return ( -
+
@@ -114,20 +111,20 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { - onImageSelect( imageObject ) + onSelect={(imageObject) => + onImageSelect(imageObject) } type="image" label="Image File" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.audioUrl } - render={ ( { open } ) => ( - - ) } + )} /> @@ -135,13 +132,13 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { label="AutoPlay" help={ attributes.autoPlay - ? 'Item will autoplay.' - : 'Item will not autoplay.' + ? "Item will autoplay." + : "Item will not autoplay." } - checked={ attributes.autoPlay } - onChange={ ( e ) => { - onChangeAutoPlay( e ); - } } + checked={attributes.autoPlay} + onChange={(e) => { + onChangeAutoPlay(e); + }} /> @@ -149,180 +146,194 @@ export default function Edit( { attributes, setAttributes, isSelected } ) { className="position-inputs" label="X" // help="position x" - value={ attributes.positionX } - onChange={ ( value ) => - onChangePositionX( value ) - } + value={attributes.positionX} + onChange={(value) => onChangePositionX(value)} /> - onChangePositionY( value ) - } + value={attributes.positionY} + onChange={(value) => onChangePositionY(value)} /> - onChangePositionZ( value ) - } + value={attributes.positionZ} + onChange={(value) => onChangePositionZ(value)} /> - + - { __( 'Rotation', 'three-object-viewer' ) } - + {__("Rotation", "three-object-viewer")} + - onChangeRotationX( value ) - } + value={attributes.rotationX} + onChange={(value) => onChangeRotationX(value)} /> - onChangeRotationY( value ) - } + value={attributes.rotationY} + onChange={(value) => onChangeRotationY(value)} /> - onChangeRotationZ( value ) - } + value={attributes.rotationZ} + onChange={(value) => onChangeRotationZ(value)} /> - + - { __( 'Scale', 'three-object-viewer' ) } - + {__("Scale", "three-object-viewer")} + - onChangeScaleX( value ) - } + value={attributes.scaleX} + onChange={(value) => onChangeScaleX(value)} /> - onChangeScaleY( value ) - } + value={attributes.scaleY} + onChange={(value) => onChangeScaleY(value)} /> - onChangeScaleZ( value ) - } + value={attributes.scaleZ} + onChange={(value) => onChangeScaleZ(value)} /> - { isSelected ? ( + {isSelected ? ( <> - { attributes.audioUrl ? ( - <> - - ) : ( -
- - -
- - Select an image: - - - onImageSelect( imageObject ) - } - type="video" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.audioUrl } - render={ ( { open } ) => ( - - ) } - /> + {attributes.videoUrl ? ( +
+
+ + + + + +

+ Video block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="video" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.videoUrl} + render={({ open }) => ( + + )} + /> +
- ) } + )} ) : ( <> - { attributes.audioUrl ? ( - <> - - ) : ( -
- -
- - Select an image to render in your environment: - - {/*
- console.log(e.target.value) && setEnteredURL(e.target.value)}> - -
*/} + {attributes.videoUrl ? ( +
+
+ + + + + +

+ Video block +

+ {/*

URL: {attributes.threeObjectUrl}

*/} +
+
+ ) : ( +
+
+ + + + + + + onImageSelect(imageObject) + } + type="image" + allowedTypes={ALLOWED_MEDIA_TYPES} + value={attributes.videoUrl} + render={({ open }) => ( + + )} + />
- - onImageSelect( imageObject ) - } - type="image" - allowedTypes={ ALLOWED_MEDIA_TYPES } - value={ attributes.audioUrl } - render={ ( { open } ) => ( - - ) } - />
- ) } + )} - ) } + )}
); } diff --git a/blocks/three-video-block/Edit.test.js b/blocks/three-video-block/Edit.test.js index ab10afe..ab22d96 100644 --- a/blocks/three-video-block/Edit.test.js +++ b/blocks/three-video-block/Edit.test.js @@ -1,57 +1,47 @@ - //Import React -import React from 'react'; +import React from "react"; //Import test renderer -import { render, fireEvent, cleanup } from '@testing-library/react'; +import { render, fireEvent, cleanup } from "@testing-library/react"; //Import component to test -import { Editor } from './Edit'; - +import { Editor } from "./Edit"; describe("Editor componet", () => { - afterEach(cleanup); - it('matches snapshot when selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + afterEach(cleanup); + it("matches snapshot when selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it('matches snapshot when not selected', () => { - const onChange = jest.fn(); - const { container } = render(); - expect(container).toMatchSnapshot(); - }); + it("matches snapshot when not selected", () => { + const onChange = jest.fn(); + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); - it("Calls the onchange function", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Salad"), { - target: { value: "New Value" } - }); - expect(onChange).toHaveBeenCalledTimes(1); - }); + it("Calls the onchange function", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Salad"), { + target: { value: "New Value" } + }); + expect(onChange).toHaveBeenCalledTimes(1); + }); - it("Passes updated value, not event to onChange callback", () => { - const onChange = jest.fn(); - const { getByDisplayValue } = render(); - fireEvent.change(getByDisplayValue("Seltzer"), { - target: { value: "Boring Water" } - }); - expect(onChange).toHaveBeenCalledWith("Boring Water"); - }); -}); \ No newline at end of file + it("Passes updated value, not event to onChange callback", () => { + const onChange = jest.fn(); + const { getByDisplayValue } = render( + + ); + fireEvent.change(getByDisplayValue("Seltzer"), { + target: { value: "Boring Water" } + }); + expect(onChange).toHaveBeenCalledWith("Boring Water"); + }); +}); diff --git a/blocks/three-video-block/Save.js b/blocks/three-video-block/Save.js index adbc7b7..ab52d43 100644 --- a/blocks/three-video-block/Save.js +++ b/blocks/three-video-block/Save.js @@ -1,48 +1,39 @@ -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; +import { __ } from "@wordpress/i18n"; +import { useBlockProps } from "@wordpress/block-editor"; -export default function save( { attributes } ) { +export default function save({ attributes }) { return ( -
+
<>
-

- { attributes.videoUrl } -

-

- { attributes.scaleX } -

-

- { attributes.scaleY } -

-

- { attributes.scaleZ } -

+
{attributes.videoUrl}
+

{attributes.scaleX}

+

{attributes.scaleY}

+

{attributes.scaleZ}

- { attributes.positionX } + {attributes.positionX}

- { attributes.positionY } + {attributes.positionY}

- { attributes.positionZ } + {attributes.positionZ}

- { attributes.rotationX } + {attributes.rotationX}

- { attributes.rotationY } + {attributes.rotationY}

- { attributes.rotationZ } + {attributes.rotationZ}

- { attributes.aspectHeight } + {attributes.aspectHeight}

- { attributes.aspectWidth } + {attributes.aspectWidth}

-
diff --git a/blocks/three-video-block/block.json b/blocks/three-video-block/block.json index cde1c93..cbcd52c 100644 --- a/blocks/three-video-block/block.json +++ b/blocks/three-video-block/block.json @@ -1,6 +1,6 @@ { "name": "three-object-viewer/three-video-block", - "title": "Three Video Block", + "title": "3D Video", "description": "A video block for your environment", "attributes": { "videoUrl": { @@ -56,7 +56,8 @@ "default":0 } }, - "category": "3D", + "category": "design", + "parent": [ "three-object-viewer/environment" ], "apiVersion": 2, "supports": { "html": false, diff --git a/blocks/three-video-block/components/VideoEdit.js b/blocks/three-video-block/components/VideoEdit.js deleted file mode 100644 index 7e3cfad..0000000 --- a/blocks/three-video-block/components/VideoEdit.js +++ /dev/null @@ -1,75 +0,0 @@ -import * as THREE from 'three'; -import React, { Suspense, useRef, useState, useEffect, useMemo } from 'react'; -import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber'; -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; -import { - OrthographicCamera, - PerspectiveCamera, - OrbitControls, - useAnimations, -} from '@react-three/drei'; -import { VRM, VRMUtils, VRMSchema, VRMLoaderPlugin } from '@pixiv/three-vrm' -import { GLTFAudioEmitterExtension } from 'three-omi'; -import { useAspect } from '@react-three/drei'; - -// Geometry -function Plane(props) { - console.log(props); - const clicked = true; - const [video] = useState(() => Object.assign(document.createElement('video'), { src: props.url, crossOrigin: 'Anonymous', loop: true, muted: true })); - - useEffect(() => void (clicked && video.play()), [video, clicked]); - - return ( - - - - - - - ); -} - -function ThreeObject( props ) { - const [ url, set ] = useState( props.src ); - useEffect( () => { - setTimeout( () => set( props.src ), 2000 ); - }, [] ); - - return Plane(props); -} - -export default function VideoEdit( props ) { - return ( - <> - - - - { props.src && ( - - - - ) } - - - - ); -} diff --git a/blocks/three-video-block/editor.scss b/blocks/three-video-block/editor.scss index a41c19e..4a6a4c4 100644 --- a/blocks/three-video-block/editor.scss +++ b/blocks/three-video-block/editor.scss @@ -15,12 +15,6 @@ border-radius: 30px; } -.three-object-viewer-button { - background-color:rgb(199, 254, 0); - color: black; - border: solid 1.5px black; -} - .glb-preview-container button:hover{ border-radius: 30px; background-color:rgb(156, 199, 0); diff --git a/blocks/three-video-block/index.js b/blocks/three-video-block/index.js index 22b14b6..0b83de5 100644 --- a/blocks/three-video-block/index.js +++ b/blocks/three-video-block/index.js @@ -1,11 +1,11 @@ -import { registerBlockType } from '@wordpress/blocks'; -import Edit from './Edit'; -import Save from './Save'; -import { useBlockProps } from '@wordpress/block-editor'; +import { registerBlockType } from "@wordpress/blocks"; +import Edit from "./Edit"; +import Save from "./Save"; +import { useBlockProps } from "@wordpress/block-editor"; const icon = ( ); -const blockConfig = require( './block.json' ); -registerBlockType( blockConfig.name, { +const blockConfig = require("./block.json"); +registerBlockType(blockConfig.name, { ...blockConfig, - icon: icon, + icon, apiVersion: 2, edit: Edit, save: Save, @@ -27,171 +27,177 @@ registerBlockType( blockConfig.name, { { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', - }, + type: "string", + default: "2d" + } }, - save( props ) { + save(props) { return ( -
+
<>

- { props.attributes.deviceTarget } + {props.attributes.deviceTarget}

- { props.attributes.threeObjectUrl } + {props.attributes.threeObjectUrl}

- { props.attributes.scale } + {props.attributes.scale}

- { props.attributes.bg_color } + {props.attributes.bg_color}

- { props.attributes.zoom } + {props.attributes.zoom}

- { props.attributes.hasZoom ? 1 : 0 } + {props.attributes.hasZoom ? 1 : 0}

- { props.attributes.hasTip ? 1 : 0 } + {props.attributes.hasTip ? 1 : 0}

- { props.attributes.positionY } + {props.attributes.positionY}

- { props.attributes.rotationY } + {props.attributes.rotationY}

- { props.attributes.scale } + {props.attributes.scale}

); - }, + } }, { attributes: { bg_color: { - type: 'string', - default: '#FFFFFF', + type: "string", + default: "#FFFFFF" }, zoom: { - type: 'integer', - default: 90, + type: "integer", + default: 90 }, scale: { - type: 'integer', - default: 1, + type: "integer", + default: 1 }, positionX: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, positionY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, rotationY: { - type: 'integer', - default: 0, + type: "integer", + default: 0 }, threeObjectUrl: { - type: 'string', - default: null, + type: "string", + default: null }, hasZoom: { - type: 'bool', - default: false, + type: "bool", + default: false }, hasTip: { - type: 'bool', - default: true, + type: "bool", + default: true }, deviceTarget: { - type: 'string', - default: '2d', + type: "string", + default: "2d" }, animations: { - type: 'string', - default: '', + type: "string", + default: "" } }, - save( props ) { + save(props) { return ( -
- <> -
-

- { props.attributes.deviceTarget } -

-

- { props.attributes.threeObjectUrl } -

-

{ props.attributes.scale }

-

- { props.attributes.bg_color } -

-

{ props.attributes.zoom }

-

- { props.attributes.hasZoom ? 1 : 0 } -

-

- { props.attributes.hasTip ? 1 : 0 } -

-

- { props.attributes.positionY } -

-

- { props.attributes.rotationY } -

-

{ props.attributes.scale }

-

- { props.attributes.animations } -

-
- -
- ); - }, - }, - ], -} ); +
+ <> +
+

+ {props.attributes.deviceTarget} +

+

+ {props.attributes.threeObjectUrl} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.bg_color} +

+

+ {props.attributes.zoom} +

+

+ {props.attributes.hasZoom ? 1 : 0} +

+

+ {props.attributes.hasTip ? 1 : 0} +

+

+ {props.attributes.positionY} +

+

+ {props.attributes.rotationY} +

+

+ {props.attributes.scale} +

+

+ {props.attributes.animations} +

+
+ +
+ ); + } + } + ] +}); diff --git a/inc/avatars/3ov_default_avatar.vrm b/inc/avatars/3ov_default_avatar.vrm new file mode 100644 index 0000000..ce7081a Binary files /dev/null and b/inc/avatars/3ov_default_avatar.vrm differ diff --git a/inc/avatars/mummy.vrm b/inc/avatars/mummy.vrm deleted file mode 100644 index 621ceb0..0000000 Binary files a/inc/avatars/mummy.vrm and /dev/null differ diff --git a/inc/functions.php b/inc/functions.php index 2a28016..43478fe 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -37,9 +37,9 @@ function threeobjectviewer_enqueue_threeobjectloaderinit() { ); } -add_filter('upload_mimes', 'threeobjectviewer_add_file_types_to_uploads', 1, 1); +add_filter('upload_mimes', __NAMESPACE__ . '\threeobjectviewer_add_file_types_to_uploads', 10, 4); /** -* Adds glb and vrm types to allowed uploads. +* Adds glb vrm and usdz types to allowed uploads. */ function threeobjectviewer_add_file_types_to_uploads($file_types){ $new_filetypes = array(); @@ -47,31 +47,27 @@ function threeobjectviewer_add_file_types_to_uploads($file_types){ // $new_filetypes['glb'] = 'model/gltf-binary'; $new_filetypes['glb'] = 'application/octet-stream'; $new_filetypes['vrm'] = 'application/octet-stream'; + $new_filetypes['usdz'] = 'model/vnd.usdz+zip'; $file_types = array_merge($file_types, $new_filetypes ); + return $file_types; } -add_filter('wp_check_filetype_and_ext', __NAMESPACE__ . '\threeobjectviewer_checkfiletypes', 10, 4); -/** - * Check the filetypes - */ -function threeobjectviewer_checkfiletypes($data, $file, $filename, $mimes) { - if (!$data['type']) { - $wp_filetype = wp_check_filetype($filename, $mimes); - $ext = $wp_filetype['ext']; - $type = $wp_filetype['type']; - $proper_filename = $filename; - if ($type && 0 === strpos($type, 'model/') && $ext !== 'glb') { - $ext = $type = false; - } - if ($type && 0 === strpos($type, 'model/') && $ext !== 'vrm') { - $ext = $type = false; - } - $data['ext'] = $ext; - $data['type'] = $type; - $data['proper_filename'] = $proper_filename; +add_filter( 'wp_check_filetype_and_ext', __NAMESPACE__ . '\three_object_viewer_check_for_usdz', 10, 4 ); +function three_object_viewer_check_for_usdz( $types, $file, $filename, $mimes ) { + if ( false !== strpos( $filename, '.usdz' ) ) { + $types['ext'] = 'usdz'; + $types['type'] = 'model/vnd.usdz+zip'; + } + if ( false !== strpos( $filename, '.glb' ) ) { + $types['ext'] = 'glb'; + $types['type'] = 'application/octet-stream'; + } + if ( false !== strpos( $filename, '.vrm' ) ) { + $types['ext'] = 'vrm'; + $types['type'] = 'application/octet-stream'; } - return $data; + return $types; } add_action('wp_enqueue_scripts', __NAMESPACE__ . '\threeobjectviewer_frontend_assets'); @@ -81,7 +77,8 @@ function threeobjectviewer_checkfiletypes($data, $file, $filename, $mimes) { */ function threeobjectviewer_frontend_assets() { - $frontend_js_path = "/assets/js/blocks.frontend.js"; + $default_frontend_js = "../build/assets/js/blocks.frontend-versepress.js"; + $frontend_js = apply_filters( 'three-object-environment-frontend-js', $default_frontend_js ); $current_user = wp_get_current_user(); $vrm = wp_get_attachment_url($current_user->avatar); @@ -90,8 +87,9 @@ function threeobjectviewer_frontend_assets() { 'inWorldName' => $current_user->in_world_name, 'banner' => $current_user->custom_banner, 'vrm' => $vrm, + 'profileImage' => get_avatar_url( $current_user->ID, ['size' => '500'] ) ); - + $three_object_plugin = plugins_url() . '/three-object-viewer/build/'; // $user_data_passed = array( @@ -99,8 +97,10 @@ function threeobjectviewer_frontend_assets() { // 'userName' => 'someone', // 'vrm' => 'somefile.vrm', // ); + global $post; + $post_slug = $post->post_name; - wp_register_script( 'threeobjectloader-frontend', plugin_dir_url( __FILE__ ) . '../build/assets/js/blocks.frontend.js', ['wp-element', 'wp-data', 'wp-hooks'], '', true ); + // wp_register_script( 'threeobjectloader-frontend', plugin_dir_url( __FILE__ ) . $frontend_js, ['wp-element', 'wp-data', 'wp-hooks'], '', true ); wp_localize_script( 'threeobjectloader-frontend', 'userData', $user_data_passed ); wp_localize_script( 'threeobjectloader-frontend', 'threeObjectPlugin', $three_object_plugin ); @@ -108,8 +108,9 @@ function threeobjectviewer_frontend_assets() { "threeobjectloader-frontend" ); - wp_register_script( 'versepress-frontend', plugin_dir_url( __FILE__ ) . '../build/assets/js/blocks.frontend-versepress.js', ['wp-element', 'wp-data', 'wp-hooks'], '', true ); + wp_register_script( 'versepress-frontend', plugin_dir_url( __FILE__ ) . $frontend_js, ['wp-element', 'wp-data', 'wp-hooks'], '', true ); wp_localize_script( 'versepress-frontend', 'userData', $user_data_passed ); + wp_localize_script( 'versepress-frontend', 'postSlug', $post_slug ); wp_localize_script( 'versepress-frontend', 'threeObjectPlugin', $three_object_plugin ); wp_enqueue_script( @@ -117,3 +118,29 @@ function threeobjectviewer_frontend_assets() { ); } + +add_action('enqueue_block_assets', __NAMESPACE__ . '\threeobjectviewer_editor_assets'); + +/** + * Enqueue block frontend JavaScript + */ +function threeobjectviewer_editor_assets() { + + + $DEFAULT_BLOCKS = [ + 'three-object-viewer/three-portal-block', + 'three-object-viewer/three-html-block', + 'three-object-viewer/model-block', + 'three-object-viewer/sky-block', + 'three-object-viewer/npc-block', + 'three-object-viewer/three-image-block', + 'three-object-viewer/three-video-block', + 'three-object-viewer/three-audio-block', + 'three-object-viewer/spawn-point-block' + ]; + $ALLOWED_BLOCKS = apply_filters( 'three-object-environment-inner-allowed-blocks', $DEFAULT_BLOCKS ); + + wp_localize_script( 'three-object-viewer-three-object-block-editor-script', 'allowed_blocks', $ALLOWED_BLOCKS ); + +} + diff --git a/package.json b/package.json index 0cc79ba..3096d15 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@antpb/three-object-viewer", "private": true, - "version": "0.6.0", + "version": "0.6.3", "license": "GPL-2.0-or-later", "main": "build/index.js", "scripts": { @@ -17,20 +17,40 @@ "devDependencies": { "@babel/core": "^7", "@testing-library/react": "^12", - "@wordpress/scripts": "^16" + "@wordpress/eslint-plugin": "^13.5.0", + "@wordpress/scripts": "^16", + "airtap": "^4.0.4", + "browserify": "^17.0.0", + "esbuild": "^0.15.5", + "eslint": "^8.7.0", + "lint-staged": "^13.0.3", + "prettier": "^2.7.1", + "prettier-standard": "^16.4.1", + "standard": "^17.0.0", + "tape": "^5.6.0", + "tinyify": "^3.1.0" }, "dependencies": { "@pixiv/three-vrm": "1.0.0-beta.17", + "@react-three/a11y": "2.2.4", "@react-three/drei": "^8.7.4", "@react-three/fiber": "^8.0.11", - "@react-three/rapier": "^0.4.1", + "@react-three/rapier": "0.4.1", "@react-three/xr": "^3.5.0", "@wordpress/block-editor": "^6", "@wordpress/blocks": "^9", "@wordpress/components": "^14", "@wordpress/element": "^3", "@wordpress/i18n": "^4", - "three": "^0.137.2", - "three-omi": "^0.1.5" + "array-buffer-to-hex": "^1.0.0", + "base64-arraybuffer": "^1.0.2", + "convert-hex": "^0.1.0", + "events": "^3.3.0", + "get-browser-rtc": "^1.1.0", + "r3f-perf": "4.9.1", + "re-resizable": "^6.9.9", + "three": "0.144.0", + "three-omi": "^0.1.5", + "tiny-simple-peer": "^10.1.1" } } diff --git a/pluginMachine.json b/pluginMachine.json index dfcca36..6646ffd 100644 --- a/pluginMachine.json +++ b/pluginMachine.json @@ -13,7 +13,10 @@ "sky-block", "three-image-block", "three-video-block", - "three-audio-block" + "three-audio-block", + "three-portal-block", + "three-html-block", + "spawn-point-block" ] }, "buildIncludes": [ @@ -26,8 +29,11 @@ "blocks/environment/init.php", "blocks/model-block/init.php", "blocks/sky-block/init.php", + "blocks/three-html-block/init.php", "blocks/three-image-block/init.php", "blocks/three-video-block/init.php", + "blocks/three-portal-block/init.php", + "blocks/spawn-point-block/init.php", "admin/three-object-viewer-settings/init.php" ] } \ No newline at end of file diff --git a/readme.txt b/readme.txt index 233f18d..7d0812b 100644 --- a/readme.txt +++ b/readme.txt @@ -2,7 +2,7 @@ Requires at least: 5.7 Tested up to: 6.0 Requires PHP: 7.2 -Stable tag: 0.6.1 +Stable tag: 0.6.3 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Author: antpb @@ -44,6 +44,15 @@ It can also be installed manually using a zip file. == Changelog == += 0.6.3 = +* Fix: Uploads were not merging allowed types. This update restores prior upload functionality with new usdz type. + += 0.6.2 = + +* Adds USDZ support to block (note, usdz files must not contain usdc files) +* Updates Three.js to 144 +* Allows uploads of usdz files + = 0.6.1 = * Update rigibody types for vr objects. Sorry for the bouncy files! :) diff --git a/three-object-viewer.php b/three-object-viewer.php index e296379..4c2c1fa 100644 --- a/three-object-viewer.php +++ b/three-object-viewer.php @@ -3,7 +3,7 @@ * Plugin Name: Three Object Viewer * Plugin URI: https://3ov.xyz/ * Description: A plugin for viewing 3D files with support for WebXR and Open Metaverse Interoperability GLTF Extensions. -* Version: 0.6.1 +* Version: 0.6.3 * Requires at least: 5.7 * Requires PHP: 7.1.0 * Author: antpb @@ -35,6 +35,15 @@ // Include audio include_once dirname( __FILE__ ) . '/blocks/three-audio-block/init.php'; +// Include portal +include_once dirname( __FILE__ ) . '/blocks/three-portal-block/init.php'; + +// Include html +include_once dirname( __FILE__ ) . '/blocks/three-html-block/init.php'; + +// Include spawn point +include_once dirname( __FILE__ ) . '/blocks/spawn-point-block/init.php'; + /** * Include the autoloader */ diff --git a/yarn.lock b/yarn.lock index 8bba3f3..f3bc496 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,15 @@ # yarn lockfile v1 +"@airtap/browserify-istanbul@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@airtap/browserify-istanbul/-/browserify-istanbul-4.0.0.tgz#01ba9d25aad0114341e7cb3e09b3735420f3fbce" + integrity sha512-bZc90B1OJRN1llsvdIgUHTZ2tZhwlG4JdNHoQt8wVaBWhbgs5OB1XalGjN2BqaAtFfftYgRxcO5AN6e7t9HXAg== + dependencies: + istanbul-lib-instrument "^4.0.0" + minimatch "^3.0.4" + through2 "^3.0.1" + "@ampproject/remapping@^2.1.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" @@ -9,6 +18,13 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" +"@angular/compiler@8.2.14": + version "8.2.14" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.2.14.tgz#46db7a9d1c17f236126518ff26480c160d5a6183" + integrity sha512-ABZO4E7eeFA1QyJ2trDezxeQM5ZFa1dXw1Mpl/+1vuXDKNjJgNyWYwKp/NwRkLmrsuV0yv4UDCDe4kJOGbPKnw== + dependencies: + tslib "^1.9.0" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -16,6 +32,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -242,6 +265,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" @@ -275,6 +303,20 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@7.9.4": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== + "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" @@ -988,6 +1030,20 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.18.9": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@babel/runtime@^7.8.7": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.16.7", "@babel/template@^7.3.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" @@ -1192,6 +1248,20 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "1.1.1" +"@es-joy/jsdoccomment@~0.20.1": + version "0.20.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz#fe89f435f045ae5aaf89c7a4df3616c03e9d106e" + integrity sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ== + dependencies: + comment-parser "1.3.0" + esquery "^1.4.0" + jsdoc-type-pratt-parser "~2.2.3" + +"@esbuild/linux-loong64@0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz#91aef76d332cdc7c8942b600fa2307f3387e6f82" + integrity sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1207,11 +1277,80 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.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/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.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" + "@gar/promisify@^1.0.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@glimmer/interfaces@^0.41.4": + version "0.41.4" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.41.4.tgz#3f3e26abea8a4e1463130e9a75e94372781d154b" + integrity sha512-MzXwMyod3MlwSZezHSaVBsCEIW/giYYfTDYARR46QnYsaFVatMVbydjsI7jkAuBCbnLCyNOIc1TrYIj71i/rpg== + +"@glimmer/syntax@0.41.4": + version "0.41.4" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.41.4.tgz#9c0c763aab44069c828ce782947c84d31ff75879" + integrity sha512-NLPNirZDbNmpZ8T/ccle22zt2rhUq5il7ST6IJk62T58QZeJsdr3m3RS4kaGSBsQhXoKELrgX048yYEX5sC+fw== + dependencies: + "@glimmer/interfaces" "^0.41.4" + "@glimmer/util" "^0.41.4" + handlebars "^4.0.13" + simple-html-tokenizer "^0.5.7" + +"@glimmer/util@^0.41.4": + version "0.41.4" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.41.4.tgz#508fd82ca40305416e130f0da7b537295ded7989" + integrity sha512-DwS94K+M0vtG+cymxH0rslJr09qpdjyOLdCjmpKcG/nNiZQfMA1ybAaFEmwk9UaVlUG9STENFeQwyrLevJB+7g== + +"@goto-bus-stop/common-shake@^2.3.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz#7b29b093ed10d4075c061bf48905c02eb75d643c" + integrity sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ== + dependencies: + acorn-walk "^7.0.0" + debug "^3.2.6" + escope "^3.6.0" + +"@goto-bus-stop/envify@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@goto-bus-stop/envify/-/envify-5.0.0.tgz#db7db712f00901d9f71f852ed13dbb3db0909b1a" + integrity sha512-xAnxuDWmwQxO8CgVuPTxKuNsKDfwyXXTyAabG4sNoK59H/ZMC7BHxTA/4ehtinsxbcH7/9L65F5VhyNdQfUyqA== + dependencies: + acorn-node "^2.0.1" + dash-ast "^2.0.1" + multisplice "^1.0.0" + through2 "^2.0.5" + "@hapi/address@2.x.x": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" @@ -1244,6 +1383,24 @@ dependencies: "@hapi/hoek" "^8.3.0" +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -1253,11 +1410,26 @@ debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@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@^1.2.0", "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@iarna/toml@2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.3.tgz#f060bf6eaafae4d56a7dac618980838b0696e2ab" + integrity sha512-FmuxfCuolpLl0AnQ2NHSzoUKWEJDFl63qXjzdoWBVyFCXzMGm1spBzk7LeHNoVCiWCF7mRVms9e6jEV9+MoPbg== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1476,7 +1648,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 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.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -1644,6 +1816,14 @@ resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.4.4.tgz#97c69881788e624d7cc68d4385fdaa9b5fd20642" integrity sha512-KpxKt/D//q/t/6FBcde/RE36LKp8PpWu7kFEMLwpzMGl9RpcexunmYOQJWwmJWtkQjgE1YRr7DzBMryz6La1cQ== +"@react-three/a11y@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@react-three/a11y/-/a11y-2.2.4.tgz#f5c58496abcb7daff7d1da97c3f24b91fd618e31" + integrity sha512-EELVPNQC4JwXXAHRGQ9iA6O5S6stOk8zl+6alOdeQoYlXuVKyPGL3dCLGsaOqgudJERDFqxATDXRc/8JTNC/3Q== + dependencies: + utility-types "^3.10.0" + zustand "^3.2.0" + "@react-three/drei@^8.7.4": version "8.20.2" resolved "https://registry.yarnpkg.com/@react-three/drei/-/drei-8.20.2.tgz#f91093369be911467ea6741538990b3bbcbb9042" @@ -1681,7 +1861,7 @@ suspend-react "^0.0.8" zustand "^3.7.1" -"@react-three/rapier@^0.4.1": +"@react-three/rapier@0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@react-three/rapier/-/rapier-0.4.1.tgz#66382f28b3ebd9b25cbaa21de37315428f5d98c5" integrity sha512-1bL7RRMRI7COiqHjf1g1XD4FKSovRPm9YwbCqTBRIQLfeOhJATVRwSMwEQotN466ZGOzEeZ+FTtITU05AE2+3Q== @@ -1697,6 +1877,13 @@ react-merge-refs "^1.1.0" three-stdlib "^2.8.6" +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== + dependencies: + any-observable "^0.3.0" + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -1711,6 +1898,16 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@socket.io/component-emitter@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" + integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== + +"@stitches/react@^1.1.0": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.8.tgz#954f8008be8d9c65c4e58efa0937f32388ce3a38" + integrity sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA== + "@stylelint/postcss-css-in-js@^0.37.2": version "0.37.2" resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" @@ -1927,6 +2124,16 @@ dependencies: "@types/node" "*" +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cors@^2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + "@types/glob@^7.1.1": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" @@ -1961,7 +2168,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -2008,11 +2215,21 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.24.tgz#20ba1bf69c1b4ab405c7a01e950c4f446b05029f" integrity sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g== +"@types/node@>=10.0.0": + version "18.7.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.9.tgz#180bfc495c91dc62573967edf047e15dbdce1491" + integrity sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== +"@types/offscreencanvas@^2019.6.4": + version "2019.7.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" + integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -2086,6 +2303,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -2167,6 +2389,21 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/eslint-plugin@^5.3.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.0.tgz#36a8c0c379870127059889a9cc7e05c260d2aaa5" + integrity sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ== + dependencies: + "@typescript-eslint/scope-manager" "5.42.0" + "@typescript-eslint/type-utils" "5.42.0" + "@typescript-eslint/utils" "5.42.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.0.1": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" @@ -2179,6 +2416,13 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.42.0.tgz#a2b6b24c75bf41ce22501f8669082efdac689909" + integrity sha512-B51HySW9wWIwLantEMqJi0FXVp1IMKRAyNASrYhJV3/nl4r6aEz6FJTJtscgu7YrGWigs7OypQExmcVqGQoDFQ== + dependencies: + "@typescript-eslint/utils" "5.42.0" + "@typescript-eslint/parser@^4.31.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" @@ -2189,6 +2433,16 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" +"@typescript-eslint/parser@^5.3.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.42.0.tgz#be0ffbe279e1320e3d15e2ef0ad19262f59e9240" + integrity sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA== + dependencies: + "@typescript-eslint/scope-manager" "5.42.0" + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/typescript-estree" "5.42.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" @@ -2197,11 +2451,46 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" +"@typescript-eslint/scope-manager@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.42.0.tgz#e1f2bb26d3b2a508421ee2e3ceea5396b192f5ef" + integrity sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow== + dependencies: + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/visitor-keys" "5.42.0" + +"@typescript-eslint/type-utils@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.42.0.tgz#4206d7192d4fe903ddf99d09b41d4ac31b0b7dca" + integrity sha512-HW14TXC45dFVZxnVW8rnUGnvYyRC0E/vxXShFCthcC9VhVTmjqOmtqj6H5rm9Zxv+ORxKA/1aLGD7vmlLsdlOg== + dependencies: + "@typescript-eslint/typescript-estree" "5.42.0" + "@typescript-eslint/utils" "5.42.0" + debug "^4.3.4" + tsutils "^3.21.0" + "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/types@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.42.0.tgz#5aeff9b5eced48f27d5b8139339bf1ef805bad7a" + integrity sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw== + +"@typescript-eslint/typescript-estree@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.6.1.tgz#fb363dd4ca23384745c5ea4b7f4c867432b00d31" + integrity sha512-+sTnssW6bcbDZKE8Ce7VV6LdzkQz2Bxk7jzk1J8H1rovoTxnm6iXvYIyncvNsaB/kBCOM63j/LNJfm27bNdUoA== + dependencies: + debug "^4.1.1" + glob "^7.1.4" + is-glob "^4.0.1" + lodash.unescape "4.0.1" + semver "^6.3.0" + tsutils "^3.17.1" + "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" @@ -2215,6 +2504,33 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.0.tgz#2592d24bb5f89bf54a63384ff3494870f95b3fd8" + integrity sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg== + dependencies: + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/visitor-keys" "5.42.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.42.0.tgz#f06bd43b9a9a06ed8f29600273240e84a53f2f15" + integrity sha512-JZ++3+h1vbeG1NUECXQZE3hg0kias9kOtcQr3+JVQ3whnjvKuMyktJAAIj6743OeNPnGBmjj7KEmiDL7qsdnCQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.42.0" + "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/typescript-estree" "5.42.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" @@ -2223,6 +2539,14 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.42.0": + version "5.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz#ee8d62d486f41cfe646632fab790fbf0c1db5bb0" + integrity sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg== + dependencies: + "@typescript-eslint/types" "5.42.0" + eslint-visitor-keys "^3.3.0" + "@use-gesture/core@10.2.11": version "10.2.11" resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.2.11.tgz#914c36f190bcf452500d11a11fc294fe56e5dc2f" @@ -2437,6 +2761,11 @@ resolved "https://registry.yarnpkg.com/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-3.1.2.tgz#71596ae30b390ddb23680147011a26dce11f88e1" integrity sha512-oMJnM3cJlu1hQMO4XmTFDhNPclj0cLRIeV5Y6uIF/9oNhhSfaMFu+ty0B4zBYodqwes/vbndwRg4j2q2bhG/Dg== +"@wordpress/babel-plugin-import-jsx-pragma@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.4.0.tgz#96e705f1e947336065540d7e08aa4db49151a43b" + integrity sha512-4bePHGzOjGmJzuq81kSPSinsrKclMQEoaNqZFVzP0vOwvv9eTiBjsoFPQEu4jdIBb9A9wGOYmTK0TO10pV1KlQ== + "@wordpress/babel-preset-default@^6.2.1": version "6.8.0" resolved "https://registry.yarnpkg.com/@wordpress/babel-preset-default/-/babel-preset-default-6.8.0.tgz#76a6ae40d2fd866e8b72504d4a5f783e414b0962" @@ -2455,6 +2784,24 @@ browserslist "^4.17.6" core-js "^3.19.1" +"@wordpress/babel-preset-default@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@wordpress/babel-preset-default/-/babel-preset-default-7.5.0.tgz#a800f401f6a88d05a9c13db9d73a1cede0e03eff" + integrity sha512-TVHLyoypYu7s7JyasYNw/OU4iqlPNrOYVYD3YMsVriKxT6Oql0L6YRuWdIEmmxwj3Hsr/QcJijx7Dk2f3m6+Nw== + dependencies: + "@babel/core" "^7.16.0" + "@babel/plugin-transform-react-jsx" "^7.16.0" + "@babel/plugin-transform-runtime" "^7.16.0" + "@babel/preset-env" "^7.16.0" + "@babel/preset-typescript" "^7.16.0" + "@babel/runtime" "^7.16.0" + "@wordpress/babel-plugin-import-jsx-pragma" "^4.4.0" + "@wordpress/browserslist-config" "^5.4.0" + "@wordpress/element" "^4.19.0" + "@wordpress/warning" "^2.21.0" + browserslist "^4.17.6" + core-js "^3.19.1" + "@wordpress/base-styles@^4.3.0": version "4.3.0" resolved "https://registry.yarnpkg.com/@wordpress/base-styles/-/base-styles-4.3.0.tgz#606ddb7c98253d9602eae25dd305c1b2b92b6f47" @@ -2580,6 +2927,11 @@ resolved "https://registry.yarnpkg.com/@wordpress/browserslist-config/-/browserslist-config-4.1.2.tgz#3d33e6316af269f2478bd6b0923aadd73cb08612" integrity sha512-UH0Ifmm4tEjVPOtiqH6yxDvk2EKtqSAhnyhyfSIb0wUnEoGsWTjREZjzuhgjt/I2nTqfg+0gUSzL5D0yQH6wDQ== +"@wordpress/browserslist-config@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@wordpress/browserslist-config/-/browserslist-config-5.4.0.tgz#88024d8604309d88560524a60cc7cf2471cc772d" + integrity sha512-pMDzct5d8vqljwXquo9pQxlbjuDQNfY/g+Aw21qBvzXDApmXQHasr0aritkQkC7yLrk6DoEY5C8+hqzsDW18Gg== + "@wordpress/components@^14", "@wordpress/components@^14.2.0": version "14.2.0" resolved "https://registry.yarnpkg.com/@wordpress/components/-/components-14.2.0.tgz#fa7c6ed96fb8ec98e05a04f8c0a7b583a84cd56f" @@ -2764,6 +3116,20 @@ react "^17.0.1" react-dom "^17.0.1" +"@wordpress/element@^4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@wordpress/element/-/element-4.19.0.tgz#c5573ea86e1385e7d66c41c6507a0456e899fc0a" + integrity sha512-5Ul1cpbtgagq0NV6hUiwszeiXtKFa06Po51PGvza62KylCIHCLF2ZlaY2zjeGLO10gKKKpCi7jRODFqOvWH3hQ== + dependencies: + "@babel/runtime" "^7.16.0" + "@types/react" "^17.0.37" + "@types/react-dom" "^17.0.11" + "@wordpress/escape-html" "^2.21.0" + change-case "^4.1.2" + is-plain-object "^5.0.0" + react "^17.0.2" + react-dom "^17.0.2" + "@wordpress/element@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@wordpress/element/-/element-4.4.0.tgz#2d5b870da913f2dc74002d3be80b4d0f20716578" @@ -2784,6 +3150,35 @@ dependencies: "@babel/runtime" "^7.16.0" +"@wordpress/escape-html@^2.21.0": + version "2.21.0" + resolved "https://registry.yarnpkg.com/@wordpress/escape-html/-/escape-html-2.21.0.tgz#236f1e258485b4879827f47974ae9c81d72218a0" + integrity sha512-P/9wUbIVQPO9gdxeosfYRqiAFQPW0AGy7amaMuHNMICleZflQ79pfvEZV7V8c8ke2VjXcQ3QWHt+mDbyGTT7hg== + dependencies: + "@babel/runtime" "^7.16.0" + +"@wordpress/eslint-plugin@^13.5.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@wordpress/eslint-plugin/-/eslint-plugin-13.5.0.tgz#2b81af472fc53195e84343e1ee56c1a580aab6e5" + integrity sha512-IVNSRRQgWnYlWJ+p+IQj2HrklDHMIvKSo1wF71/IEIe8W9s46sLq81zEltohIK8FNLh5NPslJGmJ5rdmW18Lhg== + dependencies: + "@babel/eslint-parser" "^7.16.0" + "@typescript-eslint/eslint-plugin" "^5.3.0" + "@typescript-eslint/parser" "^5.3.0" + "@wordpress/babel-preset-default" "^7.5.0" + "@wordpress/prettier-config" "^2.4.0" + cosmiconfig "^7.0.0" + eslint-config-prettier "^8.3.0" + eslint-plugin-import "^2.25.2" + eslint-plugin-jest "^25.2.3" + eslint-plugin-jsdoc "^37.0.3" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-prettier "^3.3.0" + eslint-plugin-react "^7.27.0" + eslint-plugin-react-hooks "^4.3.0" + globals "^13.12.0" + requireindex "^1.2.0" + "@wordpress/eslint-plugin@^9.0.6": version "9.3.0" resolved "https://registry.yarnpkg.com/@wordpress/eslint-plugin/-/eslint-plugin-9.3.0.tgz#9099ed6f7c6f80a5653a79a3e0a0165c48fb5b79" @@ -2919,6 +3314,11 @@ resolved "https://registry.yarnpkg.com/@wordpress/prettier-config/-/prettier-config-1.1.3.tgz#4339ff68f7db37044af911de80f2413d1e8ad193" integrity sha512-0ogGFvywFxVVhw5rXZUCDCV7aaw2KII5a3Xy0t1CAJYBP1TCF7tPNZIRyGD4bPzm5FM6IjmUMyB6NPzwRnpXrg== +"@wordpress/prettier-config@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@wordpress/prettier-config/-/prettier-config-2.4.0.tgz#b5177b8d459d941ca7acccb1c736731b939b7b6c" + integrity sha512-M1Inh8OvnfeBgwrxC9l1q+eK6CRP7gqIE3ZMt7oJ7GmvSeRD5ldfC+zGOqONrZ/SJ1Vj3njGSPDngtx8FNnIaQ== + "@wordpress/primitives@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@wordpress/primitives/-/primitives-2.2.0.tgz#a813c3d8a43ad1f873b8e53f0b125cb8832273b0" @@ -3060,6 +3460,11 @@ resolved "https://registry.yarnpkg.com/@wordpress/warning/-/warning-2.6.0.tgz#db1e39671910f1f7b31e81c27a25fd40200f4b82" integrity sha512-VWdFzDXt0ZQydNvvl0qjlPbqsCA7ZPupwV6U3gMnvMxELirAGONF0zjlD9/y+u7WGndRctzIJC/Er7qBhHVcNA== +"@wordpress/warning@^2.21.0": + version "2.21.0" + resolved "https://registry.yarnpkg.com/@wordpress/warning/-/warning-2.21.0.tgz#e0f20ff6998663ce98771b4bf0f17df7378a792e" + integrity sha512-XE6ZTcogFA2+geSQRdnFABuNp2/IP/3fe2sndQzt5Fk7CHuEcEjVSS+SI5ywnzAu9g1qbD2X1t5CE77DtZ6w7A== + "@wordpress/wordcount@^3.2.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@wordpress/wordcount/-/wordcount-3.6.0.tgz#187de9d76c32a4318c87cc3ac0ace87686e52bfe" @@ -3078,11 +3483,36 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +JSONStream@^1.0.3, JSONStream@^1.3.2: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abab@^2.0.3, abab@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +abstract-browser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abstract-browser/-/abstract-browser-1.0.0.tgz#5ea71a937547c88f250b3103b7cbb9163c329016" + integrity sha512-CJC6Wzow4cSFLsKhZJj0EGi3+023xmoRpW1FeNF9ErPwixkJTSO70Op/i6L120I6W36xm9GrXm4yquLNAywrEw== + dependencies: + browser-manifest "^1.0.0" + catering "^2.0.0" + nanoresource "^1.3.0" + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -3091,12 +3521,30 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -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.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: +acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-node@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-2.0.1.tgz#4a93ba32335950da9250175c654721f20f3375a7" + integrity sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== @@ -3106,12 +3554,17 @@ acorn-walk@^8.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn@^5.1.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -3121,6 +3574,11 @@ acorn@^8.0.4, acorn@^8.2.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -3151,6 +3609,73 @@ airbnb-prop-types@^2.10.0, airbnb-prop-types@^2.15.0, airbnb-prop-types@^2.16.0: prop-types-exact "^1.2.0" react-is "^16.13.1" +airtap-default@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/airtap-default/-/airtap-default-1.0.0.tgz#2dbfec471020cf2152c77b3381d447436cc247aa" + integrity sha512-57/mkOCfxNZHtbsQ0jsH7g5K1JlOV+rwytJulF6HOdc0lXiHiaksndYagRmbs1GuhCtn3/GIF9A8eTePEWPnUg== + dependencies: + abstract-browser "^1.0.0" + browser-provider "^1.1.0" + open "^7.1.0" + +airtap-match-browsers@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/airtap-match-browsers/-/airtap-match-browsers-1.1.1.tgz#2bded2f72902eaadf5de1e6998e948140249aaf6" + integrity sha512-bscZpmugpAo2v0Gg2NmlP9kFbHnQKTqYKFOWXYcdc2eo2k6MLVxaE2K08BLeO+wp3ctOt0reK/5y6BOLWWXfMg== + dependencies: + browser-names "^1.0.1" + deep-dot "0.0.2" + deep-equal "^2.0.1" + is-fork-pr "^2.5.0" + merge-deep "^3.0.2" + +airtap-multi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/airtap-multi/-/airtap-multi-1.0.0.tgz#2850dc3f8b3e4a2b34aeeca79e95ac06ef6065ed" + integrity sha512-VD2oXTzre8W03goLO9Sd8YmtVD5GFYIVtqBLfGjiR83b2aWL/GT0ZmDShHLLBe4ehQtt014yhvwg9X6WFMZdDg== + dependencies: + browser-provider "^1.1.0" + debug "^4.1.1" + merge-deep "^3.0.2" + run-parallel-settled "^1.0.0" + +airtap@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/airtap/-/airtap-4.0.4.tgz#52bb095ea4890fe290ed7c641f2fd88b1b29dfe8" + integrity sha512-sWrWdmPYWYWqMLKcS6vUdlpZCutvzn9ephGkEXnxd3tSYcYtY1nEwF6FsOWDLEOO0IGin/Y5kkwZ90+JKxeWxg== + dependencies: + "@airtap/browserify-istanbul" "^4.0.0" + airtap-default "^1.0.0" + airtap-multi "^1.0.0" + browserify "^16.5.2" + bruce-millis-option "^1.0.0" + compression "^1.7.1" + debug "^4.1.0" + engine.io "^6.1.0" + engine.io-client "^6.1.1" + express "^4.17.0" + find-nearest-file "^1.1.0" + globs-to-files "^1.0.0" + http-proxy "^1.18.1" + humanize-duration "^3.23.1" + js-yaml "^4.0.0" + load-script "^2.0.0" + make-promises-safe "^5.1.0" + maybe-combine-errors "^1.0.0" + minimist "^1.2.5" + nanoresource "^1.3.0" + nanoresource-collection "^1.0.0" + on-stream-close "^1.0.0" + readable-stream "^3.6.0" + run-parallel-settled "^1.0.1" + server-destroy "^1.0.1" + shell-quote "^1.7.0" + tap-completed "^1.0.0" + thunky-with-args "^1.0.0" + transient-error "^1.0.0" + uuid "^8.3.0" + watchify "^4.0.0" + ajv-errors@^1.0.0, ajv-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -3181,18 +3706,53 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +angular-estree-parser@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/angular-estree-parser/-/angular-estree-parser-1.3.1.tgz#5b590c3ef431fccb512755eea563029f84c043ee" + integrity sha512-jvlnNk4aoEmA6EKK12OnsOkCSdsWleBsYB+aWyH8kpfTB6Li1kxWVbHKVldH9zDCwVVi1hXfqPi/gbSv49tkbQ== + dependencies: + lines-and-columns "^1.1.6" + tslib "^1.9.3" + +angular-html-parser@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/angular-html-parser/-/angular-html-parser-1.4.0.tgz#4080989e46cad183264f950fb475590888d31104" + integrity sha512-5KyzzYOeZV9g9ahXw4rbi8IIbMjUdXoarXJ0CfbWue5U1YsvMnjMZJ3oadpU8ZtnIx1zR/dsyt+FLJx2U65d2Q== + dependencies: + tslib "^1.9.3" + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.2.1: +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + ansi-regex@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" @@ -3203,6 +3763,16 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -3222,6 +3792,16 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3230,7 +3810,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.0, anymatch@^3.0.3, anymatch@^3.1.1, anymatch@~3.1.2: +anymatch@^3.0.0, anymatch@^3.0.3, anymatch@^3.1.0, anymatch@^3.1.1, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -3250,6 +3830,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.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -3278,6 +3863,26 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-buffer-to-hex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-to-hex/-/array-buffer-to-hex-1.0.0.tgz#9c76e53010ef7bf7bf8a27ebbb41d24e1d83edf4" + integrity sha512-arycdkxgK1cj6s03GDb96tlCxOl1n3kg9M2OHseUc6Pqyqp+lgfceFPmG507eI5V+oxOSEnlOw/dFc7LXBXF4Q== + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" + integrity sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg== + array-includes@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" @@ -3289,7 +3894,18 @@ array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-union@^1.0.1: +array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= @@ -3301,7 +3917,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: +array-uniq@^1.0.1, array-uniq@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= @@ -3311,6 +3927,16 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.every@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.every/-/array.prototype.every-1.1.3.tgz#31f01b48e1160bc4b49ecab246bf7f765c6686f9" + integrity sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + is-string "^1.0.7" + array.prototype.filter@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz#20688792acdb97a09488eaaee9eebbf3966aae21" @@ -3342,7 +3968,7 @@ array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3, array.prototype.flat@^ es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.2.5: +array.prototype.flatmap@^1.2.5, array.prototype.flatmap@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== @@ -3379,7 +4005,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: +assert@^1.1.1, assert@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== @@ -3397,6 +4023,11 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -3419,6 +4050,13 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +asyncreduce@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/asyncreduce/-/asyncreduce-0.1.4.tgz#18210e01978bfdcba043955497a5cd315c0a6a41" + integrity sha512-9q50+pYllC5Xg2BQCJBYvHpc5InGixioeLPxaKvUg3lFwItSbxbEpClPX7+GjXT3RFQk64ThvyGTdFs9ftb/hg== + dependencies: + runnel "~0.5.0" + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -3454,6 +4092,11 @@ autosize@^4.0.2: resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.4.tgz#924f13853a466b633b9309330833936d8bccce03" integrity sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -3469,6 +4112,11 @@ axe-core@^4.3.5: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== +axe-core@^4.4.3: + version "4.5.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.1.tgz#04d561c11b6d76d096d34e9d14ba2c294fb20cdc" + integrity sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ== + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -3600,11 +4248,21 @@ balanced-match@^2.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -3678,6 +4336,24 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + body-scroll-lock@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" @@ -3739,17 +4415,90 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-manifest@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-manifest/-/browser-manifest-1.0.0.tgz#fbf58bb517f687203d8e541c7fcc9292ccce1293" + integrity sha512-+XZt3+6aTlqzI7OWYz4IPx8a2Ogxnl65AA5rTQvPYdB6YO1SLDQLqWJ4TR2QoAwyb29w78vU6trpqX5+9RoXXg== + +browser-names@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/browser-names/-/browser-names-1.1.0.tgz#9bbfcb326b08b8c909bc1c8fd98077299d4600a4" + integrity sha512-ytPHDpg38klSYRfsrvpU9IglWptXoLHWLrXGUuF3p+HqnowPciDAVcmldvey8B+EjP0eC2Mvwnk6sZxRt9PhMQ== + +browser-pack-flat@^3.0.9: + version "3.5.0" + resolved "https://registry.yarnpkg.com/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz#8c3cc15ef9b444c8c40d6240e8eb7c3c90970484" + integrity sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A== + dependencies: + JSONStream "^1.3.2" + combine-source-map "^0.8.0" + convert-source-map "^1.5.1" + count-lines "^0.1.2" + dedent "^0.7.0" + estree-is-member-expression "^1.0.0" + estree-is-require "^1.0.0" + esutils "^2.0.2" + path-parse "^1.0.5" + scope-analyzer "^2.0.0" + stream-combiner "^0.2.2" + through2 "^3.0.1" + transform-ast "^2.4.2" + umd "^3.0.3" + wrap-comment "^1.0.0" + +browser-pack@^6.0.1, browser-pack@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" + integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.8.0" + defined "^1.0.0" + safe-buffer "^5.1.1" + through2 "^2.0.0" + umd "^3.0.0" + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserify-aes@^1.0.0, browserify-aes@^1.0.4: +browser-provider@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + resolved "https://registry.yarnpkg.com/browser-provider/-/browser-provider-1.2.0.tgz#338382e5e3196a2a8d9510f6fc3df3427497908b" + integrity sha512-8ixthQVQxgDyVt3tMzbbaonsjq+eDDS9opxCE+b7EzaqbgD9LVMunmijCm3/rmKFC7JLeHY0d2o0hsH98G1tKw== dependencies: - buffer-xor "^1.0.3" + airtap-match-browsers "^1.0.0" + browser-manifest "^1.0.0" + catering "^2.0.0" + +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== + dependencies: + resolve "^1.17.0" + +browser-unpack@^1.1.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/browser-unpack/-/browser-unpack-1.4.2.tgz#7a708774dc7448df1c24a735d65d409708b95ce2" + integrity sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA== + dependencies: + acorn-node "^1.5.2" + concat-stream "^1.5.0" + minimist "^1.1.1" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" cipher-base "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.3" @@ -3798,13 +4547,121 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -browserify-zlib@^0.2.0: +browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" +browserify@^16.5.2: + version "16.5.2" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.2.tgz#d926835e9280fa5fd57f5bc301f2ef24a972ddfe" + integrity sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^2.0.0" + browserify-zlib "~0.2.0" + buffer "~5.2.1" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp-classic "^0.5.2" + module-deps "^6.2.3" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^3.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + +browserify@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-17.0.0.tgz#4c48fed6c02bfa2b51fd3b670fddb805723cdc22" + integrity sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^2.0.0" + browserify-zlib "~0.2.0" + buffer "~5.2.1" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.1" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^3.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.2.1" + labeled-stream-splicer "^2.0.0" + mkdirp-classic "^0.5.2" + module-deps "^6.2.3" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "^1.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum-object "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^3.0.0" + stream-http "^3.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.12.0" + vm-browserify "^1.0.0" + xtend "^4.0.0" + browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.17.6, browserslist@^4.20.2: version "4.20.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" @@ -3816,6 +4673,18 @@ browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.17.6, browserslist@^ node-releases "^2.0.2" picocolors "^1.0.0" +bruce-millis-option@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bruce-millis-option/-/bruce-millis-option-1.0.0.tgz#d2247d576d7593d5644853c08244934283dc6300" + integrity sha512-CJOBham7dfRAU97F7vmGEmNXcSkK0GlDV+0QqsaVUu7cH/LO4I/y80j1GWX7MasKJMo6zQU2oCuTRl/ko2kyQA== + dependencies: + bruce-millis "^1.0.0" + +bruce-millis@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bruce-millis/-/bruce-millis-1.0.0.tgz#78c7cb499283fb7feb5ef1432fc3a11e4b4ce469" + integrity sha512-fUdlIysbXdH8xLNLfNHzcmJOEaJ845eVrmi1VuTCHOEB4tVdQeJ+xh+dkShiYwkntCdCbUyWk1t/R4V4fRhoqw== + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3855,16 +4724,53 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@~5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +bundle-collapser@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/bundle-collapser/-/bundle-collapser-1.4.0.tgz#c6e5c1104e91865b5158e91053b38788f50aa1d7" + integrity sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg== + dependencies: + browser-pack "^6.0.2" + browser-unpack "^1.1.0" + concat-stream "^1.5.0" + falafel "^2.1.0" + minimist "^1.1.1" + through2 "^2.0.0" + bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -3925,6 +4831,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" + integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA== + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3933,11 +4844,47 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-matcher@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-2.0.0.tgz#a38bee4e9ddbeec76aa31cc20311085a34dd395b" + integrity sha512-CIDC5wZZfZ2VjZu849WQckS58Z3pJXFfRaSjNjgo/q3in5zxkhTwVL83vttgtmvyLG7TuDlLlBya7SKP6CjDIA== + dependencies: + deep-equal "^1.0.0" + espurify "^2.0.0" + estraverse "^4.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -3947,7 +4894,7 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -3957,11 +4904,28 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +candygraph@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/candygraph/-/candygraph-0.3.1.tgz#cd1d179cf99d47a6eb8d7a02c6af8302c9e3d5cf" + integrity sha512-hKucn1biGRIDYxtYj+a5lIl5L8oQy7reE4aQAFKBteq3EodYfZQnLgmbMoQItBFZMLFa173fm3CLfiLhwM6lZw== + dependencies: + gl-matrix "^3.3.0" + regl "^1.7.0" + caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001317: version "1.0.30001332" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz#39476d3aa8d83ea76359c70302eafdd4a1d727dd" integrity sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw== +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -3974,16 +4938,12 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" +catering@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -chalk@^3.0.0: +chalk@3.0.0, chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== @@ -3991,6 +4951,26 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3999,6 +4979,24 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -4019,6 +5017,11 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + check-node-version@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/check-node-version/-/check-node-version-4.2.1.tgz#42f7e3c6e2427327b5c9080dae593d8997fe9a06" @@ -4067,7 +5070,7 @@ chevrotain@^10.1.2: lodash "4.17.21" regexp-to-ast "0.5.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.0, chokidar@^3.4.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4129,6 +5132,14 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjk-regex@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cjk-regex/-/cjk-regex-2.0.0.tgz#060aa111e61092768c438ccc9c643a53e8fe1ee5" + integrity sha512-E4gFi2f3jC0zFVHpaAcupW+gv9OejZ2aV3DP/LlSO0dDcZJAXw7W0ivn+vN17edN/PhU4HCgs1bfx7lPK7FpdA== + dependencies: + regexp-util "^1.2.1" + unicode-regex "^2.0.0" + cjs-module-lexer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" @@ -4162,6 +5173,49 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg== + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + clipboard@^2.0.1, clipboard@^2.0.8: version "2.0.10" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.10.tgz#e61f6f7139ac5044c58c0484dcac9fb2a918bfd6" @@ -4221,6 +5275,11 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -4263,6 +5322,21 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^2.0.16, colorette@^2.0.17: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combine-source-map@^0.8.0, combine-source-map@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + integrity sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg== + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -4290,6 +5364,11 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^9.3.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== + commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" @@ -4302,6 +5381,22 @@ comment-parser@1.2.4: resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.2.4.tgz#489f3ee55dfd184a6e4bffb31baba284453cb760" integrity sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw== +comment-parser@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.0.tgz#68beb7dbe0849295309b376406730cd16c719c44" + integrity sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA== + +common-shakeify@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/common-shakeify/-/common-shakeify-1.1.1.tgz#b8ceff048db5dbfa7704ce83f0c993f560c73fa3" + integrity sha512-M9hTU14RkpKvNggSU4zJIzgm89inwjnhipxvKxCNms/gM77R7keRqOqGYIM/Jr4BBhtbZB8ZF//raYqAbHk/DA== + dependencies: + "@goto-bus-stop/common-shake" "^2.3.0" + convert-source-map "^1.5.1" + through2 "^2.0.3" + transform-ast "^2.4.3" + wrap-comment "^1.0.1" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -4312,6 +5407,26 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + compute-scroll-into-view@^1.0.17: version "1.0.17" resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" @@ -4327,7 +5442,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: +concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -4337,6 +5452,16 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -4347,23 +5472,69 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ== -constants-browserify@^1.0.0: +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + +constants-browserify@^1.0.0, constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-hex@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/convert-hex/-/convert-hex-0.1.0.tgz#08c04568922c27776b8a2e81a95d393362ea0b65" + integrity sha512-w20BOb1PiR/sEJdS6wNrUjF5CSfscZFUp7R9NSlXH8h2wynzXVEPFPJECAnkNylZ+cvf3p7TyRUHggDmrwXT9A== + +convert-source-map@^1.1.1, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -4414,6 +5585,24 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@5.2.1, cosmiconfig@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -4436,6 +5625,11 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" +count-lines@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/count-lines/-/count-lines-0.1.2.tgz#e33493fb6860a82f7159d8237843fbfaefee5962" + integrity sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g== + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -4487,7 +5681,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.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4496,7 +5690,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: +crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -4633,11 +5827,29 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -damerau-levenshtein@^1.0.7: +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.7, damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +dash-ast@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" + integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== + +dash-ast@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-2.0.1.tgz#8d0fd2e601c59bf874cc22877ee7dd889f54dee8" + integrity sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -4645,6 +5857,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +dashify@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dashify/-/dashify-2.0.0.tgz#fff270ca2868ca427fee571de35691d6e437a648" + integrity sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -4654,26 +5871,31 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.7: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -4703,11 +5925,49 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -dedent@^0.7.0: +dedent@0.7.0, dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +deep-dot@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/deep-dot/-/deep-dot-0.0.2.tgz#d7488c8777440032ebb9c6b8e9773c4135bc3ffa" + integrity sha512-SB8QWQ0wL8poi7ddhKaXijYbHYQYuv4lPvQGxOIwVDYu5G0OjUSTkvjPB1H9AGW0rOf49XHKWOtFnBTJtmHbvQ== + +deep-equal@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-equal@^2.0.1, deep-equal@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.5.tgz#55cd2fe326d83f9cbf7261ef0e060b3f724c5cb9" + integrity sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw== + dependencies: + call-bind "^1.0.0" + es-get-iterator "^1.1.1" + get-intrinsic "^1.0.1" + is-arguments "^1.0.4" + is-date-object "^1.0.2" + is-regex "^1.1.1" + isarray "^2.0.5" + object-is "^1.1.4" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.3" + which-boxed-primitive "^1.0.1" + which-collection "^1.0.1" + which-typed-array "^1.1.2" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -4733,7 +5993,7 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== @@ -4763,6 +6023,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -4776,6 +6041,20 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +del@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -4786,6 +6065,21 @@ delegate@^3.1.2: resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deps-sort@^2.0.0, deps-sort@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" + integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== + dependencies: + JSONStream "^1.0.3" + shasum-object "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -4794,6 +6088,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -4811,6 +6110,15 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detective@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + devtools-protocol@0.0.869402: version "0.0.869402" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.869402.tgz#03ade701761742e43ae4de5dc188bcd80f156d8d" @@ -4821,7 +6129,7 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@^4.0.2: +diff@4.0.2, diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== @@ -4900,7 +6208,7 @@ dom-serializer@^1.0.1, dom-serializer@^1.3.2: domhandler "^4.2.0" entities "^2.0.0" -domain-browser@^1.1.1: +domain-browser@^1.1.1, domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== @@ -4953,6 +6261,21 @@ domutils@^2.5.2, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotignore@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + downshift@^6.0.15: version "6.1.7" resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.7.tgz#fdb4c4e4f1d11587985cd76e21e8b4b3fa72e44c" @@ -4969,7 +6292,14 @@ draco3d@^1.4.1: resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.2.tgz#a09604a9e6bbf4e5a69208af4622038c55ef4ca7" integrity sha512-AeRQ25Fb29c14vpjnh167UGW0nGY0ZpEM3ld+zEXoEySlmEXcXfsCHZeTgo5qXH925V1JsdjrzasdaQ22/vXog== -duplexer@^0.1.2: +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + +duplexer@^0.1.2, duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -4984,6 +6314,21 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +duplexify@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -4992,11 +6337,36 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +editorconfig-to-prettier@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/editorconfig-to-prettier/-/editorconfig-to-prettier-0.1.1.tgz#7391c7067dfd68ffee65afc2c4fbe4fba8d4219a" + integrity sha512-MMadSSVRDb4uKdxV6bCXXN4cTsxIsXYtV4XdPu6FOCSAw6zsCIDA+QEktEU+u6h+c/mTrul5NR+pwFpPxwetiQ== + +editorconfig@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + electron-to-chromium@^1.4.84: version "1.4.111" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.111.tgz#897613f6504f3f17c9381c7499a635b413e4df4e" integrity sha512-/s3+fwhKf1YK4k7btOImOzCQLpUjS6MaPf0ODTNuT4eTM1Bg4itBpLkydhOzJmpmH6Z9eXFyuuK5czsmzRzwtw== +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5035,6 +6405,11 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -5049,6 +6424,38 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +engine.io-client@^6.1.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.2.2.tgz#c6c5243167f5943dcd9c4abee1bfc634aa2cbdd0" + integrity sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.0.3" + ws "~8.2.3" + xmlhttprequest-ssl "~2.0.0" + +engine.io-parser@~5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" + integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== + +engine.io@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.0.tgz#003bec48f6815926f2b1b17873e576acd54f41d0" + integrity sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg== + dependencies: + "@types/cookie" "^0.4.1" + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.0.3" + ws "~8.2.3" + enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" @@ -5130,6 +6537,11 @@ equivalent-key-map@^0.2.2: resolved "https://registry.yarnpkg.com/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz#be4d57049bb8d46a81d6e256c1628465620c2a13" integrity sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew== +err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -5177,11 +6589,54 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19 string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-abstract@^1.19.5, es-abstract@^1.20.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-get-iterator@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" + integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.0" + has-symbols "^1.0.1" + is-arguments "^1.1.0" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.5" + isarray "^2.0.5" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -5198,26 +6653,230 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@~0.10.14: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3, es6-map@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A== + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@^0.1.5, es6-set@~0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.6.tgz#5669e3b2aa01d61a50ba79964f733673574983b8" + integrity sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + es6-iterator "~2.0.3" + es6-symbol "^3.1.3" + event-emitter "^0.3.5" + type "^2.7.2" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +esbuild-android-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz#3c7b2f2a59017dab3f2c0356188a8dd9cbdc91c8" + integrity sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg== + +esbuild-android-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz#e301db818c5a67b786bf3bb7320e414ac0fcf193" + integrity sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg== + +esbuild-darwin-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz#11726de5d0bf5960b92421ef433e35871c091f8d" + integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== + +esbuild-darwin-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz#ad89dafebb3613fd374f5a245bb0ce4132413997" + integrity sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg== + +esbuild-freebsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz#6bfb52b4a0d29c965aa833e04126e95173289c8a" + integrity sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA== + +esbuild-freebsd-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz#38a3fed8c6398072f9914856c7c3e3444f9ef4dd" + integrity sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w== + +esbuild-linux-32@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz#942dc70127f0c0a7ea91111baf2806e61fc81b32" + integrity sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ== + +esbuild-linux-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz#6d748564492d5daaa7e62420862c31ac3a44aed9" + integrity sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg== + +esbuild-linux-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz#28cd899beb2d2b0a3870fd44f4526835089a318d" + integrity sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA== + +esbuild-linux-arm@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz#6441c256225564d8794fdef5b0a69bc1a43051b5" + integrity sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q== + +esbuild-linux-mips64le@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz#d4927f817290eaffc062446896b2a553f0e11981" + integrity sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ== + +esbuild-linux-ppc64le@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz#b6d660dc6d5295f89ac51c675f1a2f639e2fb474" + integrity sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw== + +esbuild-linux-riscv64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz#2801bf18414dc3d3ad58d1ea83084f00d9d84896" + integrity sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA== + +esbuild-linux-s390x@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz#12a634ae6d3384cacc2b8f4201047deafe596eae" + integrity sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ== + +esbuild-netbsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz#951bbf87600512dfcfbe3b8d9d117d684d26c1b8" + integrity sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w== + +esbuild-openbsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz#26705b61961d525d79a772232e8b8f211fdbb035" + integrity sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA== + +esbuild-sunos-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz#d794da1ae60e6e2f6194c44d7b3c66bf66c7a141" + integrity sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA== + +esbuild-windows-32@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz#0670326903f421424be86bc03b7f7b3ff86a9db7" + integrity sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg== + +esbuild-windows-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz#64f32acb7341f3f0a4d10e8ff1998c2d1ebfc0a9" + integrity sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw== + +esbuild-windows-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz#4fe7f333ce22a922906b10233c62171673a3854b" + integrity sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA== + +esbuild@^0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.5.tgz#5effd05666f621d4ff2fe2c76a67c198292193ff" + integrity sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg== + optionalDependencies: + "@esbuild/linux-loong64" "0.15.5" + esbuild-android-64 "0.15.5" + esbuild-android-arm64 "0.15.5" + esbuild-darwin-64 "0.15.5" + esbuild-darwin-arm64 "0.15.5" + esbuild-freebsd-64 "0.15.5" + esbuild-freebsd-arm64 "0.15.5" + esbuild-linux-32 "0.15.5" + esbuild-linux-64 "0.15.5" + esbuild-linux-arm "0.15.5" + esbuild-linux-arm64 "0.15.5" + esbuild-linux-mips64le "0.15.5" + esbuild-linux-ppc64le "0.15.5" + esbuild-linux-riscv64 "0.15.5" + esbuild-linux-s390x "0.15.5" + esbuild-netbsd-64 "0.15.5" + esbuild-openbsd-64 "0.15.5" + esbuild-sunos-64 "0.15.5" + esbuild-windows-32 "0.15.5" + esbuild-windows-64 "0.15.5" + esbuild-windows-arm64 "0.15.5" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^2.0.0: +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + 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.6.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -5230,11 +6889,36 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ== + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-config-prettier@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== +eslint-config-prettier@^8.3.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-config-standard-jsx@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz#70852d395731a96704a592be5b0bfaccfeded239" + integrity sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ== + +eslint-config-standard@17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== + eslint-import-resolver-node@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" @@ -5251,7 +6935,15 @@ eslint-module-utils@^2.7.3: debug "^3.2.7" find-up "^2.1.0" -eslint-plugin-import@^2.25.2: +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.26.0: version "2.26.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== @@ -5277,6 +6969,13 @@ eslint-plugin-jest@^24.1.3: dependencies: "@typescript-eslint/experimental-utils" "^4.0.1" +eslint-plugin-jest@^25.2.3: + version "25.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + eslint-plugin-jsdoc@^36.0.8: version "36.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz#124cd0e53a5d07f01ebde916a96dd1a6009625d6" @@ -5292,6 +6991,20 @@ eslint-plugin-jsdoc@^36.0.8: semver "^7.3.5" spdx-expression-parse "^3.0.1" +eslint-plugin-jsdoc@^37.0.3: + version "37.9.7" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz#ef46141aa2e5fcbb89adfa658eef8126435e9eac" + integrity sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g== + dependencies: + "@es-joy/jsdoccomment" "~0.20.1" + comment-parser "1.3.0" + debug "^4.3.3" + escape-string-regexp "^4.0.0" + esquery "^1.4.0" + regextras "^0.8.0" + semver "^7.3.5" + spdx-expression-parse "^3.0.1" + eslint-plugin-jsx-a11y@^6.4.1: version "6.5.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" @@ -5310,6 +7023,25 @@ eslint-plugin-jsx-a11y@^6.4.1: language-tags "^1.0.5" minimatch "^3.0.4" +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + eslint-plugin-markdown@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.2.tgz#79274bf17ce3ead48e4a55cbcb6d7ce735754280" @@ -5319,6 +7051,20 @@ eslint-plugin-markdown@^1.0.2: remark-parse "^5.0.0" unified "^6.1.2" +eslint-plugin-n@^15.1.0: + version "15.2.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.2.4.tgz#d62021a0821ae650701ed459756aaf478a9b6056" + integrity sha512-tjnVMv2fiXYMnuiIFI8QMtyUFI42SckEEWvi8h68SWGWshfqO6SSCASy24dGMGAiy7NUk6DZt90DM0iNUsmQ5w== + dependencies: + builtins "^5.0.1" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" + ignore "^5.1.1" + is-core-module "^2.9.0" + minimatch "^3.1.2" + resolve "^1.10.1" + semver "^7.3.7" + eslint-plugin-prettier@^3.3.0: version "3.4.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" @@ -5326,11 +7072,21 @@ eslint-plugin-prettier@^3.3.0: dependencies: prettier-linter-helpers "^1.0.0" +eslint-plugin-promise@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" + integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== + eslint-plugin-react-hooks@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz#71c39e528764c848d8253e1aa2c7024ed505f6c4" integrity sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ== +eslint-plugin-react-hooks@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + eslint-plugin-react@^7.22.0: version "7.29.4" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" @@ -5351,6 +7107,46 @@ eslint-plugin-react@^7.22.0: semver "^6.3.0" string.prototype.matchall "^4.0.6" +eslint-plugin-react@^7.27.0: + version "7.31.10" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz#6782c2c7fe91c09e715d536067644bbb9491419a" + integrity sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-plugin-react@^7.28.0: + version "7.30.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5359,7 +7155,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: +eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5367,7 +7163,22 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -5391,6 +7202,54 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + eslint@^7.17.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -5414,28 +7273,127 @@ eslint@^7.17.0: esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@^8.13.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@^8.7.0: + version "8.26.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" + integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" - v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" espree@^7.3.0, espree@^7.3.1: version "7.3.1" @@ -5446,12 +7404,35 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +espurify@^2.0.0, espurify@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/espurify/-/espurify-2.1.1.tgz#afb043f22fac908d991dd25f7bf40bcf03935b9c" + integrity sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ== + +esquery@^1.0.1, esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -5465,7 +7446,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -5475,12 +7456,62 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -esutils@^2.0.2: +estree-is-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/estree-is-function/-/estree-is-function-1.0.0.tgz#c0adc29806d7f18a74db7df0f3b2666702e37ad2" + integrity sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA== + +estree-is-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz#50433fa88d3d00a1bf7a1d7df6e4e67f36aa89f7" + integrity sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ== + +estree-is-member-expression@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz#e724721e0a14949d363915fd71448eaa6312f590" + integrity sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg== + +estree-is-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/estree-is-require/-/estree-is-require-1.0.0.tgz#fce2c6126d141d1f9316e8c07799d7f0a55bb69b" + integrity sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA== + dependencies: + estree-is-identifier "^1.0.0" + +esutils@2.0.3, esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -events@^3.0.0: +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-emitter@^0.3.5, event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events-to-array@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" + integrity sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA== + +events@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" + integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== + +events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -5511,6 +7542,21 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^2.0.3, execa@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^3.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + execa@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -5526,6 +7572,21 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + execall@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" @@ -5582,6 +7643,50 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +express@^4.17.0: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -5602,6 +7707,15 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -5637,6 +7751,14 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +falafel@^2.1.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.5.tgz#3ccb4970a09b094e9e54fead2deee64b4a589d56" + integrity sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ== + dependencies: + acorn "^7.1.1" + isarray "^2.0.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5647,7 +7769,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.2.5, fast-glob@^3.2.9: +fast-glob@^3.0.3, fast-glob@^3.2.5, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -5673,6 +7795,11 @@ fast-memoize@^2.5.1: resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" @@ -5716,6 +7843,35 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -5767,6 +7923,19 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -5793,6 +7962,16 @@ find-file-up@^0.1.2: fs-exists-sync "^0.1.0" resolve-dir "^0.1.0" +find-nearest-file@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-nearest-file/-/find-nearest-file-1.1.0.tgz#e29441740329a2015f7655faecd7b85e02cad686" + integrity sha512-NMsS0ITOwpBPrHOyO7YUtDhaVEGUKS0kBJDVaWZPuCzO7JMW+uzFQQVts/gPyIV9ioyNWDb5LjhHWXVf1OnBDA== + +find-parent-dir@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + integrity sha512-41+Uo9lF5JNGpIMGrujNKDuqH9ofU2ISJ1XCZPLIN/Yayql599PtA0ywYtlLMYmJcSPkr4uAF14wJmKlW2Fx3g== + find-parent-dir@~0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.1.tgz#c5c385b96858c3351f95d446cab866cbf9f11125" @@ -5814,6 +7993,11 @@ find-process@^1.4.3: commander "^5.1.0" debug "^4.1.1" +find-project-root@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/find-project-root/-/find-project-root-1.1.1.tgz#d242727a2d904725df5714f23dfdcdedda0b6ef8" + integrity sha512-4+yZ013W+EZc+hvdgA2RlzlgNfP1eGdMNxU6xzw1yt518cF6/xZD3kLV+bprYX5+AD0IL76xcN28TPqYJHxrHw== + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -5849,6 +8033,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -5859,6 +8051,15 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -5867,11 +8068,26 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + flatted@^3.1.0: version "3.2.5" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flow-parser@0.111.3: + version "0.111.3" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.111.3.tgz#4c256aa21a5dbb53d5305e3512cc120659ca08f3" + integrity sha512-iEjGZ94OBMcESxnLorXNjJmtd/JtQYXUVrQpfwvtAKkuyawRmv+2LM6nqyOsOJkISEYbyY6ziudRE0u4VyPSVA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -5880,6 +8096,18 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@^1.0.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -5920,6 +8148,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fraction.js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" @@ -5932,7 +8165,19 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -from2@^2.1.0: +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +from2-string@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/from2-string/-/from2-string-1.1.0.tgz#18282b27d08a267cb3030cd2b8b4b0f212af752a" + integrity sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA== + dependencies: + from2 "^2.0.3" + +from2@^2.0.3, from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -5990,7 +8235,7 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.0, function.prototype.name@^1.1.2: +function.prototype.name@^1.1.0, function.prototype.name@^1.1.2, function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== @@ -6015,11 +8260,30 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-assigned-identifiers@^1.1.0, get-assigned-identifiers@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" + integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== + +get-browser-rtc@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz#d1494e299b00f33fc8e9d6d3343ba4ba99711a2c" + integrity sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ== + get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -6029,11 +8293,21 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + get-stdin@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" @@ -6044,7 +8318,7 @@ get-stdin@~5.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= -get-stream@^4.0.0: +get-stream@4.1.0, get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -6058,6 +8332,11 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -6086,6 +8365,11 @@ gettext-parser@^1.3.1: encoding "^0.1.12" safe-buffer "^5.1.1" +gl-matrix@^3.3.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" + integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -6094,13 +8378,31 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.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@^5.0.10: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -6113,6 +8415,18 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.0, glob@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~7.1.2: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -6192,13 +8506,20 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.0.0: +globals@^12.0.0, globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: type-fest "^0.8.1" +globals@^13.12.0, globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + globals@^13.6.0, globals@^13.9.0: version "13.13.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" @@ -6206,7 +8527,32 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -globby@^11.0.3, globby@^11.0.4: +globby@6.1.0, globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6218,22 +8564,21 @@ globby@^11.0.3, globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globjoin@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= +globs-to-files@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globs-to-files/-/globs-to-files-1.0.0.tgz#54490f6d1f4b9fd2de9d99445146ffb37550380d" + integrity sha512-zNZNFS6hwQ0rsbu8EKAX+1j1kZk2qglDBfxRMJYnlNxCzFVOLGpWaRjK745cSK+zDrjLQ5qIrwhkdghTiR6x7A== + dependencies: + array-uniq "~1.0.2" + asyncreduce "~0.1.4" + glob "^5.0.10" + xtend "^4.0.0" + glsl-noise@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/glsl-noise/-/glsl-noise-0.0.0.tgz#367745f3a33382c0eeec4cb54b7e99cfc1d7670b" @@ -6253,7 +8598,7 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -6268,6 +8613,18 @@ gradient-parser@^0.1.5: resolved "https://registry.yarnpkg.com/gradient-parser/-/gradient-parser-0.1.5.tgz#0c7e2179559e5ce7d8d71f4423af937100b2248c" integrity sha1-DH4heVWeXOfY1x9EI6+TcQCyJIw= +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphql@14.6.0: + version "14.6.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.6.0.tgz#57822297111e874ea12f5cd4419616930cd83e49" + integrity sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg== + dependencies: + iterall "^1.2.2" + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -6280,6 +8637,18 @@ gzip-size@^6.0.0: dependencies: duplexer "^0.1.2" +handlebars@^4.0.13: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -6298,11 +8667,36 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-dynamic-import@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz#9bca87846aa264f2ad224fcd014946f5e5182f52" + integrity sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -6387,6 +8781,14 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + highlight-words-core@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa" @@ -6432,6 +8834,11 @@ hpq@^1.3.0: resolved "https://registry.yarnpkg.com/hpq/-/hpq-1.3.0.tgz#fe73406927f6327ea66aa6055fbb130ac9a249c0" integrity sha512-fvYTvdCFOWQupGxqkahrkA+ERBuMdzkxwtUdKrxR6rmMd4Pfl+iZ1QiQYoaZ0B/v0y59MOMnz3XFUWbT50/NWA== +html-element-attributes@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/html-element-attributes/-/html-element-attributes-2.2.1.tgz#ff397c7a3d6427064b117b6f36b45be08e79db93" + integrity sha512-gGTgCeQu+g1OFExZKWQ1LwbFXxLJ6cGdCGj64ByEaxatr/EPVc23D6Gxngb37ao+SNInP/sGu8FXxRsSxMm7aQ== + html-element-map@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" @@ -6452,11 +8859,26 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-styles@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/html-styles/-/html-styles-1.0.0.tgz#a18061fd651f99c6b75c45c8e0549a3bc3e01a75" + integrity sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w== + +html-tag-names@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.5.tgz#f537420c16769511283f8ae1681785fbc89ee0a9" + integrity sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A== + html-tags@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + integrity sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg== + htmlparser2@^3.10.0: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -6479,6 +8901,17 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-parser-js@>=0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" @@ -6493,6 +8926,15 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -6520,7 +8962,17 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -iconv-lite@0.4.24: +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + +humanize-duration@^3.23.1: + version "3.27.2" + resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.27.2.tgz#4b4e565bec098d22c9a54344e16156d1c649f160" + integrity sha512-A15OmA3FLFRnehvF4ZMocsxTZYvHq4ze7L+AgR1DeHw0xC9vMd4euInY83uqGU9/XXKNnVIEeKc1R8G8nKqtzg== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6554,12 +9006,17 @@ ignore-emit-webpack-plugin@^2.0.6: resolved "https://registry.yarnpkg.com/ignore-emit-webpack-plugin/-/ignore-emit-webpack-plugin-2.0.6.tgz#570c30a08ee4c2ce6060f80d4bc4c5c5fec4d606" integrity sha512-/zC18RWCC2wz4ZwnS4UoujGWzvSKy28DLjtE+jrGBOXej6YdmityhBDzE8E0NlktEqi4tgdNbydX8B6G4haHSQ== -ignore@^4.0.6: +ignore@4.0.6, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: +ignore@^3.3.7: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^5.1.1, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -6574,6 +9031,14 @@ immutable@^4.0.0: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -6608,11 +9073,21 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ== + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== + infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -6626,7 +9101,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6646,6 +9121,48 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + integrity sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA== + dependencies: + source-map "~0.5.3" + +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +insert-module-globals@^7.0.0, insert-module-globals@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3" + integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg== + dependencies: + JSONStream "^1.0.3" + acorn-node "^1.5.2" + combine-source-map "^0.8.0" + concat-stream "^1.6.1" + is-buffer "^1.1.0" + path-is-absolute "^1.0.1" + process "~0.11.0" + through2 "^2.0.0" + undeclared-identifiers "^1.1.2" + xtend "^4.0.0" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -6660,6 +9177,11 @@ interpret@^1.4.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + irregular-plurals@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" @@ -6692,6 +9214,14 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-arguments@^1.0.4, is-arguments@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -6726,7 +9256,7 @@ is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5: +is-buffer@^1.0.2, is-buffer@^1.1.0, is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -6736,12 +9266,12 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.4: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-ci@^2.0.0: +is-ci@2.0.0, is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== @@ -6755,6 +9285,13 @@ is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1: dependencies: has "^1.0.3" +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6769,7 +9306,7 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -6799,6 +9336,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + is-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -6821,6 +9363,18 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fork-pr@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-fork-pr/-/is-fork-pr-2.5.0.tgz#75f9f44ae245448c84f6c1b07fa816592538da56" + integrity sha512-kca2MhWNsJSUxN/Ud1CPPa+r+XpRnUXfheB8bvgjP6kCgCMYgIL5YMlwx0k7xnyqjnNaEzkQgS14S/SzhOPYkQ== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -6831,11 +9385,23 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -6855,6 +9421,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -6879,7 +9450,19 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.0.0: +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== @@ -6898,6 +9481,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-path-inside@^3.0.1, is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -6920,17 +9508,27 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + is-promise@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== -is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.4: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.1, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -6938,11 +9536,21 @@ is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + is-regexp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -6960,6 +9568,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -6984,6 +9597,17 @@ is-touch-device@^1.0.1: resolved "https://registry.yarnpkg.com/is-touch-device/-/is-touch-device-1.0.1.tgz#9a2fd59f689e9a9bf6ae9a86924c4ba805a42eab" integrity sha512-LAYzo9kMT1b2p19L/1ATGt2XcSilnzNlyvq6c0pbPRVisLbAPpLqr53tIJS00kvrTkj0HtR8U7+u8X0yR8lPSw== +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -6999,6 +9623,11 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -7006,6 +9635,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" @@ -7031,7 +9668,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -7043,6 +9680,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.1, isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -7070,7 +9712,7 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.3: +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -7117,6 +9759,11 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterall@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -7219,6 +9866,13 @@ jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" +jest-docblock@25.3.0: + version "25.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" + integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== + dependencies: + detect-newline "^3.0.0" + jest-docblock@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" @@ -7530,6 +10184,16 @@ jest@^26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" +js-base64@^2.1.9: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7543,6 +10207,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^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" + js-yaml@~3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -7566,6 +10237,11 @@ jsdoc-type-pratt-parser@^1.1.1: resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz#3482a3833b74a88c95a6ba7253f0c0de3b77b9f5" integrity sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg== +jsdoc-type-pratt-parser@~2.2.3: + version "2.2.5" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz#c9f93afac7ee4b5ed4432fe3f09f7d36b05ed0ff" + integrity sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw== + jsdom@^16.4.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -7609,7 +10285,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -7639,6 +10315,20 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stable-stringify@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== + dependencies: + jsonify "~0.0.0" + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + integrity sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw== + dependencies: + jsonify "~0.0.0" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -7671,6 +10361,16 @@ jsonc-parser@~2.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.2.1.tgz#db73cd59d78cce28723199466b2a03d1be1df2bc" integrity sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w== +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -7689,6 +10389,14 @@ jsprim@^1.2.2: array-includes "^3.1.4" object.assign "^4.1.2" +jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + kind-of@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" @@ -7740,6 +10448,19 @@ ktx-parse@^0.2.1: resolved "https://registry.yarnpkg.com/ktx-parse/-/ktx-parse-0.2.2.tgz#b037b66044855215b332cb73104590af49e47791" integrity sha512-cFBc1jnGG2WlUf52NbDUXK2obJ+Mo9WUkBRvr6tP6CKxRMvZwDDFNV3JAS4cewETp5KyexByfWm9sm+O8AffiQ== +ktx-parse@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/ktx-parse/-/ktx-parse-0.4.5.tgz#79905e22281a9d3e602b2ff522df1ee7d1813aa6" + integrity sha512-MK3FOody4TXbFf8Yqv7EBbySw7aPvEcPX++Ipt6Sox+/YMFvR5xaTyhfNSk1AEmMy+RYIw81ctN4IMxCB8OAlg== + +labeled-stream-splicer@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" + integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== + dependencies: + inherits "^2.0.1" + stream-splicer "^2.0.0" + language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -7762,11 +10483,29 @@ lazy-cache@^1.0.3: resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= -leven@^3.1.0: +lerp@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/lerp/-/lerp-1.0.3.tgz#a18c8968f917896de15ccfcc28d55a6b731e776e" + integrity sha512-70Rh4rCkJDvwWiTsyZ1HmJGvnyfFah4m6iTux29XmasRiZPDBpT9Cfa4ai73+uLZxnlKruUS62jj2lb11wURiA== + +leven@3.1.0, leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + 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" @@ -7775,13 +10514,10 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== line-height@^0.3.1: version "0.3.1" @@ -7790,11 +10526,21 @@ line-height@^0.3.1: dependencies: computed-style "~0.1.3" +lines-and-columns@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha512-8ZmlJFVK9iCmtLz19HpSsR8HaAMWBT284VMNednLwlIMDP2hJDCIhUp0IZ2xUcZ+Ob6BM0VvCSJwzASDM45NLQ== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linguist-languages@7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/linguist-languages/-/linguist-languages-7.6.0.tgz#6e3d9aa7a98ddf5299f8115788dce8deb8a97c9d" + integrity sha512-DBZPIWjrQmb/52UlSEN8MTiwwugrAh4NBX9/DyIG8IuO8rDLYDRM+KVPbuiPVKd3ResxYtZB5AiSuc8dTzOSog== + linkify-it@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" @@ -7802,6 +10548,103 @@ linkify-it@^2.0.0: dependencies: uc.micro "^1.0.1" +lint-staged@9.4.3: + version "9.4.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.4.3.tgz#f55ad5f94f6e105294bfd6499b23142961f7b982" + integrity sha512-PejnI+rwOAmKAIO+5UuAZU9gxdej/ovSEOAY34yMfC3OS4Ac82vCBPzAWLReR9zCPOMqeVwQRaZ3bUBpAsaL2Q== + dependencies: + chalk "^2.4.2" + commander "^2.20.0" + cosmiconfig "^5.2.1" + debug "^4.1.1" + dedent "^0.7.0" + del "^5.0.0" + execa "^2.0.3" + listr "^0.14.3" + log-symbols "^3.0.0" + micromatch "^4.0.2" + normalize-path "^3.0.0" + please-upgrade-node "^3.1.1" + string-argv "^0.3.0" + stringify-object "^3.3.0" + +lint-staged@^13.0.3: + version "13.0.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.3.tgz#d7cdf03a3830b327a2b63c6aec953d71d9dc48c6" + integrity sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.17" + commander "^9.3.0" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.1" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA== + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.5" + through "^2.3.8" + wrap-ansi "^7.0.0" + +listr@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + livereload-js@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" @@ -7818,6 +10661,22 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +load-script@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-2.0.0.tgz#40821aaa59e9bbe7be2e28b6ab053e6f44330fa1" + integrity sha512-km6cyoPW4rM22JMGb+SHUKPMZVDpUaMpMAKrv8UHWllIxc/qjgMGHD91nY+5hM+/NFs310OZ2pqQeJKs7HqWPA== + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -7869,6 +10728,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -7899,6 +10765,11 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + integrity sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -7919,11 +10790,35 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@4.17.21, lodash@^4.1.1, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg== + +lodash.uniqby@4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== + +lodash@4.17.21, lodash@^4.1.1, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ== + dependencies: + chalk "^1.0.0" + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -7932,6 +10827,25 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + longest-streak@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" @@ -7944,7 +10858,14 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^4.0.1: +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^4.0.1, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -7971,6 +10892,13 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +magic-string@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.23.2.tgz#204d7c3ea36c7d940209fcc54c39b9f243f13369" + integrity sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA== + dependencies: + sourcemap-codec "^1.4.1" + make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -7986,6 +10914,11 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-promises-safe@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/make-promises-safe/-/make-promises-safe-5.1.0.tgz#dd9d311f555bcaa144f12e225b3d37785f0aa8f2" + integrity sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g== + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -7993,6 +10926,13 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -8072,6 +11012,11 @@ mathml-tag-names@^2.1.3: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== +maybe-combine-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/maybe-combine-errors/-/maybe-combine-errors-1.0.0.tgz#e9592832e61fc47643a92cff3c1f33e27211e5be" + integrity sha512-eefp6IduNPT6fVdwPp+1NgD0PML1NU5P6j1Mj5nz1nidX8/sWY7119WL8vTAHgqfsY74TzW0w1XPgdYEKkGZ5A== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -8124,6 +11069,20 @@ mdurl@^1.0.1: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-5.1.1.tgz#7059b67bf9ac2c924c9f1cff7155a064394adfb3" + integrity sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^2.1.0" + p-is-promise "^2.1.0" + memize@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/memize/-/memize-1.1.0.tgz#4a5a684ac6992a13b1299043f3e49b1af6a0b0d3" @@ -8180,7 +11139,7 @@ meow@^9.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" -merge-deep@^3.0.3: +merge-deep@^3.0.2, merge-deep@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.3.tgz#1a2b2ae926da8b2ae93a0ac15d90cd1922766003" integrity sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA== @@ -8189,12 +11148,24 @@ merge-deep@^3.0.3: clone-deep "^0.2.4" kind-of "^3.0.2" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-source-map@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" + integrity sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA== + dependencies: + source-map "^0.5.6" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -8204,6 +11175,11 @@ meshline@^2.0.4: resolved "https://registry.yarnpkg.com/meshline/-/meshline-2.0.4.tgz#39c7bcf36b503397642f2312e6211f2a8ecf75c5" integrity sha512-Jh6DJl/zLqA4xsKvGv5950jr2ukyXQE1wgxs8u94cImHrvL6soVIggqjP+2hVHZXGYaKnWszhtjuCbKNeQyYiw== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + micromark@~2.11.0: version "2.11.4" resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" @@ -8231,7 +11207,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -8247,23 +11223,38 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -8278,6 +11269,18 @@ mini-css-extract-plugin@^1.3.9: schema-utils "^3.0.0" webpack-sources "^1.1.0" +minify-stream@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/minify-stream/-/minify-stream-2.1.0.tgz#2df5cceee43260f57017cb90739fbf15ca7ade04" + integrity sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw== + dependencies: + concat-stream "^2.0.0" + convert-source-map "^1.5.0" + duplexify "^4.1.1" + from2-string "^1.1.0" + terser "^4.7.0" + xtend "^4.0.1" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -8288,13 +11291,20 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.4, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + minimatch@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -8311,7 +11321,12 @@ minimist-options@4.1.0, minimist-options@^4.0.2: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -8337,7 +11352,7 @@ minipass-pipeline@^1.2.2: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: +minipass@3.1.6, minipass@^3.0.0, minipass@^3.1.1: version "3.1.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== @@ -8406,6 +11421,27 @@ mmd-parser@^1.0.4: resolved "https://registry.yarnpkg.com/mmd-parser/-/mmd-parser-1.0.4.tgz#87cc05782cb5974ca854f0303fc5147bc9d690e7" integrity sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg== +module-deps@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.3.tgz#15490bc02af4b56cf62299c7c17cba32d71a96ee" + integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA== + dependencies: + JSONStream "^1.0.3" + browser-resolve "^2.0.0" + cached-path-relative "^1.0.2" + concat-stream "~1.6.0" + defined "^1.0.0" + detective "^5.2.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.4.0" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + moment-timezone@^0.5.31: version "0.5.34" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" @@ -8440,6 +11476,11 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mri@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + mrmime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" @@ -8455,16 +11496,65 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multi-stage-sourcemap@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz#b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105" + integrity sha512-umaOM+8BZByZIB/ciD3dQLzTv50rEkkGJV78ta/tIVc/J/rfGZY5y1R+fBD3oTaolx41mK8rRcyGtYbDXlzx8Q== + dependencies: + source-map "^0.1.34" + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +multisplice@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/multisplice/-/multisplice-1.0.0.tgz#e74cf2948dcb51a6c317fc5e22980a652f7830e9" + integrity sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mutexify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mutexify/-/mutexify-1.4.0.tgz#b7f4ac0273c81824b840887c6a6e0bfab14bbe94" + integrity sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg== + dependencies: + queue-tick "^1.0.0" + +n-readlines@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.0.tgz#c353797f216c253fdfef7e91da4e8b17c29a91a6" + integrity sha512-ISDqGcspVu6U3VKqtJZG1uR55SmNNF9uK0EMq1IvNVVZOui6MW6VR0+pIZhqz85ORAGp+4zW+5fJ/SE7bwEibA== + nan@^2.12.1: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== +nanobench@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nanobench/-/nanobench-2.1.1.tgz#c2f23fcce116d50b4998b1954ba114674c137269" + integrity sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A== + dependencies: + browser-process-hrtime "^0.1.2" + chalk "^1.1.3" + mutexify "^1.1.0" + pretty-hrtime "^1.0.2" + nanoid@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557" @@ -8487,6 +11577,27 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +nanoresource-collection@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nanoresource-collection/-/nanoresource-collection-1.0.0.tgz#df34cc1b040839d7309d63d95c8b7620e75be4bc" + integrity sha512-S43CyBqLVil3JkG+F7G3SnezPJxdukhirc8yirg931hPWsq+sChwNjaCXkSmeCzIJL6smVvFMyYISmEcLDkwTw== + dependencies: + catering "^2.0.0" + maybe-combine-errors "^1.0.0" + nanoresource "^1.3.0" + +nanoresource@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/nanoresource/-/nanoresource-1.3.0.tgz#823945d9667ab3e81a8b2591ab8d734552878cd0" + integrity sha512-OI5dswqipmlYfyL3k/YMm7mbERlh4Bd1KuKdMHpeoVD1iVxqxaTMKleB4qaA2mbQZ6/zMNSxCXv9M9P/YbqTuQ== + dependencies: + inherits "^2.0.4" + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -8502,16 +11613,34 @@ nearley@^2.7.10: railroad-diagrams "^1.0.0" randexp "0.4.6" -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -8590,6 +11719,11 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" +normalize-path@3.0.0, normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -8597,11 +11731,6 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" @@ -8640,6 +11769,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" + integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== + dependencies: + path-key "^3.0.0" + npm-run-path@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -8647,6 +11783,13 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -8666,6 +11809,11 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -8676,7 +11824,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -8700,7 +11848,12 @@ object-inspect@^1.12.0, object-inspect@^1.7.0, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== -object-is@^1.0.2, object-is@^1.1.2: +object-inspect@^1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2, object-is@^1.1.4, object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -8730,6 +11883,16 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" +object.assign@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" @@ -8765,6 +11928,14 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.19.5" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -8781,6 +11952,25 @@ object.values@^1.0.4, object.values@^1.1.0, object.values@^1.1.1, object.values@ define-properties "^1.1.3" es-abstract "^1.19.1" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +on-stream-close@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/on-stream-close/-/on-stream-close-1.0.0.tgz#4f833fe2e8e240168e555860a3dc003e45ef3c84" + integrity sha512-0MkKOAgt9r3XCqYRTIcnxks6fQ3Jd4xPognM5pUED1VLnpyLHsTWXW7LW7V/4deOKfvn4bnn3ahOFcQ2AOgJ/g== + dependencies: + catering "^2.0.0" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -8788,6 +11978,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -8795,6 +11992,21 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^7.1.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -8808,7 +12020,7 @@ opentype.js@^1.3.3: string.prototype.codepointat "^0.2.1" tiny-inflate "^1.0.3" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -8832,7 +12044,7 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-browserify@^0.3.0: +os-browserify@^0.3.0, os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= @@ -8842,6 +12054,23 @@ os-homedir@^1.0.1: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + integrity sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA== + dependencies: + shell-quote "^1.4.2" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -8852,6 +12081,16 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -8894,11 +12133,25 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -8930,6 +12183,14 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8937,6 +12198,13 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + integrity sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg== + dependencies: + path-platform "~0.11.15" + parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" @@ -8979,6 +12247,14 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -8994,6 +12270,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse-srcset@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + parse5-htmlparser2-tree-adapter@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" @@ -9006,16 +12287,42 @@ parse5@6.0.1, parse5@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1: +path-browserify@0.0.1, path-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -9038,7 +12345,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -9058,11 +12365,26 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.5, path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + integrity sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -9113,6 +12435,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -9140,6 +12467,14 @@ pirates@^4.0.1: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +pkg-conf@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" + integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== + dependencies: + find-up "^3.0.0" + load-json-file "^5.2.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -9154,6 +12489,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +please-upgrade-node@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + plur@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" @@ -9182,6 +12524,13 @@ postcss-html@^0.36.0: dependencies: htmlparser2 "^3.10.0" +postcss-less@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-2.0.0.tgz#5d190b8e057ca446d60fe2e2587ad791c9029fb8" + integrity sha512-pPNsVnpCB13nBMOcl5GVh8JGmB0JGFjqkLUDzKdVpptFFKEe9wFdEzvh2j4lD2AD+7qcrUfw9Ta+oi5+Fw7jjQ== + dependencies: + postcss "^5.2.16" + postcss-less@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" @@ -9200,7 +12549,7 @@ postcss-loader@^4.2.0: schema-utils "^3.0.0" semver "^7.3.4" -postcss-media-query-parser@^0.2.3: +postcss-media-query-parser@0.2.3, postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= @@ -9253,6 +12602,13 @@ postcss-sass@^0.4.4: gonzales-pe "^4.3.0" postcss "^7.0.21" +postcss-scss@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" + integrity sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug== + dependencies: + postcss "^7.0.0" + postcss-scss@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383" @@ -9260,6 +12616,15 @@ postcss-scss@^2.1.1: dependencies: postcss "^7.0.6" +postcss-selector-parser@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: version "6.0.10" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" @@ -9278,7 +12643,26 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6: +postcss-values-parser@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz#5d9fa63e2bcb0179ce48f3235303765eb89f3047" + integrity sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6: version "7.0.39" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== @@ -9317,11 +12701,98 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier-standard@^16.4.1: + version "16.4.1" + resolved "https://registry.yarnpkg.com/prettier-standard/-/prettier-standard-16.4.1.tgz#964e7e3f3029427ab8e01bdffb72dea9a87f62c8" + integrity sha512-IW3Sct4GOdqc1s4+1HZjH2HegzLZQ6mDMl2xz6i6KHCac7kCM+obLbvm2e0zp8PytKkLQCdOpj0cWWa48Ruetw== + dependencies: + chalk "^2.4.2" + diff "^4.0.2" + eslint "^6.8.0" + execa "^2.0.4" + find-up "^4.1.0" + get-stdin "^7.0.0" + globby "^6.1.0" + ignore "^3.3.7" + lint-staged "9.4.3" + mri "^1.1.5" + multimatch "^3.0.0" + prettierx "0.11.3" + +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + "prettier@npm:wp-prettier@2.2.1-beta-1": version "2.2.1-beta-1" resolved "https://registry.yarnpkg.com/wp-prettier/-/wp-prettier-2.2.1-beta-1.tgz#8afb761f83426bde870f692edc49adbd3e265118" integrity sha512-+JHkqs9LC/JPp51yy1hzs3lQ7qeuWCwOcSzpQNeeY/G7oSpnF61vxt7hRh87zNRTr6ob2ndy0W8rVzhgrcA+Gw== +prettierx@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/prettierx/-/prettierx-0.11.3.tgz#379d1aa7df4dbd049c1b34a1990d903efa4e6130" + integrity sha512-Xf04LEfD3ITo26i5U/zR++hwqKPG3feR06rrjB0t2o+QFv8ZidFp4o7nPqPGLfE4UwHJgd0qwnZKwm0MsUQHUA== + dependencies: + "@angular/compiler" "8.2.14" + "@babel/code-frame" "7.8.3" + "@babel/parser" "7.9.4" + "@glimmer/syntax" "0.41.4" + "@iarna/toml" "2.2.3" + "@typescript-eslint/typescript-estree" "2.6.1" + angular-estree-parser "1.3.1" + angular-html-parser "1.4.0" + camelcase "5.3.1" + chalk "3.0.0" + cjk-regex "2.0.0" + cosmiconfig "5.2.1" + dashify "2.0.0" + dedent "0.7.0" + diff "4.0.2" + editorconfig "0.15.3" + editorconfig-to-prettier "0.1.1" + escape-string-regexp "2.0.0" + esutils "2.0.3" + find-parent-dir "0.3.0" + find-project-root "1.1.1" + flow-parser "0.111.3" + get-stream "4.1.0" + globby "6.1.0" + graphql "14.6.0" + html-element-attributes "2.2.1" + html-styles "1.0.0" + html-tag-names "1.1.5" + ignore "4.0.6" + is-ci "2.0.0" + jest-docblock "25.3.0" + json-stable-stringify "1.0.1" + leven "3.1.0" + lines-and-columns "1.1.6" + linguist-languages "7.6.0" + lodash.uniqby "4.7.0" + mem "5.1.1" + minimatch "3.0.4" + minimist "1.2.5" + n-readlines "1.0.0" + normalize-path "3.0.0" + parse-srcset "1.0.2" + postcss-less "2.0.0" + postcss-media-query-parser "0.2.3" + postcss-scss "2.0.0" + postcss-selector-parser "2.2.3" + postcss-values-parser "1.5.0" + regexp-util "1.2.2" + remark-math "1.0.6" + remark-parse "5.0.0" + resolve "1.15.1" + semver "6.3.0" + string-width "4.2.0" + unicode-regex "3.0.0" + unified "8.4.2" + vnopts "1.0.2" + yaml "1.8.3" + yaml-unist-parser "1.1.1" + pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -9341,12 +12812,17 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-hrtime@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: +process@^0.11.10, process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= @@ -9387,6 +12863,14 @@ prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, object-assign "^4.1.1" react-is "^16.13.1" +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -9449,7 +12933,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: +punycode@^1.2.4, punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -9482,7 +12966,7 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@^6.4.0: +qs@6.10.3, qs@^6.4.0: version "6.10.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== @@ -9494,7 +12978,7 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -querystring-es3@^0.2.0: +querystring-es3@^0.2.0, querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -9504,16 +12988,35 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.0.tgz#011104793a3309ae86bfeddd54e251dc94a36725" + integrity sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ== + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +r3f-perf@4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/r3f-perf/-/r3f-perf-4.9.1.tgz#f9b0e1e076871e8c54ce2ecf8e7a66c7d4923478" + integrity sha512-IGOrpxIjNhdxV46vqmET4X+C1pIuEk3fPpVHafoEknm1+jiysKLxGOtXGSNlmD3plyi9JRx/cC84BHyJ0Czwkw== + dependencies: + "@stitches/react" "^1.1.0" + candygraph "0.3.1" + lerp "^1.0.3" + rafz "^0.1.14" + react-icons "^4.2.0" + three "*" + three-stdlib "^2.4.0" + zustand "^3.5.10" + raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -9521,6 +13024,11 @@ raf@^3.4.1: dependencies: performance-now "^2.1.0" +rafz@^0.1.14: + version "0.1.14" + resolved "https://registry.yarnpkg.com/rafz/-/rafz-0.1.14.tgz#164f01cf7cc6094e08467247ef351ef5c8d278fe" + integrity sha512-YiQkedSt1urYtYbvHhTQR3l67M8SZbUvga5eJFM/v4vx/GmDdtXlE2hjJIyRjhhO/PjcdGC+CXCYOUA4onit8w== + railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -9534,6 +13042,11 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" +random-string@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/random-string/-/random-string-0.2.0.tgz#a46e4375352beda9a0d7b0d19ed6d321ecd1d82d" + integrity sha512-isA91IquV3ZrFbvwkAtExP8aGL+csx3KGEsEJrvCidzOHioPl5B5g7WyJlk0lMkEz5/i1PqrWTvcdtJHPtrp1g== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -9549,6 +13062,21 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + raw-body@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" @@ -9574,6 +13102,11 @@ re-resizable@^6.4.0: dependencies: fast-memoize "^2.5.1" +re-resizable@^6.9.9: + version "6.9.9" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.9.tgz#99e8b31c67a62115dc9c5394b7e55892265be216" + integrity sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA== + react-addons-shallow-compare@^15.6.2: version "15.6.3" resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.3.tgz#28a94b0dfee71530852c66a69053d59a1baf04cb" @@ -9625,6 +13158,11 @@ react-dom@^17.0.1, react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" +react-icons@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" + integrity sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg== + react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -9761,6 +13299,13 @@ react@^17.0.1, react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + integrity sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w== + dependencies: + readable-stream "^2.0.2" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9810,7 +13355,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -9902,6 +13447,11 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.13.10: + version "0.13.10" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" + integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== + regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" @@ -9927,7 +13477,14 @@ regexp-to-ast@0.5.0: resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== -regexp.prototype.flags@^1.4.1: +regexp-util@1.2.2, regexp-util@^1.2.0, regexp-util@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/regexp-util/-/regexp-util-1.2.2.tgz#5cf599134921eb0d776e41d41e9c0da33f0fa2fc" + integrity sha512-5/rl2UD18oAlLQEIuKBeiSIOp1hb5wCXcakl5yvHxlY1wyWI4D5cUKKzCibBeu741PA9JKvZhMqbkDQqPusX3w== + dependencies: + tslib "^1.9.0" + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -9936,7 +13493,12 @@ regexp.prototype.flags@^1.4.1: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.1.0: +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -9970,7 +13532,19 @@ regjsparser@^0.8.2: dependencies: jsesc "~0.5.0" -remark-parse@^5.0.0: +regl@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/regl/-/regl-1.7.0.tgz#0d185431044a356bf80e9b775b11b935ef2746d3" + integrity sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w== + +remark-math@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-1.0.6.tgz#49eb3dd15d298734c9ae21673115389793af4d1b" + integrity sha512-I43wU/QOQpXvVFXKjA4FHp5xptK65+5F6yolm8+69/JV0EqSOB64wURUZ3JK50JtnTL8FvwLiH2PZ+fvsBxviA== + dependencies: + trim-trailing-lines "^1.1.0" + +remark-parse@5.0.0, remark-parse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== @@ -10085,6 +13659,11 @@ requireindex@^1.2.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-bin@^0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/resolve-bin/-/resolve-bin-0.4.3.tgz#7edf1026d78ec684d69e5a5dbbb321ffdce6938e" @@ -10142,6 +13721,22 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.4, resolve@^1.10.1, resolve@^1.17.0, resolve@^1.4.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.22.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" @@ -10159,6 +13754,29 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +resumer@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w== + dependencies: + through "~2.3.4" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -10169,6 +13787,18 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -10204,6 +13834,18 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel-settled@^1.0.0, run-parallel-settled@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/run-parallel-settled/-/run-parallel-settled-1.0.1.tgz#68fa9dc286cd21042ef5d6a0b721890fa8db5112" + integrity sha512-YHN5KR7pjtjc1Jejcb02SGrZslYLOJtzdNhBq1gUze/llv3lJ3pgLmfLBM4cbpi+rNv7Yn9AcyD8rtPI2iRmvA== + dependencies: + maybe-combine-errors "^1.0.0" + run-parallel@^1.1.4, run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -10223,21 +13865,40 @@ rungen@^0.3.2: resolved "https://registry.yarnpkg.com/rungen/-/rungen-0.3.2.tgz#400c09ebe914e7b17e0b6ef3263400fc2abc7cb3" integrity sha1-QAwJ6+kU57F+C27zJjQA/Cq8fLM= +runnel@~0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/runnel/-/runnel-0.5.3.tgz#f9362b165a05fc6f5e46e458f77a1f7ecdc0daec" + integrity sha512-XAVCMr+hCRGKA4AJdNit1aQC0EKCuCZnlxqfeh9u2CbSPSPyLSI/BfavMfoC/WUd6HyaRBWW1usNsVAqWN9hgw== + rx@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +rxjs@^6.3.3, rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" @@ -10344,33 +14005,79 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +scope-analyzer@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/scope-analyzer/-/scope-analyzer-2.1.2.tgz#b958162feb59823c2835c7b0229187a97c77e9cd" + integrity sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ== + dependencies: + array-from "^2.1.1" + dash-ast "^2.0.1" + es6-map "^0.1.5" + es6-set "^0.1.5" + es6-symbol "^3.1.1" + estree-is-function "^1.0.0" + get-assigned-identifiers "^1.1.0" + select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.0.0, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -10378,6 +14085,21 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +server-destroy@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" + integrity sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ== + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -10398,7 +14120,12 @@ setimmediate@^1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -sha.js@^2.4.0, sha.js@^2.4.8: +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -10416,6 +14143,21 @@ shallow-clone@^0.1.2: lazy-cache "^0.2.3" mixin-object "^2.0.1" +shasum-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" + integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== + dependencies: + fast-safe-stringify "^2.0.7" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + integrity sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw== + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -10440,6 +14182,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.4.2, shell-quote@^1.6.1, shell-quote@^1.7.0: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -10452,7 +14199,7 @@ showdown@^1.9.1: dependencies: yargs "^14.2" -side-channel@^1.0.4: +side-channel@^1.0.3, side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== @@ -10461,11 +14208,21 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +sigmund@^1.0.1, sigmund@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + simple-html-tokenizer@^0.5.7: version "0.5.11" resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz#4c5186083c164ba22a7b477b7687ac056ad6b1d9" @@ -10490,6 +14247,29 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -10499,6 +14279,22 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -10558,7 +14354,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10571,7 +14367,14 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.1.34: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ== + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -10586,6 +14389,11 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +sourcemap-codec@^1.4.1: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spawnd@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/spawnd/-/spawnd-4.4.0.tgz#bb52c5b34a22e3225ae1d3acb873b2cd58af0886" @@ -10685,6 +14493,30 @@ stack-utils@^2.0.2: dependencies: escape-string-regexp "^2.0.0" +standard-engine@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-15.0.0.tgz#e37ca2e1a589ef85431043a3e87cb9ce95a4ca4e" + integrity sha512-4xwUhJNo1g/L2cleysUqUv7/btn7GEbYJvmgKrQ2vd/8pkTmN8cpqAZg+BT8Z1hNeEH787iWUdOpL8fmApLtxA== + dependencies: + get-stdin "^8.0.0" + minimist "^1.2.6" + pkg-conf "^3.1.0" + xdg-basedir "^4.0.0" + +standard@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/standard/-/standard-17.0.0.tgz#85718ecd04dc4133908434660788708cca855aa1" + integrity sha512-GlCM9nzbLUkr+TYR5I2WQoIah4wHA2lMauqbyPLV/oI5gJxqhHzhjl9EG2N0lr/nRqI3KCbCvm/W3smxvLaChA== + dependencies: + eslint "^8.13.0" + eslint-config-standard "17.0.0" + eslint-config-standard-jsx "^11.0.0" + eslint-plugin-import "^2.26.0" + eslint-plugin-n "^15.1.0" + eslint-plugin-promise "^6.0.0" + eslint-plugin-react "^7.28.0" + standard-engine "^15.0.0" + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -10703,7 +14535,12 @@ stats.js@^0.17.0: resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" integrity sha1-scPcRtlEmLV4t/05hbgaznExzH0= -stream-browserify@^2.0.1: +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stream-browserify@^2.0.0, stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== @@ -10711,6 +14548,30 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-combiner@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" + integrity sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ== + dependencies: + duplexer "~0.1.1" + through "~2.3.4" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -10730,11 +14591,34 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-http@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" + integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream-splicer@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" + integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + +string-argv@^0.3.0, string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -10748,6 +14632,32 @@ string-template@~0.2.1: resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= +string-width@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -10766,12 +14676,21 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.codepointat@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== -string.prototype.matchall@^4.0.6: +string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== @@ -10794,6 +14713,15 @@ string.prototype.trim@^1.2.1: define-properties "^1.1.3" es-abstract "^1.19.1" +string.prototype.trim@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz#824960787db37a9e24711802ed0c1d1c0254f83e" + integrity sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string.prototype.trimend@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" @@ -10802,6 +14730,15 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string.prototype.trimstart@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" @@ -10810,6 +14747,15 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string_decoder@0.10: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -10829,6 +14775,29 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -10843,6 +14812,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -10870,6 +14846,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -10877,7 +14858,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -10986,6 +14967,13 @@ stylis@4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg== + dependencies: + minimist "^1.1.0" + sugarss@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" @@ -10993,6 +14981,18 @@ sugarss@^2.0.0: dependencies: postcss "^7.0.2" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -11061,11 +15061,33 @@ svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +syntax-error@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== + dependencies: + acorn-node "^1.2.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + table@^6.0.9, table@^6.6.0: version "6.8.0" resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" @@ -11084,11 +15106,62 @@ tannin@^1.2.0: dependencies: "@tannin/plural-forms" "^1.1.0" +tap-completed@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tap-completed/-/tap-completed-1.0.1.tgz#c7497e80e0b284862471b6a7d633847a9873b55f" + integrity sha512-ro7dZ/LkQQFSNnyClAOiLo4LM7qhIBv6BFwt19N/J2q5Xf00AfBrQZYNF+6q3f1XzLQDeyZ07QfE6ooob0en5Q== + dependencies: + minipass "3.1.6" + tap-parser "^10.1.0" + +tap-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-10.1.0.tgz#7b1aac40dbcaa4716c0b58952686eae65d2b74ad" + integrity sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA== + dependencies: + events-to-array "^1.0.1" + minipass "^3.0.0" + tap-yaml "^1.0.0" + +tap-yaml@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tap-yaml/-/tap-yaml-1.0.0.tgz#4e31443a5489e05ca8bbb3e36cef71b5dec69635" + integrity sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ== + dependencies: + yaml "^1.5.0" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tape@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-5.6.0.tgz#588af7292e4a91e49ce5eba344d632d412317b9b" + integrity sha512-LyM4uqbiTAqDgsHTY0r1LH66yE24P3SZaz5TL3mPUds0XCTFl/0AMUBrjgBjUclvbPTFB4IalXg0wFfbTuuu/Q== + dependencies: + array.prototype.every "^1.1.3" + call-bind "^1.0.2" + deep-equal "^2.0.5" + defined "^1.0.0" + dotignore "^0.1.2" + for-each "^0.3.3" + get-package-type "^0.1.0" + glob "^7.2.3" + has "^1.0.3" + has-dynamic-import "^2.0.1" + inherits "^2.0.4" + is-regex "^1.1.4" + minimist "^1.2.6" + object-inspect "^1.12.2" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.3" + resolve "^2.0.0-next.3" + resumer "^0.0.0" + string.prototype.trim "^1.2.6" + through "^2.3.8" + tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -11160,6 +15233,15 @@ terser-webpack-plugin@^3.0.3: terser "^4.8.0" webpack-sources "^1.4.3" +terser@^3.7.5: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + terser@^4.1.2, terser@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" @@ -11169,6 +15251,15 @@ terser@^4.1.2, terser@^4.8.0: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^4.7.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -11204,6 +15295,23 @@ three-omi@^0.1.5: resolved "https://registry.yarnpkg.com/three-omi/-/three-omi-0.1.5.tgz#51a96d9f998ec770fc0ff58a9ce7bd297e71daef" integrity sha512-0kDTKeEaowN9u0C0wHxbpmDHLJDmsqavbynjIi2ITPoIo/R2znbqxKdd64IfHf9Xv7HgxLnBfL0OM8PDTLu79A== +three-stdlib@^2.4.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.17.0.tgz#5915b110ec6dbf07e0e653bd59889293c7b93407" + integrity sha512-m19X4+ajh+2EJIVcjB288LgbqTli5b8kFahJlg9oNCBfaL8geCgEoM4OUirgV0Ez6Lr58N1MPBR6LjJt7ALfKQ== + dependencies: + "@babel/runtime" "^7.16.7" + "@types/offscreencanvas" "^2019.6.4" + "@webgpu/glslang" "^0.0.15" + chevrotain "^10.1.2" + draco3d "^1.4.1" + fflate "^0.6.9" + ktx-parse "^0.4.5" + mmd-parser "^1.0.4" + opentype.js "^1.3.3" + potpack "^1.0.1" + zstddec "^0.0.2" + three-stdlib@^2.8.6, three-stdlib@^2.8.9: version "2.9.1" resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.9.1.tgz#300abf6cf12ab388e515fd8572217288dffe4736" @@ -11220,17 +15328,22 @@ three-stdlib@^2.8.6, three-stdlib@^2.8.9: potpack "^1.0.1" zstddec "^0.0.2" -three@^0.137.2: - version "0.137.5" - resolved "https://registry.yarnpkg.com/three/-/three-0.137.5.tgz#a1e34bedd0412f2d8797112973dfadac78022ce6" - integrity sha512-rTyr+HDFxjnN8+N/guZjDgfVxgHptZQpf6xfL/Mo7a5JYIFwK6tAq3bzxYYB4Ae0RosDZlDuP+X5aXDXz+XnHQ== +three@*: + version "0.145.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.145.0.tgz#a613d71e75effc2aed88be630027ca01e2b6502e" + integrity sha512-EKoHQEtEJ4CB6b2BGMBgLZrfwLjXcSUfoI/MiIXUuRpeYsfK5aPWbYhdtIVWOH+x6X0TouldHKHBuc/LAiFzAw== + +three@0.144.0: + version "0.144.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.144.0.tgz#2818517169f8ff94eea5f664f6ff1fcdcd436cc8" + integrity sha512-R8AXPuqfjfRJKkYoTQcTK7A6i3AdO9++2n8ubya/GTU+fEHhYKu1ZooRSCPkx69jbnzT7dD/xEo6eROQTt2lJw== throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^2.0.0: +through2@^2.0.0, through2@^2.0.3, through2@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -11238,11 +15351,46 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.8: +through2@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +through2@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.7, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +thunky-with-args@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/thunky-with-args/-/thunky-with-args-1.0.0.tgz#5b202235d8e6c88986c941226c0b4d7e49b2e25d" + integrity sha512-e9QU3bJpxzJx1XcQ1ivwW15xoR3oUJ8MTSpboSTVcTAii2KoxrUaEo+x3PxkgseflqjynJsUP3IqB9jwDZwNtw== + dependencies: + sigmund "~1.0.1" + thunky "~1.0.2" + +thunky@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" + integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + integrity sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q== + dependencies: + process "~0.11.0" + timers-browserify@^2.0.4: version "2.0.12" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" @@ -11272,11 +15420,47 @@ tiny-lr@^1.1.1: object-assign "^4.1.0" qs "^6.4.0" +tiny-simple-peer@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/tiny-simple-peer/-/tiny-simple-peer-10.1.1.tgz#f7df8e425422660ae1fb606715049e3144f52063" + integrity sha512-Hd3Q6ACo08Xb5BGgUMaqYKQuz8fNrd1aWUVJsIvbkFNk+3FtxVgVvnQZlLuUiXhnyZDubR9xTlXqeJOMGwpI3Q== + dependencies: + debug "^4.3.2" + err-code "^3.0.1" + events "^3.3.0" + get-browser-rtc "^1.1.0" + queue-microtask "^1.2.3" + random-string "^0.2.0" + tinycolor2@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== +tinyify@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tinyify/-/tinyify-3.1.0.tgz#cd3f974c24f3ab0ccd0b471b8c4816c7431317fa" + integrity sha512-r4tHoDkWhhoItWbxJ3KCHXask3hJN7gCUkR5PLfnQzQagTA6oDkzhCbiEDHkMqo7Ck7vVSA1pTP1gDc9p1AC1w== + dependencies: + "@goto-bus-stop/envify" "^5.0.0" + acorn-node "^1.8.2" + browser-pack-flat "^3.0.9" + bundle-collapser "^1.3.0" + common-shakeify "^1.1.1" + dash-ast "^1.0.0" + minify-stream "^2.0.1" + multisplice "^1.0.0" + through2 "^3.0.1" + uglifyify "^5.0.0" + unassertify "^2.1.1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -11324,6 +15508,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + totalist@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" @@ -11358,6 +15547,24 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +transform-ast@^2.4.2, transform-ast@^2.4.3: + version "2.4.4" + resolved "https://registry.yarnpkg.com/transform-ast/-/transform-ast-2.4.4.tgz#bebf494e2e73f024746f76348bc86a5992851d00" + integrity sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ== + dependencies: + acorn-node "^1.3.0" + convert-source-map "^1.5.1" + dash-ast "^1.0.0" + is-buffer "^2.0.0" + magic-string "^0.23.2" + merge-source-map "1.0.4" + nanobench "^2.1.1" + +transient-error@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/transient-error/-/transient-error-1.0.0.tgz#9822b38ccdd75a2b8527a865534fe9ba5f0b6ab6" + integrity sha512-pHi+O9OajOp96ldjeZ0i45n/d4QqV8ef8VCrpx5+RL5VO7Xdt2oQj//zcOhuGw5tiPYe73I4d28wV+yCqhSWxA== + traverse@^0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -11380,7 +15587,7 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -trim-trailing-lines@^1.0.0: +trim-trailing-lines@^1.0.0, trim-trailing-lines@^1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== @@ -11425,17 +15632,27 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.3: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^2.2.0, tslib@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tsutils@^3.21.0: +tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -11447,6 +15664,11 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -11503,6 +15725,11 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -11513,6 +15740,24 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0, type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -11530,6 +15775,52 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +uglify-js@^3.1.4: + version "3.17.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" + integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + +uglifyify@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/uglifyify/-/uglifyify-5.0.2.tgz#7d0269885e09faa963208a9ec6721afcaf45fc50" + integrity sha512-NcSk6pgoC+IgwZZ2tVLVHq+VNKSvLPlLkF5oUiHPVOJI0s/OlSVYEGXG9PCAH0hcyFZLyvt4KBdPAQBRlVDn1Q== + dependencies: + convert-source-map "~1.1.0" + minimatch "^3.0.2" + terser "^3.7.5" + through "~2.3.4" + xtend "^4.0.1" + +umd@^3.0.0, umd@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" + integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== + +unassert@^1.3.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unassert/-/unassert-1.6.0.tgz#ceb6d39ce47c6d2bfa9cb3cab407352cbfb60a19" + integrity sha512-GoMtWTwGSxSFuRD0NKmbjlx3VJkgvSogzDzMPpJXYmBZv6MIWButsyMqEYhMx3NI4osXACcZA9mXiBteXyJtRw== + dependencies: + acorn "^7.0.0" + call-matcher "^2.0.0" + deep-equal "^1.0.0" + espurify "^2.0.1" + estraverse "^4.1.0" + esutils "^2.0.2" + object-assign "^4.1.0" + +unassertify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/unassertify/-/unassertify-2.1.1.tgz#23772d76c136fb3d5df7dad4911c737d952357d3" + integrity sha512-YIAaIlc6/KC9Oib8cVZLlpDDhK1UTEuaDyx9BwD97xqxDZC0cJOqwFcs/Y6K3m73B5VzHsRTBLXNO0dxS/GkTw== + dependencies: + acorn "^5.1.0" + convert-source-map "^1.1.1" + escodegen "^1.6.1" + multi-stage-sourcemap "^0.2.1" + through "^2.3.7" + unassert "^1.3.1" + unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -11540,6 +15831,16 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -11548,6 +15849,17 @@ unbzip2-stream@^1.3.3: buffer "^5.2.1" through "^2.3.8" +undeclared-identifiers@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" + integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== + dependencies: + acorn-node "^1.3.0" + dash-ast "^1.0.0" + get-assigned-identifiers "^1.2.0" + simple-concat "^1.0.0" + xtend "^4.0.1" + unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -11579,6 +15891,31 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +unicode-regex@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unicode-regex/-/unicode-regex-3.0.0.tgz#0c20df914c6da0412b3714cd300726e0f7f24698" + integrity sha512-WiDJdORsqgxkZrjC8WsIP573130HNn7KsB0IDnUccW2BG2b19QQNloNhVe6DKk3Aef0UcoIHhNVj7IkkcYWrNw== + dependencies: + regexp-util "^1.2.0" + +unicode-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-regex/-/unicode-regex-2.0.0.tgz#ef8f6642c37dddcaa0c09af5b9456aabf6b436a3" + integrity sha512-5nbEG2YU7loyTvPABaKb+8B0u8L7vWCsVmCSsiaO249ZdMKlvrXlxR2ex4TUVAdzv/Cne/TdoXSSaJArGXaleQ== + dependencies: + regexp-util "^1.2.0" + +unified@8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" + integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + unified@^6.1.2: version "6.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" @@ -11613,6 +15950,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -11682,6 +16024,11 @@ universalify@^0.1.2: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" @@ -11700,6 +16047,20 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -11721,7 +16082,7 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url@^0.11.0: +url@^0.11.0, url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -11775,11 +16136,35 @@ util@^0.11.0: dependencies: inherits "2.0.3" +util@~0.10.1: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +util@~0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + utility-types@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -11812,6 +16197,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -11861,11 +16251,20 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vm-browserify@^1.0.1: +vm-browserify@^1.0.0, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vnopts@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vnopts/-/vnopts-1.0.2.tgz#f6a331473de0179d1679112cc090572b695202f7" + integrity sha512-d2rr2EFhAGHnTlURu49G7GWmiJV80HbAnkYdD9IFAtfhmxC+kSWEaZ6ZF064DJFTv9lQZQV1vuLTntyQpoanGQ== + dependencies: + chalk "^2.4.1" + leven "^2.1.0" + tslib "^1.9.3" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -11907,6 +16306,19 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.12" +watchify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-4.0.0.tgz#53b002d51e7b0eb640b851bb4de517a689973392" + integrity sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA== + dependencies: + anymatch "^3.1.0" + browserify "^17.0.0" + chokidar "^3.4.0" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^4.0.2" + xtend "^4.0.2" + watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" @@ -12084,7 +16496,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: tr46 "^2.1.0" webidl-conversions "^6.1.0" -which-boxed-primitive@^1.0.2: +which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== @@ -12095,11 +16507,33 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -12119,6 +16553,11 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -12126,6 +16565,14 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -12144,6 +16591,20 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-comment@^1.0.0, wrap-comment@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wrap-comment/-/wrap-comment-1.0.1.tgz#941bb1400b9b590bc007599e79cacc0bb3ea62f3" + integrity sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ== + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -12159,16 +16620,33 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^7.2.3, ws@^7.3.1, ws@^7.4.6: version "7.5.7" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== +ws@~8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" + integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== + x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -12179,7 +16657,12 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xmlhttprequest-ssl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" + integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -12204,11 +16687,32 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.7.2: +yaml-unist-parser@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yaml-unist-parser/-/yaml-unist-parser-1.1.1.tgz#a2bc7b72578718e6e5b0ebc945dde8e1f258b561" + integrity sha512-cGtqhHBlcft+rTKiPsVcSyi43Eqm5a1buYokW9VkztroKMErBSdR9ANHx+/XxNppHZTu2KMEn4yY8MdhuGoFuA== + dependencies: + lines-and-columns "^1.1.6" + tslib "^1.10.0" + yaml "^1.7.1" + +yaml@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.3.tgz#2f420fca58b68ce3a332d0ca64be1d191dd3f87a" + integrity sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw== + dependencies: + "@babel/runtime" "^7.8.7" + +yaml@^1.10.0, yaml@^1.5.0, yaml@^1.7.1, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -12306,7 +16810,7 @@ zstddec@^0.0.2: resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.0.2.tgz#57e2f28dd1ff56b750e07d158a43f0611ad9eeb4" integrity sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA== -zustand@^3.5.13, zustand@^3.7.1: +zustand@^3.2.0, zustand@^3.5.10, zustand@^3.5.13, zustand@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==