From 72d8c0178a8b21a8f0d19da9689a5bac30ccbcbb Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 17 Feb 2021 12:37:03 +0100 Subject: beginsels website game dings --- api/game/socket.py | 39 ++++++++-------- api/game/voerbak | Bin 0 -> 16592 bytes api/game/voerbak.c | 100 ++++++++++++++++++++++++++++++++++++++++++ api/game/voerbak_connector.py | 79 +++++++++++++++++++++++++++++++++ console/voerbak.c | 100 ------------------------------------------ console/voerbak_connector.py | 79 --------------------------------- package.json | 1 + pages/game.tsx | 67 ++++++++++++++++++++++------ yarn.lock | 94 ++++++++++++++++++++++++++++++++++++++- 9 files changed, 347 insertions(+), 212 deletions(-) create mode 100755 api/game/voerbak create mode 100644 api/game/voerbak.c create mode 100644 api/game/voerbak_connector.py delete mode 100644 console/voerbak.c delete mode 100644 console/voerbak_connector.py diff --git a/api/game/socket.py b/api/game/socket.py index c4e5ac7..d6dff1b 100644 --- a/api/game/socket.py +++ b/api/game/socket.py @@ -1,30 +1,33 @@ from flask import Blueprint, request, make_response -from flask_socketio import SocketIO, emit, disconnect, Namespace, emit +from flask_socketio import SocketIO, emit, disconnect, emit +from game.voerbak_connector import bord +from db import cursor import time import json -class GameSocketNamespace(Namespace): - def connect(self): - print("new connection") - emit("gert", {"gert": "banaan"}) +namespace = "/game/socket" - def on_connect(self): - print("new connection") - emit("gert", {"gert": "banaan"}) +class game: + def __init__(self, game_id): + self.game_id = game_id + self.board = bord(7, 6) - def on_disconnect(self): - print("disconnect") + def move(self, user_id, column): + # player_1 = cursor.execute("select player_1_id from games where game_id = ?", [self.game_id]).fetchone()[0] + # player_1_move = player_1 == user_id + # if not self.board.player_1 == player_1_move: return + self.board.drop_fisje(column) - def new_move(self, data): - print("new_move") +def run(app): + io = SocketIO(app) + + @io.on("new_move", namespace) + def new_move(data): print(data) - def resign(self, data): - print("resign") + @io.on("resign", namespace) + def resign(data): print(data) -def run(app): - socketio = SocketIO(app) - socketio.on_namespace(GameSocketNamespace("/game/socket")) - socketio.run(app, host="127.0.0.1", port=5000, debug=True) + io.run(app, host="127.0.0.1", port=5000, debug=True) diff --git a/api/game/voerbak b/api/game/voerbak new file mode 100755 index 0000000..e7b7a14 Binary files /dev/null and b/api/game/voerbak differ diff --git a/api/game/voerbak.c b/api/game/voerbak.c new file mode 100644 index 0000000..f0ecb4a --- /dev/null +++ b/api/game/voerbak.c @@ -0,0 +1,100 @@ +#include +#include +#include +#include + +void printBoard(int board[], int width, int height) { + for (int i = 0; i < width * height; i++) + printf("%d", board[i]); + printf("\n"); + fflush(stdout); +} + +int recursiveSolve(int board[], int width, int height, int pos, int checkFor, int direction, int currentLength) { + int overflow = (pos % width) + direction; + if (overflow == width || overflow == -1) + return currentLength; + int newPos = pos + direction; + if (newPos < 0 || newPos > width * height - 1) + return currentLength; + if (board[newPos] != checkFor) + return currentLength; + return recursiveSolve(board, width, height, newPos, checkFor, direction, currentLength + 1); +} + +bool checkWin(int board[], int width, int height, int pos) { + int directions[8] = { + width, // north + width + 1, // northeast + 1, // east + -width + 1, // southeast + -width, // south + -width -1, // southwest + -1, // west + width -1 // northwest + }; + + int values[8]; + for (int i = 0; i < 8; i++) + values[i] = recursiveSolve(board, width, height, pos, board[pos], directions[i], 0); + + int joinedValues[4] = { + values[0] + values[4], + values[1] + values[5], + values[2] + values[6], + values[3] + values[7] + }; + + bool won = false; + for (int i = 0; i < 4; i++) { + if (joinedValues[i] >= 3) { + won = won || true; + + int start_pos = pos + directions[i+0] * values[i+0]; + int end_pos = pos + directions[i+4] * values[i+4]; + printf("w:%d-%d\n", start_pos, end_pos); + fflush(stdout); + } + } + + return won; +} + +bool dropFisje(int board[], int width, int height, int column, int disc) { + for (int row = 0; row < height; row++) { + int pos = column + row * width; + if (board[pos] == 0) { + board[pos] = disc; + bool won = checkWin(board, width, height, pos); + return true; // success + } + } + printf("e:full\n"); + fflush(stdout); + return false; // unsuccessful drop on board full +} + +int main() { + int width, height; + scanf("%d %d", &width, &height); + + int board[width * height]; + memset(board, 0, sizeof board); + + bool player_1 = true; + int move = 0; + while (scanf("%d", &move) == 1) { + if (move == 0) break; + if (move < 1 || move > width) continue; + + bool dropSuccess = dropFisje(board, width, height, move - 1, player_1 + 1); + + player_1 = player_1 ^ dropSuccess; // only flip turns on successful drop + printf("m:%s\n", player_1 ? "true" : "false"); + fflush(stdout); + + printBoard(board, width, height); + } + + return 0; +} diff --git a/api/game/voerbak_connector.py b/api/game/voerbak_connector.py new file mode 100644 index 0000000..6274ada --- /dev/null +++ b/api/game/voerbak_connector.py @@ -0,0 +1,79 @@ +from colorama import Fore +import logging as log +import subprocess +import os + +VERBOSE = log.ERROR +log.basicConfig(format="[ %(levelname)s ]: %(message)s", level=VERBOSE) + +DISC_SHAPE = "o" +DISC_A = Fore.RED + DISC_SHAPE + Fore.RESET +DISC_B = Fore.BLUE + DISC_SHAPE + Fore.RESET +EMPTY = Fore.LIGHTBLACK_EX + "_" + Fore.RESET + +VOERBAK_LOCATION = "./voerbak" +if os.name == "nt": VOERBAK_LOCATION += ".exe" + +class bord: + def __init__(self, w, h): + self.width = w + self.height = h + self.player_1 = True + self.board = "0" * (w * h) + self.win_positions = [] + self.process = subprocess.Popen(["./voerbak"], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=None) + self.process.stdin.write(bytearray(f"{w} {h}\n", "utf-8")) + self.process.stdin.flush() + + def get_output(self): + return self.process.stdout.readline().decode()[:-1] + + def update_board(self): + buffer = self.get_output() + while not buffer.isdigit(): + if buffer.startswith("w:"): + self.win_positions.append(buffer[2:].split("-")) + log.info(f"won: {buffer[2:].split('-')}") + elif buffer.startswith("e:"): + log.warning(buffer[2:]) + elif buffer.startswith("m:"): + substr = buffer[2:] + self.player_1 = True if substr == "true" else False + buffer = self.get_output() + self.board = buffer + + def print(self): + for y in range(self.height -1, -1, -1): + for x in range(self.width): + state = self.board[x + y * self.width] + char = [EMPTY, + DISC_A, + DISC_B + ] + print(char[int(state)], end=" ") + print("\n", end="") + + def drop_fisje(self, column): + self.process.stdin.write(bytearray(f"{column}\n", "utf-8")) + self.process.stdin.flush() + self.update_board() + +def main(): + gert = bord(7, 6) + while True: + print(gert.player_1) + if len(gert.win_positions) > 0: + print(f"won: {gert.win_positions}") + exit(0) + gert.print() + column = int(input("column?: ")) - 1 + if column not in range(gert.width): + continue + gert.drop_fisje(column + 1) + +if __name__ == "__main__": + main() + diff --git a/console/voerbak.c b/console/voerbak.c deleted file mode 100644 index f0ecb4a..0000000 --- a/console/voerbak.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include - -void printBoard(int board[], int width, int height) { - for (int i = 0; i < width * height; i++) - printf("%d", board[i]); - printf("\n"); - fflush(stdout); -} - -int recursiveSolve(int board[], int width, int height, int pos, int checkFor, int direction, int currentLength) { - int overflow = (pos % width) + direction; - if (overflow == width || overflow == -1) - return currentLength; - int newPos = pos + direction; - if (newPos < 0 || newPos > width * height - 1) - return currentLength; - if (board[newPos] != checkFor) - return currentLength; - return recursiveSolve(board, width, height, newPos, checkFor, direction, currentLength + 1); -} - -bool checkWin(int board[], int width, int height, int pos) { - int directions[8] = { - width, // north - width + 1, // northeast - 1, // east - -width + 1, // southeast - -width, // south - -width -1, // southwest - -1, // west - width -1 // northwest - }; - - int values[8]; - for (int i = 0; i < 8; i++) - values[i] = recursiveSolve(board, width, height, pos, board[pos], directions[i], 0); - - int joinedValues[4] = { - values[0] + values[4], - values[1] + values[5], - values[2] + values[6], - values[3] + values[7] - }; - - bool won = false; - for (int i = 0; i < 4; i++) { - if (joinedValues[i] >= 3) { - won = won || true; - - int start_pos = pos + directions[i+0] * values[i+0]; - int end_pos = pos + directions[i+4] * values[i+4]; - printf("w:%d-%d\n", start_pos, end_pos); - fflush(stdout); - } - } - - return won; -} - -bool dropFisje(int board[], int width, int height, int column, int disc) { - for (int row = 0; row < height; row++) { - int pos = column + row * width; - if (board[pos] == 0) { - board[pos] = disc; - bool won = checkWin(board, width, height, pos); - return true; // success - } - } - printf("e:full\n"); - fflush(stdout); - return false; // unsuccessful drop on board full -} - -int main() { - int width, height; - scanf("%d %d", &width, &height); - - int board[width * height]; - memset(board, 0, sizeof board); - - bool player_1 = true; - int move = 0; - while (scanf("%d", &move) == 1) { - if (move == 0) break; - if (move < 1 || move > width) continue; - - bool dropSuccess = dropFisje(board, width, height, move - 1, player_1 + 1); - - player_1 = player_1 ^ dropSuccess; // only flip turns on successful drop - printf("m:%s\n", player_1 ? "true" : "false"); - fflush(stdout); - - printBoard(board, width, height); - } - - return 0; -} diff --git a/console/voerbak_connector.py b/console/voerbak_connector.py deleted file mode 100644 index 6274ada..0000000 --- a/console/voerbak_connector.py +++ /dev/null @@ -1,79 +0,0 @@ -from colorama import Fore -import logging as log -import subprocess -import os - -VERBOSE = log.ERROR -log.basicConfig(format="[ %(levelname)s ]: %(message)s", level=VERBOSE) - -DISC_SHAPE = "o" -DISC_A = Fore.RED + DISC_SHAPE + Fore.RESET -DISC_B = Fore.BLUE + DISC_SHAPE + Fore.RESET -EMPTY = Fore.LIGHTBLACK_EX + "_" + Fore.RESET - -VOERBAK_LOCATION = "./voerbak" -if os.name == "nt": VOERBAK_LOCATION += ".exe" - -class bord: - def __init__(self, w, h): - self.width = w - self.height = h - self.player_1 = True - self.board = "0" * (w * h) - self.win_positions = [] - self.process = subprocess.Popen(["./voerbak"], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=None) - self.process.stdin.write(bytearray(f"{w} {h}\n", "utf-8")) - self.process.stdin.flush() - - def get_output(self): - return self.process.stdout.readline().decode()[:-1] - - def update_board(self): - buffer = self.get_output() - while not buffer.isdigit(): - if buffer.startswith("w:"): - self.win_positions.append(buffer[2:].split("-")) - log.info(f"won: {buffer[2:].split('-')}") - elif buffer.startswith("e:"): - log.warning(buffer[2:]) - elif buffer.startswith("m:"): - substr = buffer[2:] - self.player_1 = True if substr == "true" else False - buffer = self.get_output() - self.board = buffer - - def print(self): - for y in range(self.height -1, -1, -1): - for x in range(self.width): - state = self.board[x + y * self.width] - char = [EMPTY, - DISC_A, - DISC_B - ] - print(char[int(state)], end=" ") - print("\n", end="") - - def drop_fisje(self, column): - self.process.stdin.write(bytearray(f"{column}\n", "utf-8")) - self.process.stdin.flush() - self.update_board() - -def main(): - gert = bord(7, 6) - while True: - print(gert.player_1) - if len(gert.win_positions) > 0: - print(f"won: {gert.win_positions}") - exit(0) - gert.print() - column = int(input("column?: ")) - 1 - if column not in range(gert.width): - continue - gert.drop_fisje(column + 1) - -if __name__ == "__main__": - main() - diff --git a/package.json b/package.json index 406bf35..4db6c8d 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "react-dom": "^17.0.1", "react-router-dom": "^5.2.0", "react-scripts": "^4.0.1", + "socket.io-client": "^3.1.1", "swr": "^0.4.0", "typescript": "^4.1.3", "uuid": "^8.3.2", diff --git a/pages/game.tsx b/pages/game.tsx index 513fc7a..f56452f 100644 --- a/pages/game.tsx +++ b/pages/game.tsx @@ -1,4 +1,10 @@ -import { CSSProperties } from 'react'; +import { CSSProperties, Component } from 'react'; +import { io } from 'socket.io-client'; +import axios from 'axios'; +import { userInfo } from '../api/api'; +import * as cookies from 'react-cookies'; + +var socket = io("http://localhost:5000/game/socket"); import { NavBar } from '../components/navbar'; import { CenteredPage } from '../components/page'; @@ -37,22 +43,57 @@ var InviteButtonLabelStyle: CSSProperties = { userSelect: "none" } +interface VoerGameProps { + +} + +class VoerGame extends Component { + constructor(props: VoerGameProps) { + super(props); + } + + board = [...Array(7 * 6)].map(() => 0); + userID = ""; + + move(column: number) { + console.log(column) + if(this.userID == "") { + axios.request({ + method: "get", + url: `/api/user/info`, + headers: {"content-type": "application/json"} + }) + .then(request => this.setState({ userID: request.data.id })) + .catch(() => {}); + } + socket.emit("new_move", { + move: column, + token: cookies.load("token"), + gameID: "fortnite" + }) + } + + render() { + return
+ + +
+ } +} + export default function GamePage() { return (
-
- - -
- + + {false &&
-
+
}
); diff --git a/yarn.lock b/yarn.lock index f9a27a2..5cd7155 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1887,6 +1887,11 @@ "@types/connect" "*" "@types/node" "*" +"@types/component-emitter@^1.2.10": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" + integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== + "@types/connect@*": version "3.4.34" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" @@ -3039,11 +3044,21 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== +backo2@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -3784,7 +3799,7 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -4372,7 +4387,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -4872,6 +4887,29 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +engine.io-client@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-4.1.1.tgz#109942705079f15a4fcf1090bc86d3a1341c0a61" + integrity sha512-iYasV/EttP/2pLrdowe9G3zwlNIFhwny8VSIh+vPlMnYZqSzLsTzSLa9hFy015OrH1s4fzoYxeHjVkO8hSFKwg== + dependencies: + base64-arraybuffer "0.1.4" + component-emitter "~1.3.0" + debug "~4.3.1" + engine.io-parser "~4.0.1" + has-cors "1.1.0" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~7.4.2" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" + integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== + dependencies: + base64-arraybuffer "0.1.4" + enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" @@ -5984,6 +6022,11 @@ harmony-reflect@^1.4.6: resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -8786,6 +8829,16 @@ parse5@5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -10977,6 +11030,28 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socket.io-client@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-3.1.1.tgz#43dfc3feddbb675b274a724f685d6b6af319b3e3" + integrity sha512-BLgIuCjI7Sf3mDHunKddX9zKR/pbkP7IACM3sJS3jha+zJ6/pGKRV6Fz5XSBHCfUs9YzT8kYIqNwOOuFNLtnYA== + dependencies: + "@types/component-emitter" "^1.2.10" + backo2 "~1.0.2" + component-emitter "~1.3.0" + debug "~4.3.1" + engine.io-client "~4.1.0" + parseuri "0.0.6" + socket.io-parser "~4.0.4" + +socket.io-parser@~4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" + integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== + dependencies: + "@types/component-emitter" "^1.2.10" + component-emitter "~1.3.0" + debug "~4.3.1" + sockjs-client@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" @@ -12728,6 +12803,11 @@ ws@^7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== +ws@~7.4.2: + version "7.4.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" + integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -12738,6 +12818,11 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -12812,6 +12897,11 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" -- cgit v1.2.3