diff --git a/package.json b/package.json index 849c114..f22791e 100644 --- a/package.json +++ b/package.json @@ -25,5 +25,5 @@ "typescript": "^5.2.2", "vite": "^5.0.5" }, - "buildNumber": "master-C77" + "buildNumber": "board_rework-C80" } \ No newline at end of file diff --git a/src/board/board-tile-popup.ts b/src/board/board-tile-popup.ts new file mode 100644 index 0000000..a4f8638 --- /dev/null +++ b/src/board/board-tile-popup.ts @@ -0,0 +1,62 @@ +import {COLOR_PRIMARY, COLOR_PRIMARY_2, FONT_STYLE_BODY, FONT_STYLE_BUTTON, FRAME_PADDING} from "@/style.ts"; +import {AzNopolyButton} from "@/ui/button.ts"; + +export default class BoardTilePopUp extends Phaser.GameObjects.Container { + + private graphics!: Phaser.GameObjects.Graphics; + private titleText!: Phaser.GameObjects.Text; + private priceText!: Phaser.GameObjects.Text; + + private submitButton!: AzNopolyButton; + private cancelButton!: AzNopolyButton; + + constructor(scene: Phaser.Scene, x: number, y: number, bounds = {width: 300, height: 200}, onCancel: () => void, onSubmit: () => void) { + super(scene, x - (bounds.width / 2), y - (bounds.height / 2)); + + this.width = bounds.width; + this.height = bounds.height; + + this.graphics = new Phaser.GameObjects.Graphics(scene); + + this.titleText = new Phaser.GameObjects.Text(scene, this.width*0.5, -FRAME_PADDING - 45, "PLACEHOLDER", FONT_STYLE_BUTTON); + this.titleText.setOrigin(0.5, 0); + + this.priceText = new Phaser.GameObjects.Text(scene, this.width*0.5, this.height - 150, "Price: ???", FONT_STYLE_BODY); + this.priceText.setOrigin(0.5, 0.5); + + this.cancelButton = new AzNopolyButton(scene, "Cancel", 0, this.height - 50, this.width, 50, onCancel); + this.submitButton = new AzNopolyButton(scene, "Accept", 0, this.height - 100, this.width, 50, onSubmit); + + this.add(this.graphics); + this.add(this.priceText) + this.add(this.titleText); + this.add(this.submitButton); + this.add(this.cancelButton); + } + + show(upgrade: boolean, price: number) { + this.setVisible(true); + this.redrawUi() + + if (!upgrade) { + this.titleText.setText("Buy Property"); + } else { + this.titleText.setText("Upgrade Property"); + } + + this.priceText.setText("Price: " + price); + } + + hide() { + this.setVisible(false); + } + + private redrawUi() { + this.graphics.clear(); + this.graphics.fillStyle(COLOR_PRIMARY_2); + this.graphics.fillRect(-FRAME_PADDING, -FRAME_PADDING - 50, this.width + FRAME_PADDING * 2, this.height + FRAME_PADDING * 2 + 50); + + this.graphics.fillStyle(COLOR_PRIMARY); + this.graphics.fillRect(-FRAME_PADDING + 5, -FRAME_PADDING - 50 + 5, this.width + FRAME_PADDING * 2 - 10, 45); + } +} \ No newline at end of file diff --git a/src/board/board-tile.ts b/src/board/board-tile.ts index d6ecf85..264bc66 100644 --- a/src/board/board-tile.ts +++ b/src/board/board-tile.ts @@ -38,10 +38,10 @@ export default class BoardTile extends Phaser.GameObjects.Container { this.image.setInteractive(); this.image.on(Phaser.Input.Events.POINTER_OVER, () => { - this.image.setTint(0xaaaaaa); + this.image.setAlpha(0.75) }); this.image.on(Phaser.Input.Events.POINTER_OUT, () => { - this.updateTint(); + this.image.setAlpha(1) }); this.updateTint(); diff --git a/src/board/board.ts b/src/board/board.ts index 59a743f..4da4b6e 100644 --- a/src/board/board.ts +++ b/src/board/board.ts @@ -1,18 +1,13 @@ -import GameObject = Phaser.GameObjects.Shape; -import { PacketType } from "../types/client"; -import AzNopolyGame from "../game"; import { getColorFromUUID } from "../util"; import BoardTile from "./board-tile.ts"; -import BoardGenerator from "./board-generator.ts"; import { TileOrientation, TileType } from "../types/board.ts"; interface BoardPlayer { - gameObject: GameObject, + gameObject: Phaser.GameObjects.Shape, position: number, } const PLAYER_SIZE = 16; -const BOARD_SIDE_LENGTH = 5; // Without corners export default class GameBoard extends Phaser.GameObjects.Container { public static preload(scene: Phaser.Scene) { @@ -20,45 +15,49 @@ export default class GameBoard extends Phaser.GameObjects.Container { } private players: Map; - private boardTiles: BoardTile[]; - private tiles: TileType[]; + private boardTiles!: BoardTile[]; + private boardLength: number; + private tiles!: TileType[]; - constructor(seed: string, scene: Phaser.Scene, x: number, y: number, size: number) { + constructor(scene: Phaser.Scene, x: number, y: number, size: number, boardLength: number) { super(scene, x, y); this.players = new Map(); this.width = size; this.height = size; + this.boardLength = boardLength; + } - this.tiles = BoardGenerator.generateFields(seed, BOARD_SIDE_LENGTH); - this.boardTiles = GameBoard.generateBoardTiles(scene, this.tiles, size / (BOARD_SIDE_LENGTH + 4)); + public init(tiles: TileType[]) { + this.tiles = tiles; + this.boardTiles = this.generateBoardTiles(this.scene, this.tiles, this.width / (this.boardLength + 4)); this.boardTiles.forEach(e => this.add(e)); } - private static generateBoardTiles(scene: Phaser.Scene, tiles: TileType[], tileWidth: number) { + private generateBoardTiles(scene: Phaser.Scene, tiles: TileType[], tileWidth: number) { const size = tileWidth; - const length = BOARD_SIDE_LENGTH + 2; + const length = this.boardLength + 2; const boardTiles: BoardTile[] = []; - tiles.length = BOARD_SIDE_LENGTH * 4 + 4; + tiles.length = this.boardLength * 4 + 4; let index; - for (let i = 0; i < BOARD_SIDE_LENGTH; i++) { - index = 1 + (1 + BOARD_SIDE_LENGTH) * 0 + i; + for (let i = 0; i < this.boardLength; i++) { + index = this.boardLength - i; boardTiles[index] = new BoardTile(scene, size * (i + 2) , size * length, size , size * 2 , tiles[index], TileOrientation.UP); - index = 1 + (1 + BOARD_SIDE_LENGTH) * 1 + i; + index = 1 + (this.boardLength * 2) - i; boardTiles[index] = new BoardTile(scene, 0 , size * (i + 2) , size * 2 , size , tiles[index], TileOrientation.RIGHT); - index = 1 + (1 + BOARD_SIDE_LENGTH) * 2 + i; + index = 1 + (1 + this.boardLength) * 2 + i; boardTiles[index] = new BoardTile(scene, size * (i + 2) , 0 , size , size * 2 , tiles[index], TileOrientation.DOWN); - index = 1 + (1 + BOARD_SIDE_LENGTH) * 3 + i; + index = 1 + (1 + this.boardLength) * 3 + i; boardTiles[index] = new BoardTile(scene, size * length , size * (i + 2) , size * 2 , size , tiles[index], TileOrientation.LEFT); } - index = (BOARD_SIDE_LENGTH + 1) * 0; + index = (this.boardLength + 1) * 0; boardTiles[index] = new BoardTile(scene, size * length, size * length, size * 2, size * 2, tiles[index], TileOrientation.CORNER); - index = (BOARD_SIDE_LENGTH + 1) * 1; + index = (this.boardLength + 1) * 1; boardTiles[index] = new BoardTile(scene, 0, size * length, size * 2, size * 2, tiles[index], TileOrientation.CORNER); - index = (BOARD_SIDE_LENGTH + 1) * 2; + index = (this.boardLength + 1) * 2; boardTiles[index] = new BoardTile(scene, 0, 0, size * 2, size * 2, tiles[index], TileOrientation.CORNER); - index = (BOARD_SIDE_LENGTH + 1) * 3; + index = (this.boardLength + 1) * 3; boardTiles[index] = new BoardTile(scene, size * length, 0, size * 2, size * 2, tiles[index], TileOrientation.CORNER); return boardTiles; } @@ -101,6 +100,35 @@ export default class GameBoard extends Phaser.GameObjects.Container { return this.boardTiles[player.position % this.boardTiles.length]; } + teleportPlayerToPosition(uuid: string, pos: number) { + const player = this.players.get(uuid); + if (!player) { + throw new Error(`Player with UUID ${uuid} does not exist!`); + } + + player.position = pos; + const coords = this.boardTiles[player.position % this.boardTiles.length].getPlayerCenter(); + + player.gameObject.setPosition(coords.x, coords.y) + this.checkPlayerCollisions(); + + return this.boardTiles[player.position % this.boardTiles.length]; + } + + getTile(pos: number) { + return this.boardTiles[pos % this.boardTiles.length]; + } + + getTilesOfType(type: TileType) { + let tiles: number[] = []; + this.boardTiles.forEach((tile, i) => { + if (tile.getTileType() === type) { + tiles.push(i); + } + }); + return tiles; + } + private checkPlayerCollisions() { const positions: { [key: number]: string[] } = {}; this.players.forEach((player, uuid) => { diff --git a/src/main.ts b/src/main.ts index 118c636..427c3a1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,6 +11,7 @@ import { COLOR_BACKGROUND } from './style'; export const WIDTH = 1280; export const HEIGHT = 720; +export const BOARD_SIDE_LENGTH = 5; window.onload = async () => { let game = new Phaser.Game({ diff --git a/src/scene/base/base-scene-controller.ts b/src/scene/base/base-scene-controller.ts index 14ae565..aa6c2c7 100644 --- a/src/scene/base/base-scene-controller.ts +++ b/src/scene/base/base-scene-controller.ts @@ -18,6 +18,7 @@ export default abstract class NetworkSceneController { /** * A proxy object that allows for calling methods on the controller. * Functions called on the proxy will be sent to all clients and executed asynchonously + * Only primitive data types that survive JSON.stringify can be sent as arguments * Functions must be registered with registerSyncedMethod */ public syncProxy = new Proxy(this, { diff --git a/src/scene/base/base-scene.ts b/src/scene/base/base-scene.ts index 71618a4..bfb7eca 100644 --- a/src/scene/base/base-scene.ts +++ b/src/scene/base/base-scene.ts @@ -1,5 +1,4 @@ import AzNopolyGame from "../../game"; -import NetworkSceneController from "../base/base-scene-controller"; export abstract class BaseScene extends Phaser.Scene { diff --git a/src/scene/base/minigame-scene-controller.ts b/src/scene/base/minigame-scene-controller.ts index 0083d3e..e4a74c0 100644 --- a/src/scene/base/minigame-scene-controller.ts +++ b/src/scene/base/minigame-scene-controller.ts @@ -1,8 +1,12 @@ import AzNopolyGame from "../../game"; -import { SceneSwitcher } from "../../scene-switcher"; import MinigameScene from "./minigame-scene"; import SyncedSceneController from "./synced-scene-controller"; +export interface ResultData { + playerWon: string[]; + sorted: boolean; +} + const RESULT_DISPLAY_TIME = 2000; export default abstract class MinigameSceneController extends SyncedSceneController { @@ -35,19 +39,19 @@ export default abstract class MinigameSceneController extends SyncedSceneControl this.scene.showStartOverlay(); } - protected endGame(playerWon: string[], sorted: boolean) { - this.scene.showResultOverlay(playerWon); - setTimeout(() => this.onGameOver(), RESULT_DISPLAY_TIME); + protected endGame(result: ResultData) { + this.scene.showResultOverlay(result); + setTimeout(() => this.onGameOver(result), RESULT_DISPLAY_TIME); } abstract onMiniGameStart() : void; - private onGameOver() { + private onGameOver(result: ResultData) { if (!this.aznopoly.isHost) { return; } this.scene.scene.stop(); - this.scene.scene.wake(this.previousScene); + this.scene.scene.wake(this.previousScene, result); } } \ No newline at end of file diff --git a/src/scene/base/minigame-scene.ts b/src/scene/base/minigame-scene.ts index d8f19a5..c1bbb26 100644 --- a/src/scene/base/minigame-scene.ts +++ b/src/scene/base/minigame-scene.ts @@ -2,7 +2,7 @@ import AzNopolyBar from "@/ui/bar"; import { HEIGHT, WIDTH } from "../../main"; import { FONT_STYLE_HEADLINE, FRAME_PADDING } from "../../style"; import { BaseScene } from "./base-scene"; -import MinigameSceneController from "./minigame-scene-controller"; +import MinigameSceneController, { ResultData } from "./minigame-scene-controller"; import AzNopolyPanel from "@/ui/panel"; const START_TIME = 500; @@ -85,7 +85,7 @@ export default abstract class MinigameScene e this.overlay.setVisible(false); } - public showResultOverlay(playerWon: string[]) { + public showResultOverlay({playerWon}: ResultData) { const won = playerWon.includes(this.aznopoly.uuid); this.overlay.setVisible(false); this.overlay.alpha = 1; diff --git a/src/scene/base/synced-scene-controller.ts b/src/scene/base/synced-scene-controller.ts index df712bd..75f17d1 100644 --- a/src/scene/base/synced-scene-controller.ts +++ b/src/scene/base/synced-scene-controller.ts @@ -27,7 +27,7 @@ export default abstract class SyncedSceneController extends NetworkSceneControll SceneSwitcher.broadcastSceneReady(this.aznopoly, this.scene.scene.key + "_CREATE") } - onSceneWake(): void { + onSceneWake(sys: Phaser.Scenes.Systems, data: any): void { if (this.aznopoly.isHost) { SceneSwitcher.waitForPlayers(this.aznopoly, this.scene.scene.key + "_WAKE", "wake", this.onAllPlayersRejoined.bind(this)); } diff --git a/src/scene/board-scene-controller.ts b/src/scene/board-scene-controller.ts index cd1ddfe..4d70d70 100644 --- a/src/scene/board-scene-controller.ts +++ b/src/scene/board-scene-controller.ts @@ -1,122 +1,342 @@ -import { Avatars } from "@/ui/avatar"; import AzNopolyGame from "../game"; -import { SceneSwitcher } from "../scene-switcher"; import SyncedSceneController from "./base/synced-scene-controller"; import BoardScene from "./board-scene"; +import { ResultData } from "./base/minigame-scene-controller"; +import Turn from "./board/turn-controller"; +import { TileType } from "@/types/board"; +import BoardGenerator from "@/board/board-generator"; +import { BOARD_SIDE_LENGTH } from "@/main"; +import PropertyManager from "@/scene/board/property-manager.ts"; interface Player { uuid: string; - name: string; money: number; + tiles: number[]; position: number; } export default class BoardSceneController extends SyncedSceneController { - + declare protected scene: BoardScene; - private currentPlayerUuid: string = ""; + /** + * List of players in turn order + */ private players!: Player[]; + private minigameInprogress: boolean = false; + private currentTurn?: Turn; + private propertyHelper: PropertyManager = new PropertyManager(this); constructor(scene: BoardScene, aznopoly: AzNopolyGame) { super(scene, aznopoly, "start"); - this.registerSyncedMethod(this.addPlayersToBoard, true); + this.registerSyncedMethod(this.initBoard, true); this.registerSyncedMethod(this.updatePlayerPosition, true); this.registerSyncedMethod(this.startTurn, true); this.registerSyncedMethod(this.startMinigame, true); + this.registerSyncedMethod(this.startBuyProperty, true); + this.registerSyncedMethod(this.interruptBuyProperty, true); + this.registerSyncedMethod(this.removeMoney, true); + this.registerSyncedMethod(this.addMoney, true); + this.registerSyncedMethod(this.addTiles, true); - this.registerSyncedMethod(this.doDiceRoll, false); + this.registerSyncedMethod(this.rollDice, false); + this.registerSyncedMethod(this.buyProperty, false) + this.registerSyncedMethod(this.cancelBuyProperty, false); } onAllPlayersReady(): void { if (this.aznopoly.isHost) { const players = this.aznopoly.connectedUuids.map(uuid => ({ uuid, - name: this.aznopoly.room.getPlayerName(uuid), money: 1500, + tiles: [], position: 0, })); - this.syncProxy.addPlayersToBoard(players); - this.syncProxy.startTurn(players[0].uuid); + + const tiles = BoardGenerator.generateFields(this.aznopoly.room.host, BOARD_SIDE_LENGTH); + this.syncProxy.initBoard(tiles, players); + this.doTurn(players[0].uuid); } } - private addPlayersToBoard(players: Player[]) { - this.players = players; - this.scene.addPlayers(players.map((p, i) => ({ - uuid: p.uuid, - name: p.name, - money: p.money, - colorIndex: i, - host: p.uuid == this.aznopoly.uuid, - avatar: Avatars.AXOLOTL - }))); + onSceneWake(_: any, minigameResult: ResultData): void { + super.onSceneWake(_, minigameResult); + if (!(this.aznopoly.isHost && this.minigameInprogress)) { + return; + } + + this.minigameInprogress = false; + this.onMinigameResult(minigameResult); + this.doTurn(this.players[0].uuid); } - private startTurn(uuid: string) { - this.currentPlayerUuid = uuid; + private onMinigameResult(result: ResultData) { + this.aznopoly.connectedUuids.forEach(uuid => { + if (!result.playerWon.includes(uuid)) { + this.syncProxy.removeMoney(uuid, 100); + console.log("Player lost", uuid); + } else { + console.log("Player won", uuid); + } + }); + } - if(uuid == this.aznopoly.uuid) { - this.scene.enableRollButton(); + private removeMoney(uuid: string, amount: number) { + const player = this.getPlayer(uuid); + if (!player) { + console.error("Player not found"); + return; + } + player.money -= amount; + + this.scene.updatePlayerInfo(uuid, player); + } + + private addMoney(uuid: string, amount: number) { + const player = this.getPlayer(uuid); + if (!player) { + console.error("Player not found"); + return; } + player.money += amount; + + this.scene.updatePlayerInfo(uuid, player); + } + + private addTiles(uuid: string, tiles: number[]) { + const player = this.getPlayer(uuid); + if (!player) { + console.error("Player not found"); + return; + } + + tiles.forEach(value => { + player.tiles.push(value); + }) + + this.scene.updatePlayerInfo(uuid, player); + } + + public onPropertyBought(uuid: string, fields: number[], price: number) { + if (!this.aznopoly.isHost) return; + + this.syncProxy.removeMoney(uuid, price); + this.syncProxy.addTiles(uuid, fields); + } + + public onPayedRent(uuid: string, owner: string, rent: number) { + if (!this.aznopoly.isHost) return; + + this.syncProxy.removeMoney(uuid, rent); + this.syncProxy.addMoney(owner, (rent * 0.5)); + } + + public onBuyInterrupt(uuid: string) { + if (!this.aznopoly.isHost) return; + + if(!this.currentTurn?.isOnTurn(uuid)) { + return; + } + + this.syncProxy.interruptBuyProperty(uuid); + } + + public buyProperty(uuid: string) { + if (!this.aznopoly.isHost) return; + + if(!this.currentTurn?.isOnTurn(uuid)) { + return; + } + + const player = this.players.find(p => p.uuid == uuid); + if (!player) { + return; + } + + this.currentTurn?.doBuyProperty(); + } + + public cancelBuyProperty(uuid: string) { + if (!this.aznopoly.isHost) return; + + if(!this.currentTurn?.isOnTurn(uuid)) { + return; + } + + const player = this.players.find(p => p.uuid == uuid); + if (!player) { + return; + } + + this.currentTurn?.cancelBuyProperty(); } public onRollClick() { this.scene.disableRollButton(); - this.syncProxy.doDiceRoll(); + this.syncProxy.rollDice(); } - private doDiceRoll() { - if (!this.aznopoly.isHost) { + public onTurnEnd(uuid: string) { + const currentIndex = this.players.findIndex(p => p.uuid == uuid); + if (currentIndex == this.players.length - 1) { + this.minigameInprogress = true; + this.syncProxy.startMinigame("minigame-roomba"); + } else { + const nextPlayer = this.getNextPlayerIndex(uuid); + this.doTurn(this.players[nextPlayer].uuid); + } + } + + public onClickSubmitProperty() { + this.scene.hideBuyTilePopUp(); + this.syncProxy.buyProperty(this.aznopoly.uuid); + } + + public onClickCancelProperty() { + this.scene.hideBuyTilePopUp(); + this.syncProxy.cancelBuyProperty(this.aznopoly.uuid); + } + + public onCanBuyProperty(uuid: string) { + const player = this.players.find(p => p.uuid == uuid); + if (!player) { + console.error("Player not found"); return; } - const sender = arguments[arguments.length - 1]; // Black Magic to get the player uuid that started the roll - if (this.currentPlayerUuid != sender) { - console.warn("Received roll from non-current player"); + this.syncProxy.startBuyProperty(uuid, this.propertyHelper.getPropertyLevel(player.position)); + } + + public onHasToPayRent(uuid: string) { + const player = this.players.find(p => p.uuid == uuid); + if (!player) { + console.error("Player not found"); return; } - const roll = Math.floor(Math.random() * 6) + 1; - const player = this.players.find(p => p.uuid == sender); + // TODO: Show that rent was payed + this.propertyHelper.payPropertyRent(uuid, player.position) + // TODO: Check if player is bankrupt + this.onTurnEnd(uuid); + } + + private doTurn(uuid: string) { + this.currentTurn = new Turn(this, this.propertyHelper, uuid); + this.syncProxy.startTurn(uuid); + } + + private interruptBuyProperty(uuid: string) { + if(uuid != this.aznopoly.uuid) { + return; + } + this.scene.hideBuyTilePopUp(); + } + + private getNextPlayerIndex(currentUuid: string) { + const currentIndex = this.players.findIndex(p => p.uuid == currentUuid); + return (currentIndex + 1) % this.players.length; + } + + public getPlayerPosition(uuid: string) { + const player = this.players.find(p => p.uuid == uuid); if (!player) { console.error("Player not found"); return; } + return player.position; + } - player.position += roll; - this.syncProxy.updatePlayerPosition(sender, player.position); - this.startNextTurn(); + /* Host Functions */ + public executeRoll(uuid: string) { + const roll = Math.floor(Math.random() * 6) + 1; + const player = this.players.find(p => p.uuid == uuid); + if (!player) { + console.error("Player not found"); + return; + } + player.position = (player.position + roll) % ((BOARD_SIDE_LENGTH * 4) + 4); + this.syncProxy.updatePlayerPosition(uuid, player.position); } - private startNextTurn() { - const currentIndex = this.players.findIndex(p => p.uuid == this.currentPlayerUuid); - const nextIndex = (currentIndex + 1) % this.players.length; - const nextPlayer = this.players[nextIndex]; + /* Network Functions */ + private initBoard(tiles: TileType[], players: Player[]) { + this.players = players; + this.scene.initBoard(tiles, players.map((p, i) => ({ + uuid: p.uuid, + money: p.money + }))) + } - this.syncProxy.startTurn(nextPlayer.uuid); + private rollDice() { + if (!this.aznopoly.isHost) { + return; + } - if (nextIndex == 0) { - this.syncProxy.startMinigame(); + const sender = arguments[arguments.length - 1]; // Black Magic to get the player uuid that started the roll + if (!this.currentTurn) { + console.error("Received roll request but no turn in progress"); + return; } + this.currentTurn.doRoll(sender); } - private startMinigame() { - this.scene.showMinigameSelect("Roomba Outrage").then(() => { + private updatePlayerPosition(uuid: string, position: number) { + this.scene.updatePlayerPosition(uuid, position); + } + + private startMinigame(minigame: string) { + this.scene.showMinigameSelect("The Minigame").then(() => { setTimeout(() => { this.scene.hideMinigameSelect(); - if (this.aznopoly.isHost) { this.scene.scene.sleep(); - this.scene.scene.launch("minigame-roomba"); + this.scene.scene.launch(minigame); } }, 500) }); } - private updatePlayerPosition(uuid: string, position: number) { - this.scene.updatePlayerPosition(uuid, position); + private startTurn(uuid: string) { + if(uuid == this.aznopoly.uuid) { + this.scene.enableRollButton(); + } } + private startBuyProperty(uuid: string, level: number) { + if(uuid != this.aznopoly.uuid) { + return; + } + + this.scene.showBuyTilePopUp((level > 0), this.propertyHelper.calculatePropertyPrice(level)); + } + + /** Utility Functions **/ + public getPlayers() { + return this.players; + } + + public getPlayer(uuid: string) { + const player = this.players.find(p => p.uuid == uuid); + if (!player) { + return null; + } + return player; + } + + public getTile(pos: number) { + return this.scene.getTile(pos); + } + + public isFieldOwnedByPlayer(pos: number, uuid: string) { + return this.players.find(p => p.uuid == uuid)?.tiles.includes(pos); + } + + public isFieldOwned(pos: number) { + return this.players.some(p => p.tiles.includes(pos)); + } + + public getTiles(type: TileType){ + return this.scene.getTilesOfType(type); + } } \ No newline at end of file diff --git a/src/scene/board-scene.ts b/src/scene/board-scene.ts index 3f2a7ea..75c5a06 100644 --- a/src/scene/board-scene.ts +++ b/src/scene/board-scene.ts @@ -1,6 +1,6 @@ import AzNopolyPanel from "@/ui/panel"; import GameBoard from "../board/board"; -import { HEIGHT, WIDTH } from "../main"; +import { BOARD_SIDE_LENGTH, HEIGHT, WIDTH } from "../main"; import { FRAME_PADDING } from "../style"; import { AzNopolyButton } from "../ui/button"; import PlayerList from "../ui/player-list"; @@ -11,11 +11,14 @@ import AzNopolyBar from "@/ui/bar"; import AzNopolyPlayerInfo, { PlayerInfo } from "@/ui/player-info"; import { Avatars } from "@/ui/avatar"; import AzNopolyList from "@/ui/element-list"; +import BoardTilePopUp from "@/board/board-tile-popup.ts"; +import { TileType } from "@/types/board"; export default class BoardScene extends BaseScene { private board!: GameBoard; + private tilePopUp!: BoardTilePopUp; private rollButton!: AzNopolyButton; private choiceWheel!: RandomSelectionWheel; private playerList!: AzNopolyList; @@ -31,38 +34,49 @@ export default class BoardScene extends BaseScene { } create() { - this.rollButton = this.add.existing(new AzNopolyButton(this, "Roll Dice", 50, 200, 150, 55, this.controller.onRollClick.bind(this.controller))); - this.rollButton.disable(); - const RIGHT_PANEL_WIDTH = 350; this.add.existing(new AzNopolyBar(this, "AzNopoly")); const rightPanel = this.add.existing(new AzNopolyPanel(this, WIDTH - RIGHT_PANEL_WIDTH - FRAME_PADDING, AzNopolyBar.HEIGHT + FRAME_PADDING * 2, RIGHT_PANEL_WIDTH, HEIGHT - AzNopolyBar.HEIGHT - FRAME_PADDING * 3).setDepth(-1)); const leftPanel = this.add.existing(new AzNopolyPanel(this, FRAME_PADDING, AzNopolyBar.HEIGHT + FRAME_PADDING * 2, WIDTH - FRAME_PADDING * 3 - RIGHT_PANEL_WIDTH, HEIGHT - AzNopolyBar.HEIGHT - FRAME_PADDING * 3).setDepth(-1)); const boardSize = leftPanel.height * 0.8; - this.board = this.add.existing(new GameBoard(this.aznopoly.room.host, this, leftPanel.x + leftPanel.width * 0.5 - boardSize * 0.5, leftPanel.y + leftPanel.height * 0.5 - boardSize * 0.5, boardSize)); + this.board = this.add.existing(new GameBoard(this, leftPanel.x + leftPanel.width * 0.5 - boardSize * 0.5, leftPanel.y + leftPanel.height * 0.5 - boardSize * 0.5, boardSize, BOARD_SIDE_LENGTH)); this.playerList = this.add.existing(new AzNopolyList(this, rightPanel.x + FRAME_PADDING, rightPanel.y + FRAME_PADDING)); - + this.rollButton = this.add.existing(new AzNopolyButton(this, "Roll Dice", WIDTH - 325, HEIGHT - 100, 250, 55, this.controller.onRollClick.bind(this.controller))); this.rollButton.disable(); this.choiceWheel = this.add.existing(new RandomSelectionWheel(this, WIDTH /2, HEIGHT / 2, {width: 300, height: 40})); this.choiceWheel.setVisible(false); - + + this.tilePopUp = this.add.existing(new BoardTilePopUp(this, WIDTH / 2, HEIGHT / 2, {width: 300, height: 200}, this.controller.onClickCancelProperty.bind(this.controller), this.controller.onClickSubmitProperty.bind(this.controller))); + this.tilePopUp.setVisible(false); } - public addPlayers(infos: (PlayerInfo & {uuid: string})[]) { - infos.forEach(info => { + public initBoard(tiles: TileType[], players: (PlayerInfo & {uuid: string})[]) { + this.board.init(tiles); + players.forEach(info => { this.board.addPlayer(info.uuid); const profile = this.aznopoly.getProfile(info.uuid); this.playerList.addElement(info.uuid, new AzNopolyPlayerInfo(this, 0, 0, info, profile)); }); - } - public updatePlayerPosition(uuid: string, position: number) { - this.board.movePlayerToPosition(uuid, position); + public updatePlayerInfo(uuid: string, info: PlayerInfo) { + const playerInfoElement = this.playerList.getElement(uuid); + if (!playerInfoElement) { + console.error("No player info element found for", uuid); + return; + } + playerInfoElement.updateInfo(info); + } + + public updatePlayerPosition(uuid: string, position: number, teleport: boolean = false) { + if(teleport) { + return this.board.teleportPlayerToPosition(uuid, position); + } + return this.board.movePlayerToPosition(uuid, position); } public enableRollButton() { @@ -73,13 +87,29 @@ export default class BoardScene extends BaseScene { this.rollButton.disable(); } + public showBuyTilePopUp(upgrade: boolean, level: number) { + this.tilePopUp.show(upgrade, level); + } + + public hideBuyTilePopUp() { + this.tilePopUp.hide(); + } + public showMinigameSelect(name: string) : Promise { this.choiceWheel.setVisible(true); - return this.choiceWheel.startSpin(["Giga Chad says", "Poop up", "GRAND SURPRISE"], name); + return this.choiceWheel.startSpin(["???", "???", "???"], name); } public hideMinigameSelect() { this.choiceWheel.setVisible(false); } + public getTile(position: number) { + return this.board.getTile(position); + } + + public getTilesOfType(type: TileType) { + return this.board.getTilesOfType(type); + } + } \ No newline at end of file diff --git a/src/scene/board/property-manager.ts b/src/scene/board/property-manager.ts new file mode 100644 index 0000000..91a9712 --- /dev/null +++ b/src/scene/board/property-manager.ts @@ -0,0 +1,122 @@ +import BoardSceneController from "@/scene/board-scene-controller.ts"; +import BoardScene from "@/scene/board-scene.ts"; +import AzNopolyGame from "@/game.ts"; + +const MAX_PROPERTY_LEVEL = 3; + +const DEFAULT_PROPERTY_PRICE = 100; +const PROPERTY_PRICE_MULTIPLIER = 1.5; + +const DEFAULT_PROPERTY_RENT = 50; +const PROPERTY_RENT_MULTIPLIER = 1.5; + +/** + * HOST only class + * PropertyController is responsible for managing property related actions + */ +export default class PropertyManager { + + private controller: BoardSceneController; + + constructor(controller: BoardSceneController) { + this.controller = controller; + } + + public getPropertyLevel(field: number) { + if (!this.controller.isFieldOwned(field)) { + return 0; + } + + let owner = this.controller.getPlayers().find(player => player.tiles.includes(field)); + if (!owner) { + return 0; + } + + return owner.tiles.filter(t => t == field).length; + } + + private getPropertyOwner(field: number) { + return this.controller.getPlayers().find(player => player.tiles.includes(field)); + } + + public calculatePropertyPrice(level: number) { + return DEFAULT_PROPERTY_PRICE * ((PROPERTY_PRICE_MULTIPLIER * level) + 1); + } + + private calculatePropertyRent(level: number) { + return DEFAULT_PROPERTY_RENT * ((PROPERTY_RENT_MULTIPLIER * level) + 1); + } + + public canBuyProperty(uuid: string, field: number) { + let player = this.controller.getPlayer(uuid); + if (!player) { + return false; + } + + let owner = this.getPropertyOwner(field); + if (owner && owner.uuid != uuid) { + return false; + } + + let level = this.getPropertyLevel(field); + if (level >= MAX_PROPERTY_LEVEL) { + return false; + } + + return player.money >= this.calculatePropertyPrice(level); + } + + public hasToPayRent(uuid: string, field: number) { + let player = this.controller.getPlayer(uuid); + if (!player) { + return false; + } + + let owner = this.getPropertyOwner(field); + if (!owner) { + return false; + } + + return owner.uuid != uuid; + } + + public buyProperty(uuid: string, field: number) { + let player = this.controller.getPlayer(uuid); + if (!player) { + return false; + } + + let owner = this.getPropertyOwner(field); + if (owner && owner.uuid != uuid) { + return false; + } + + let level = this.getPropertyLevel(field); + let tile = this.controller.getTile(field); + + this.controller.onPropertyBought(uuid, this.controller.getTiles(tile.getTileType()), this.calculatePropertyPrice(level)); + + return true; + } + + public payPropertyRent(uuid: string, field: number) { + let player = this.controller.getPlayer(uuid); + if (!player) { + return false; + } + + let owner = this.getPropertyOwner(field); + if (owner && owner.uuid == uuid) { + return false; + } + + let level = this.getPropertyLevel(field); + if (level == 0) { + return false; + } + + this.controller.onPayedRent(uuid, owner!.uuid, this.calculatePropertyRent(level)); + + return true; + } +} \ No newline at end of file diff --git a/src/scene/board/turn-controller.ts b/src/scene/board/turn-controller.ts new file mode 100644 index 0000000..6e65a08 --- /dev/null +++ b/src/scene/board/turn-controller.ts @@ -0,0 +1,107 @@ +import BoardSceneController from "../board-scene-controller"; +import {TileType} from "@/types/board.ts"; +import PropertyManager from "@/scene/board/property-manager.ts"; + + +enum TurnState { + PRE_ROLL, + PROPERTY, + ITEM, + OVER +} + +/** + * HOST only class + * Controls the current turn and manage state + * Should not be used to interact with the ui + */ +export default class Turn { + + private state: TurnState = TurnState.PRE_ROLL; + private controller: BoardSceneController; + private propertyManager: PropertyManager; + + /** + * The player that is currently taking their turn + */ + private readonly player: string; + + // Scheduler for handling time based events + private scheduler!: NodeJS.Timeout; + + constructor(controller: BoardSceneController, propertyManager: PropertyManager, player: string) { + this.controller = controller; + this.propertyManager = propertyManager; + this.player = player; + } + + public isOnTurn(player: string) { + return this.player == player; + } + + public doRoll(sender: string) : boolean { + if (this.state != TurnState.PRE_ROLL) return false; + if (sender != this.player) return false; + + this.controller.executeRoll(this.player); + const field = this.controller.getPlayerPosition(this.player); + if( !field ) return false; + + let tile = this.controller.getTile(field); + if(!TileType.isProperty(tile.getTileType())) { + this.controller.onTurnEnd(this.player); + return true; + } + + this.state = TurnState.PROPERTY; + if(this.propertyManager.hasToPayRent(this.player, field)) { + this.controller.onHasToPayRent(this.player); + } else if(this.propertyManager.canBuyProperty(this.player, field)) { + this.scheduler = setTimeout(() => { + this.controller.onBuyInterrupt(this.player); + this.cancelBuyProperty(); + }, 3000); + this.controller.onCanBuyProperty(this.player); + } else { + this.controller.onTurnEnd(this.player); + } + + return true; + } + + public doBuyProperty(): boolean { + if (this.state != TurnState.PROPERTY) return false; + + clearTimeout(this.scheduler); + + const field = this.controller.getPlayerPosition(this.player); + if( !field ) return false; + + let tile = this.controller.getTile(field); + if(!TileType.isProperty(tile.getTileType())) { + this.controller.onTurnEnd(this.player); + return true; + } + + this.propertyManager.buyProperty(this.player, field!); + this.controller.onTurnEnd(this.player); + + return true; + } + + public cancelBuyProperty(): boolean { + if (this.state != TurnState.PROPERTY) return false; + + clearTimeout(this.scheduler); + + this.state = TurnState.OVER; + this.controller.onTurnEnd(this.player); + + return false; + } + + public doUseItem() : boolean{ + return false; + } + +} \ No newline at end of file diff --git a/src/scene/lobby-scene.ts b/src/scene/lobby-scene.ts index 6d04e60..fd18c88 100644 --- a/src/scene/lobby-scene.ts +++ b/src/scene/lobby-scene.ts @@ -31,10 +31,10 @@ export default class LobbyScene extends BaseScene { private initButton() { if (!this.aznopoly.isHost) return; - + const startButton = new AzNopolyButton(this, "Start Game", WIDTH/2 + 300, HEIGHT - 120, 250, 55, this.controller.onStartClick.bind(this.controller)); this.add.existing(startButton); - + const leaveButton = new AzNopolyButton(this, "Leave", WIDTH/2 - (300 + 250), HEIGHT - 120, 250, 55, this.controller.onLeaveLobbyClick.bind(this.controller)) this.add.existing(leaveButton); } diff --git a/src/scene/minigame/roomba-scene-controller.ts b/src/scene/minigame/roomba-scene-controller.ts index 704a37f..f1c0916 100644 --- a/src/scene/minigame/roomba-scene-controller.ts +++ b/src/scene/minigame/roomba-scene-controller.ts @@ -8,7 +8,7 @@ import { RoombaScene } from "./roomba-scene"; import convert from 'color-convert'; -const MAX_GAME_TIME = 30000; +const MAX_GAME_TIME = 1000; export default class RoombaSceneController extends MinigameSceneController { declare protected scene: RoombaScene; @@ -43,7 +43,7 @@ export default class RoombaSceneController extends MinigameSceneController { this.syncProxy.lockAllGameplay(); const won = this.getPlayersWon(); - this.syncProxy.endGame(won, false); + this.syncProxy.endGame({playerWon: won, sorted: false}); }, MAX_GAME_TIME) } diff --git a/src/style.ts b/src/style.ts index e7f1efa..47bdc5a 100644 --- a/src/style.ts +++ b/src/style.ts @@ -7,7 +7,7 @@ export const COLOR_TEXT_INVERTED = 0x4690A9; export const COLOR_BACKGROUND_LIGHT = 0xe6f9ff; export const FRAME_PADDING = 15; -export const FRAME_BORDER_RADIUS = 0; +export const FRAME_BORDER_RADIUS = 5; export const FRAME_BORDER_WIDTH = 5; export const COLOR_PRIMARY_2 = 0x73c8e4; diff --git a/src/types/board.ts b/src/types/board.ts index 661a734..7203bee 100644 --- a/src/types/board.ts +++ b/src/types/board.ts @@ -17,6 +17,10 @@ export namespace TileType { export function isCorner(type: TileType) { return type === TileType.START || type === TileType.FREE || type === TileType.JAIL || type === TileType.TO_JAIL; } + + export function isProperty(type: TileType) { + return !(type == TileType.ACTION || isCorner(type)); + } } export enum TileOrientation { diff --git a/yarn.lock b/yarn.lock index c26221b..d17a02b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,7 +23,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": version "7.23.6" resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz" integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== @@ -386,115 +386,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/android-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.7.tgz#646156aea43e8e6723de6e94a4ac07c5aed41be1" - integrity sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w== - -"@esbuild/android-arm@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.7.tgz#0827b49aed813c33ea18ee257c1728cdc4a01030" - integrity sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww== - -"@esbuild/android-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.7.tgz#fa294ed5214d88219d519e0ab1bbb0253a89b864" - integrity sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw== - -"@esbuild/darwin-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.7.tgz" - integrity sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw== - -"@esbuild/darwin-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.7.tgz#02d1f8a572874c90d8f55dde8a859e5145bd06f6" - integrity sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ== - -"@esbuild/freebsd-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.7.tgz#bc6a69b9a7915da278f0a5ebaec069c813982c22" - integrity sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ== - -"@esbuild/freebsd-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.7.tgz#ec3708488625d70e565968ceea1355e7c8613865" - integrity sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA== - -"@esbuild/linux-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.7.tgz#8e04b66c306858f92d4f90f8222775270755e88a" - integrity sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g== - -"@esbuild/linux-arm@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.7.tgz#12d5b65e089029ee1fe4c591b60969c9b1a85355" - integrity sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww== - -"@esbuild/linux-ia32@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.7.tgz#01eabc2a3ad9039e115db650268e4f48f910dbe2" - integrity sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g== - -"@esbuild/linux-loong64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.7.tgz#70681113632970e6a5766607bbdb98aa18cf4d5f" - integrity sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw== - -"@esbuild/linux-mips64el@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.7.tgz#f63c022a71a3d70c482d1943a27cb8997021e230" - integrity sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w== - -"@esbuild/linux-ppc64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.7.tgz#614eafd08b0c50212f287b948b3c08d6e60f221f" - integrity sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ== - -"@esbuild/linux-riscv64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.7.tgz#31d3b63f92f65968268a8e61ba59872538e80e88" - integrity sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw== - -"@esbuild/linux-s390x@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.7.tgz#be94974e0caa0783ae05f9477fd7170b9ac29cb0" - integrity sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg== - -"@esbuild/linux-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.7.tgz#84e8018a913dd4ecee954623e395984aef3d0007" - integrity sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ== - -"@esbuild/netbsd-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.7.tgz#98898ba8800374c9df9bb182ca4f69fcecaf4411" - integrity sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ== - -"@esbuild/openbsd-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.7.tgz#46dc4eda2adb51f16361b1ad10e9b3f4938c4573" - integrity sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ== - -"@esbuild/sunos-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.7.tgz#1650d40dd88412ecc11490119cd23cbaf661a591" - integrity sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw== - -"@esbuild/win32-arm64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.7.tgz#e61de6c4eb204d83fd912f3ae6812cc8c7d32d25" - integrity sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw== - -"@esbuild/win32-ia32@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.7.tgz#3d9c159d42c67e37a433e44ef8217c661cb6f6d0" - integrity sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A== - -"@esbuild/win32-x64@0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.7.tgz#02c4446f802706098d8e6ee70cf2b7aba96ded0b" - integrity sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ== +"@esbuild/linux-x64@0.19.10": + version "0.19.10" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz" + integrity sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -692,7 +587,7 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.6.3": +"@jest/types@^29.0.0", "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== @@ -728,6 +623,14 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" @@ -736,73 +639,15 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" +"@rollup/rollup-linux-x64-gnu@4.9.1": + version "4.9.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz" + integrity sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg== -"@rollup/rollup-android-arm-eabi@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.1.tgz#11bea66c013e5a88a0f53f315b2d49cfd663584e" - integrity sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA== - -"@rollup/rollup-android-arm64@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.1.tgz#cae505492204c018d1c6335f3b845319b15dc669" - integrity sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw== - -"@rollup/rollup-darwin-arm64@4.5.1": - version "4.5.1" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.1.tgz" - integrity sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw== - -"@rollup/rollup-darwin-x64@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.1.tgz#e5140b0aaab0ea1424a4c8a1e76442105866290c" - integrity sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw== - -"@rollup/rollup-linux-arm-gnueabihf@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.1.tgz#501a336b1dc4cb350a1b8b4e24bba4d049902d74" - integrity sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A== - -"@rollup/rollup-linux-arm64-gnu@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.1.tgz#bdb0c8552d167477d2624a4a6df0f71f128dc546" - integrity sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww== - -"@rollup/rollup-linux-arm64-musl@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.1.tgz#f7e8036c2f771bb366ca0d8c79d2132cffb1d295" - integrity sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw== - -"@rollup/rollup-linux-x64-gnu@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.1.tgz#079ca543a649b1dcf9832a34dff94ebb46c96745" - integrity sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw== - -"@rollup/rollup-linux-x64-musl@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.1.tgz#9cc8c0ea1c0e0d3b18888d5b2fd51ef6c9b42481" - integrity sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ== - -"@rollup/rollup-win32-arm64-msvc@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.1.tgz#df70597f6639549e79f0801004525d6a7a0075e4" - integrity sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ== - -"@rollup/rollup-win32-ia32-msvc@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.1.tgz#6f9e8b30a4d6b5c564bfe55cdf44a5b493139838" - integrity sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg== - -"@rollup/rollup-win32-x64-msvc@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.1.tgz#0e79117bacb5817ff9a88ab19cb59df839638d6d" - integrity sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q== +"@rollup/rollup-linux-x64-musl@4.9.1": + version "4.9.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz" + integrity sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -855,9 +700,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.7" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz" - integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== + version "7.6.8" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" @@ -878,14 +723,14 @@ "@types/color-convert@^2.0.3": version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.3.tgz#e93f5c991eda87a945058b47044f5f0008b0dce9" + resolved "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.3.tgz" integrity sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg== dependencies: "@types/color-name" "*" "@types/color-name@*": version "1.1.3" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.3.tgz#c488ac2e519c9795faa0d54e8156d54e66adc4e6" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.3.tgz" integrity sha512-87W6MJCKZYDhLAx/J1ikW8niMvmGRyY+rpUxWpL1cO7F8Uu5CHuQoFv+R0/L5pgNdW4jTyda42kv60uwVIPjLw== "@types/graceful-fs@^4.1.3": @@ -922,16 +767,16 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/node@*": - version "20.10.4" - resolved "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz" - integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== +"@types/node@*", "@types/node@^18.0.0 || >=20.0.0": + version "20.10.5" + resolved "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz" + integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== dependencies: undici-types "~5.26.4" "@types/seedrandom@^3.0.8": version "3.0.8" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.8.tgz#61cc8ed88f93a3c31289c295e6df8ca40be42bdf" + resolved "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.8.tgz" integrity sha512-TY1eezMU2zH2ozQoAFAQFOPpvP15g+ZgSfTZt31AUUH/Rxtnz3H+A/Sv1Snw2/amp//omibc+AEkTaA8KUeOLQ== "@types/stack-utils@^2.0.0": @@ -980,7 +825,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1012,7 +864,7 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -babel-jest@^29.7.0: +babel-jest@^29.0.0, babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== @@ -1092,7 +944,7 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.22.2: +browserslist@^4.22.2, "browserslist@>= 4.21.0": version "4.22.2" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz" integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== @@ -1137,9 +989,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001565: - version "1.0.30001570" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz" - integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== + version "1.0.30001572" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz" + integrity sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw== chalk@^2.4.2: version "2.4.2" @@ -1201,21 +1053,21 @@ color-convert@^1.9.0: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -1286,9 +1138,9 @@ diff@^4.0.1: integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== electron-to-chromium@^1.4.601: - version "1.4.613" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz" - integrity sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w== + version "1.4.616" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz" + integrity sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg== emittery@^0.13.1: version "0.13.1" @@ -1308,32 +1160,33 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" esbuild@^0.19.3: - version "0.19.7" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.7.tgz" - integrity sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ== + version "0.19.10" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz" + integrity sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA== optionalDependencies: - "@esbuild/android-arm" "0.19.7" - "@esbuild/android-arm64" "0.19.7" - "@esbuild/android-x64" "0.19.7" - "@esbuild/darwin-arm64" "0.19.7" - "@esbuild/darwin-x64" "0.19.7" - "@esbuild/freebsd-arm64" "0.19.7" - "@esbuild/freebsd-x64" "0.19.7" - "@esbuild/linux-arm" "0.19.7" - "@esbuild/linux-arm64" "0.19.7" - "@esbuild/linux-ia32" "0.19.7" - "@esbuild/linux-loong64" "0.19.7" - "@esbuild/linux-mips64el" "0.19.7" - "@esbuild/linux-ppc64" "0.19.7" - "@esbuild/linux-riscv64" "0.19.7" - "@esbuild/linux-s390x" "0.19.7" - "@esbuild/linux-x64" "0.19.7" - "@esbuild/netbsd-x64" "0.19.7" - "@esbuild/openbsd-x64" "0.19.7" - "@esbuild/sunos-x64" "0.19.7" - "@esbuild/win32-arm64" "0.19.7" - "@esbuild/win32-ia32" "0.19.7" - "@esbuild/win32-x64" "0.19.7" + "@esbuild/aix-ppc64" "0.19.10" + "@esbuild/android-arm" "0.19.10" + "@esbuild/android-arm64" "0.19.10" + "@esbuild/android-x64" "0.19.10" + "@esbuild/darwin-arm64" "0.19.10" + "@esbuild/darwin-x64" "0.19.10" + "@esbuild/freebsd-arm64" "0.19.10" + "@esbuild/freebsd-x64" "0.19.10" + "@esbuild/linux-arm" "0.19.10" + "@esbuild/linux-arm64" "0.19.10" + "@esbuild/linux-ia32" "0.19.10" + "@esbuild/linux-loong64" "0.19.10" + "@esbuild/linux-mips64el" "0.19.10" + "@esbuild/linux-ppc64" "0.19.10" + "@esbuild/linux-riscv64" "0.19.10" + "@esbuild/linux-s390x" "0.19.10" + "@esbuild/linux-x64" "0.19.10" + "@esbuild/netbsd-x64" "0.19.10" + "@esbuild/openbsd-x64" "0.19.10" + "@esbuild/sunos-x64" "0.19.10" + "@esbuild/win32-arm64" "0.19.10" + "@esbuild/win32-ia32" "0.19.10" + "@esbuild/win32-x64" "0.19.10" escalade@^3.1.1: version "3.1.1" @@ -1357,7 +1210,7 @@ esprima@^4.0.0: eventemitter3@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== execa@^5.0.0: @@ -1391,7 +1244,7 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1423,39 +1276,34 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 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" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob@^7.1.3, glob@^7.1.4: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1467,44 +1315,44 @@ glob@^7.1.3, glob@^7.1.4: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== hasown@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: function-bind "^1.1.2" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== import-local@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -1512,12 +1360,12 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -1525,54 +1373,54 @@ inflight@^1.0.4: inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-core-module@^2.13.0: version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 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" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4: version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -1583,7 +1431,7 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-instrument@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz" integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== dependencies: "@babel/core" "^7.12.3" @@ -1594,7 +1442,7 @@ istanbul-lib-instrument@^6.0.0: istanbul-lib-report@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -1603,7 +1451,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -1612,7 +1460,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" @@ -1620,7 +1468,7 @@ istanbul-reports@^3.1.3: jest-changed-files@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" @@ -1629,7 +1477,7 @@ jest-changed-files@^29.7.0: jest-circus@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: "@jest/environment" "^29.7.0" @@ -1655,7 +1503,7 @@ jest-circus@^29.7.0: jest-cli@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: "@jest/core" "^29.7.0" @@ -1672,7 +1520,7 @@ jest-cli@^29.7.0: jest-config@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" @@ -1700,7 +1548,7 @@ jest-config@^29.7.0: jest-diff@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" @@ -1710,14 +1558,14 @@ jest-diff@^29.7.0: jest-docblock@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" jest-each@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: "@jest/types" "^29.6.3" @@ -1728,7 +1576,7 @@ jest-each@^29.7.0: jest-environment-node@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== dependencies: "@jest/environment" "^29.7.0" @@ -1740,12 +1588,12 @@ jest-environment-node@^29.7.0: jest-get-type@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: "@jest/types" "^29.6.3" @@ -1764,7 +1612,7 @@ jest-haste-map@^29.7.0: jest-leak-detector@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: jest-get-type "^29.6.3" @@ -1772,7 +1620,7 @@ jest-leak-detector@^29.7.0: jest-matcher-utils@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" @@ -1782,7 +1630,7 @@ jest-matcher-utils@^29.7.0: jest-message-util@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" @@ -1797,7 +1645,7 @@ jest-message-util@^29.7.0: jest-mock@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: "@jest/types" "^29.6.3" @@ -1806,25 +1654,25 @@ jest-mock@^29.7.0: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== jest-resolve-dependencies@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: jest-regex-util "^29.6.3" jest-snapshot "^29.7.0" -jest-resolve@^29.7.0: +jest-resolve@*, jest-resolve@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" @@ -1839,7 +1687,7 @@ jest-resolve@^29.7.0: jest-runner@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: "@jest/console" "^29.7.0" @@ -1866,7 +1714,7 @@ jest-runner@^29.7.0: jest-runtime@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== dependencies: "@jest/environment" "^29.7.0" @@ -1894,7 +1742,7 @@ jest-runtime@^29.7.0: jest-snapshot@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" @@ -1920,7 +1768,7 @@ jest-snapshot@^29.7.0: jest-util@^29.0.0, jest-util@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: "@jest/types" "^29.6.3" @@ -1932,7 +1780,7 @@ jest-util@^29.0.0, jest-util@^29.7.0: jest-validate@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: "@jest/types" "^29.6.3" @@ -1944,7 +1792,7 @@ jest-validate@^29.7.0: jest-watcher@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: "@jest/test-result" "^29.7.0" @@ -1958,7 +1806,7 @@ jest-watcher@^29.7.0: jest-worker@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" @@ -1966,9 +1814,9 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.7.0: +jest@^29.0.0, jest@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: "@jest/core" "^29.7.0" @@ -1978,12 +1826,12 @@ jest@^29.7.0: js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -1991,87 +1839,87 @@ js-yaml@^3.13.1: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== leven@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 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" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash.memoize@4.x: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-dir@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: semver "^7.5.3" -make-error@1.x, make-error@^1.1.1: +make-error@^1.1.1, make-error@1.x: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== makeerror@1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -2079,19 +1927,19 @@ micromatch@^4.0.4: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== nanoid@^3.3.7: @@ -2210,24 +2058,24 @@ picocolors@^1.0.0: picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" postcss@^8.4.32: version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz" integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== dependencies: nanoid "^3.3.7" @@ -2293,27 +2141,28 @@ resolve@^1.20.0: supports-preserve-symlinks-flag "^1.0.0" rollup@^4.2.0: - version "4.5.1" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.5.1.tgz" - integrity sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA== + version "4.9.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz" + integrity sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw== optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.5.1" - "@rollup/rollup-android-arm64" "4.5.1" - "@rollup/rollup-darwin-arm64" "4.5.1" - "@rollup/rollup-darwin-x64" "4.5.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.5.1" - "@rollup/rollup-linux-arm64-gnu" "4.5.1" - "@rollup/rollup-linux-arm64-musl" "4.5.1" - "@rollup/rollup-linux-x64-gnu" "4.5.1" - "@rollup/rollup-linux-x64-musl" "4.5.1" - "@rollup/rollup-win32-arm64-msvc" "4.5.1" - "@rollup/rollup-win32-ia32-msvc" "4.5.1" - "@rollup/rollup-win32-x64-msvc" "4.5.1" + "@rollup/rollup-android-arm-eabi" "4.9.1" + "@rollup/rollup-android-arm64" "4.9.1" + "@rollup/rollup-darwin-arm64" "4.9.1" + "@rollup/rollup-darwin-x64" "4.9.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.1" + "@rollup/rollup-linux-arm64-gnu" "4.9.1" + "@rollup/rollup-linux-arm64-musl" "4.9.1" + "@rollup/rollup-linux-riscv64-gnu" "4.9.1" + "@rollup/rollup-linux-x64-gnu" "4.9.1" + "@rollup/rollup-linux-x64-musl" "4.9.1" + "@rollup/rollup-win32-arm64-msvc" "4.9.1" + "@rollup/rollup-win32-ia32-msvc" "4.9.1" + "@rollup/rollup-win32-x64-msvc" "4.9.1" fsevents "~2.3.2" seedrandom@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + resolved "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz" integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== semver@^6.3.0, semver@^6.3.1: @@ -2321,7 +2170,14 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.3, semver@^7.5.4: +semver@^7.5.3: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +semver@^7.5.4: version "7.5.4" resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -2490,7 +2346,7 @@ ts-jest@^29.1.1: semver "^7.5.3" yargs-parser "^21.0.1" -ts-node@^10.9.2: +ts-node@^10.9.2, ts-node@>=9.0.0: version "10.9.2" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== @@ -2519,19 +2375,19 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@^5.2.2: - version "5.3.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz" - integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== +typescript@^5.2.2, typescript@>=2.7, "typescript@>=4.3 <6": + version "5.3.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== update-browserslist-db@^1.0.13: version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" @@ -2539,12 +2395,12 @@ update-browserslist-db@^1.0.13: v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-to-istanbul@^9.0.1: version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz" integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" @@ -2552,9 +2408,9 @@ v8-to-istanbul@^9.0.1: convert-source-map "^2.0.0" vite@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.5.tgz#3eebe3698e3b32cea36350f58879258fec858a3c" - integrity sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg== + version "5.0.10" + resolved "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz" + integrity sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw== dependencies: esbuild "^0.19.3" postcss "^8.4.32"