From 85796bb6dd77a2ef70cf567ae81d5a658527c651 Mon Sep 17 00:00:00 2001 From: F-Hejazi <60328249+F-Hejazi@users.noreply.github.com> Date: Fri, 5 Dec 2025 07:33:31 +0100 Subject: [PATCH 01/28] refactor: migrate chess client to React components and hooks --- .../src/components/ChessBoard/ChessBoard.css | 17 +- .../src/components/ChessBoard/ChessBoard.tsx | 260 +++++--- react-ystemandchess/src/core/types/chess.d.ts | 47 ++ .../lesson-overlay/Lesson-overlay.tsx | 630 ++++++++++-------- .../hooks/useChessSocket.test.ts | 0 .../lesson-overlay/hooks/useChessSocket.ts | 590 ++++++++++++++++ 6 files changed, 1185 insertions(+), 359 deletions(-) create mode 100644 react-ystemandchess/src/core/types/chess.d.ts create mode 100644 react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.test.ts create mode 100644 react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.ts diff --git a/react-ystemandchess/src/components/ChessBoard/ChessBoard.css b/react-ystemandchess/src/components/ChessBoard/ChessBoard.css index c2b3b04a..515dcc1d 100644 --- a/react-ystemandchess/src/components/ChessBoard/ChessBoard.css +++ b/react-ystemandchess/src/components/ChessBoard/ChessBoard.css @@ -34,7 +34,7 @@ .highlight1-32417, .highlight2-9c5d2 { - box-shadow: inset 0 0 3px 3px yellow; + box-shadow: inset 0 0 3px 3px rgba(255, 251, 0, 0.75); } .notation-322f9 { @@ -80,6 +80,21 @@ align-items: center; } +/* Prevent piece magnification during drag */ +.chessboard-wrapper img[data-piece] { + cursor: grab; + transition: none !important; + transform: none !important; +} + +.chessboard-wrapper img[data-piece]:active { + cursor: grabbing; + /* Keep original size - don't scale */ + transform: scale(1) !important; + opacity: 0.8; + z-index: 1000; +} + /* Tablet/Large Mobile Responsive */ @media screen and (max-width: 1024px) { .board-b72b1 { diff --git a/react-ystemandchess/src/components/ChessBoard/ChessBoard.tsx b/react-ystemandchess/src/components/ChessBoard/ChessBoard.tsx index 088dda9e..ca8a29d2 100644 --- a/react-ystemandchess/src/components/ChessBoard/ChessBoard.tsx +++ b/react-ystemandchess/src/components/ChessBoard/ChessBoard.tsx @@ -1,21 +1,23 @@ import React, { useState, useRef, useImperativeHandle, useEffect, forwardRef } from "react"; import Chessboard from "chessboardjsx"; import { Chess, Square } from "chess.js"; +import { Move } from "../../core/types/chess"; import "./ChessBoard.css"; -interface Move { - from: string; - to: string; - promotion?: string; -} - interface ChessBoardProps { - lessonMoves?: Move[]; - onMove?: (fen: string) => void; - onPromote?: (position: string, piece: string) => void; - onReset?: (fen: string) => void; fen?: string; - onLessonComplete?: () => void; + lessonMoves?: Move[]; + orientation?: "white" | "black"; + disabled?: boolean; + + // Event handlers + onMove?: (move: Move) => void; + onInvalidMove?: () => void; + onPromotion?: (from: string, to: string, piece: string) => void; + + // Highlighting + highlightSquares?: string[]; + onHighlightChange?: (squares: string[]) => void; } export interface ChessBoardRef { @@ -25,142 +27,238 @@ export interface ChessBoardRef { setOrientation: (color: "white" | "black") => void; flip: () => void; undo: () => void; + loadPosition: (fen: string) => void; + highlightMove: (from: string, to: string) => void; + clearHighlights: () => void; } const ChessBoard = forwardRef( - ({ lessonMoves = [], onMove, onPromote, onReset, fen: controlledFEN, onLessonComplete }, ref) => { + ( + { + fen, + lessonMoves = [], + orientation: propOrientation = "white", + disabled = false, + onMove, + onInvalidMove, + onPromotion, + highlightSquares: externalHighlights = [], + onHighlightChange, + }, + ref + ) => { + // Internal chess engine for move validation const gameRef = useRef(new Chess()); - const [fen, setFen] = useState(gameRef.current.fen()); - const [highlightSquares, setHighlightSquares] = useState([]); + + // UI state + const [internalHighlights, setInternalHighlights] = useState([]); const [lessonIndex, setLessonIndex] = useState(0); const [isShaking, setIsShaking] = useState(false); - const [orientation, setOrientationState] = useState<"white" | "black">("white"); - const [boardWidth, setBoardWidth] = useState(0); + const [orientation, setOrientationState] = useState<"white" | "black">(propOrientation); + const [boardPosition, setBoardPosition] = useState(fen || "start"); + const [boardWidth, setBoardWidth] = useState(560); + const boardRef = useRef(null); - // Update width based on parent size + // Responsive sizing useEffect(() => { const handleResize = () => { if (boardRef.current) { const containerWidth = boardRef.current.offsetWidth; - setBoardWidth(containerWidth); + setBoardWidth(Math.min(containerWidth, 600)); } }; - handleResize(); // initial + handleResize(); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); - // Sync controlled FEN to engine whenever it changes + // Sync orientation from props useEffect(() => { - if (!controlledFEN) return; - if (controlledFEN !== gameRef.current.fen()) { + setOrientationState(propOrientation); + }, [propOrientation]); + + // Sync FEN from parent (server is source of truth) with comparison check + useEffect(() => { + if (fen && fen !== gameRef.current.fen()) { try { - gameRef.current.load(controlledFEN); + gameRef.current.load(fen); + setBoardPosition(fen); } catch (err) { - console.warn("Invalid FEN passed to ChessBoard:", controlledFEN, err); + console.error("Invalid FEN from server:", fen, err); } - setFen(gameRef.current.fen()); - setHighlightSquares([]); } - }, [controlledFEN]); + }, [fen]); + + // Combine highlights from props and internal state + const allHighlights = [...externalHighlights, ...internalHighlights]; + + // ============================================================================ + // IMPERATIVE METHODS (exposed via ref) + // ============================================================================ - // Expose methods to parent useImperativeHandle(ref, () => ({ handlePromotion: (from: string, to: string, piece: string) => { - const move = gameRef.current.move({ from: from as Square, to: to as Square, promotion: piece }); - if (move) { - setFen(gameRef.current.fen()); - setHighlightSquares([from, to]); - if (onPromote) onPromote(to, piece); - if (onMove) onMove(gameRef.current.fen()); - } + if (onPromotion) onPromotion(from, to, piece); }, + reset: () => { gameRef.current.reset(); - setFen(gameRef.current.fen()); - setHighlightSquares([]); + setBoardPosition(gameRef.current.fen()); + setInternalHighlights([]); setLessonIndex(0); - if (onReset) onReset(gameRef.current.fen()); }, + getFen: () => gameRef.current.fen(), + setOrientation: (color: "white" | "black") => setOrientationState(color), + flip: () => setOrientationState((o) => (o === "white" ? "black" : "white")), + undo: () => { - const move = gameRef.current.undo(); - if (move) { - setFen(gameRef.current.fen()); - setHighlightSquares([]); - setLessonIndex((prev) => (prev > 0 ? prev - 1 : 0)); - if (onMove) onMove(gameRef.current.fen()); + gameRef.current.undo(); + setBoardPosition(gameRef.current.fen()); + setInternalHighlights([]); + setLessonIndex((prev) => Math.max(0, prev - 1)); + }, + + loadPosition: (newFen: string) => { + try { + gameRef.current.load(newFen); + setBoardPosition(newFen); + } catch (err) { + console.error("Failed to load FEN:", newFen, err); } }, + + highlightMove: (from: string, to: string) => { + const highlights = [from, to]; + setInternalHighlights(highlights); + if (onHighlightChange) onHighlightChange(highlights); + }, + + clearHighlights: () => { + setInternalHighlights([]); + if (onHighlightChange) onHighlightChange([]); + }, })); - const onDrop = ({ sourceSquare, targetSquare }: { sourceSquare: string; targetSquare: string }) => { + // ============================================================================ + // CHESSBOARDJSX EVENT HANDLER + // ============================================================================ + + const handleDrop = ({ + sourceSquare, + targetSquare, + }: { + sourceSquare: string; + targetSquare: string; + }) => { try { - const piece = gameRef.current.get(sourceSquare as Square)?.type; - const isPromotion = piece === "p" && (targetSquare[1] === "8" || targetSquare[1] === "1"); + // Ignore if board is disabled + if (disabled) { + return "snapback"; + } - const move = gameRef.current.move({ + const piece = gameRef.current.get(sourceSquare as Square); + if (!piece) { + return "snapback"; + } + + // Check for pawn promotion + const isPromotion = + piece.type === "p" && + (targetSquare[1] === "8" || targetSquare[1] === "1"); + + // Construct move object + const move: Move = { + from: sourceSquare, + to: targetSquare, + promotion: isPromotion ? "q" : undefined, + }; + + // Lesson mode: validate expected moves BEFORE making the move + if (lessonMoves.length > 0 && lessonIndex < lessonMoves.length) { + const expected = lessonMoves[lessonIndex]; + + if (move.from !== expected.from || move.to !== expected.to) { + setIsShaking(true); + setTimeout(() => setIsShaking(false), 400); + if (onInvalidMove) onInvalidMove(); + return "snapback"; + } + } + + // Validate move locally (for instant feedback) + const moveResult = gameRef.current.move({ from: sourceSquare as Square, to: targetSquare as Square, - promotion: isPromotion ? "q" : undefined, + promotion: move.promotion, }); - if (!move) { + if (!moveResult) { + // Invalid move - shake animation and snapback + console.log("Invalid move:", move); setIsShaking(true); setTimeout(() => setIsShaking(false), 400); - return; + if (onInvalidMove) onInvalidMove(); + return "snapback"; } - setFen(gameRef.current.fen()); - setHighlightSquares([sourceSquare, targetSquare]); + // Valid move - keep it and update board immediately + setBoardPosition(gameRef.current.fen()); + // Highlight the move locally for instant feedback + setInternalHighlights([sourceSquare, targetSquare]); + + // Increment lesson index if in lesson mode if (lessonMoves.length > 0 && lessonIndex < lessonMoves.length) { - const expected = lessonMoves[lessonIndex]; - if (move.from === expected.from && move.to === expected.to) { - setLessonIndex((idx) => idx + 1); - } else { - gameRef.current.undo(); - setFen(gameRef.current.fen()); - } + setLessonIndex((idx) => idx + 1); } - if (onMove) onMove(gameRef.current.fen()); - checkGameStatus(); - } catch (err: any) { - console.warn("Invalid move attempted:", err.message); + // Send move to server/parent + if (onMove) onMove(move); + + // Don't return anything - allow the move to complete + } catch (error) { + console.error("Error in handleDrop:", error); setIsShaking(true); setTimeout(() => setIsShaking(false), 400); + if (onInvalidMove) onInvalidMove(); + return "snapback"; } }; - const checkGameStatus = () => { - const g = gameRef.current; - if (!g) return; + // ============================================================================ + // SQUARE STYLING + // ============================================================================ - if (g.isCheckmate()) { - alert("Checkmate! Game over."); - if (onLessonComplete) onLessonComplete(); - } else if (g.isDraw()) { - alert("Draw! Game over."); - if (onLessonComplete) onLessonComplete(); - } + const squareStyles = (): Record => { + const styles: Record = {}; + + // Highlight selected/moved squares + allHighlights.forEach((sq) => { + styles[sq] = { + backgroundColor: "rgba(255, 251, 0, 0.75)", + }; + }); + + return styles; }; return ( -
+
{ - acc[sq] = { backgroundColor: "yellow" }; - return acc; - }, {} as Record)} + squareStyles={squareStyles()} />
); diff --git a/react-ystemandchess/src/core/types/chess.d.ts b/react-ystemandchess/src/core/types/chess.d.ts new file mode 100644 index 00000000..f865a6ac --- /dev/null +++ b/react-ystemandchess/src/core/types/chess.d.ts @@ -0,0 +1,47 @@ +export type PlayerColor = "white" | "black"; +export type GameMode = "regular" | "puzzle" | "lesson"; +export type UserRole = "mentor" | "student" | "host" | "guest"; + +export interface Move { + from: string; + to: string; + promotion?: string; + piece?: string; + captured?: string; + flags?: string; +} + +export interface GameConfig { + mentor: string; + student: string; + role: UserRole; +} + +export interface BoardState { + boardState?: string; + fen?: string; + color?: PlayerColor; + move?: Move; + hints?: string; +} + +export interface MousePosition { + x: number; + y: number; +} + +export interface LessonData { + startFen: string; + endFen: string; + name: string; + info: string; + lessonNum: number; + moves?: Move[]; +} + +export interface PuzzleData { + fen: string; + moves: Move[]; + hints?: string; + rating?: number; +} diff --git a/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/Lesson-overlay.tsx b/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/Lesson-overlay.tsx index 94b2f18b..b5a028bb 100644 --- a/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/Lesson-overlay.tsx +++ b/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/Lesson-overlay.tsx @@ -2,25 +2,24 @@ import React, { useEffect, useState, useRef, useCallback } from 'react'; import { useCookies } from 'react-cookie'; import pageStyles from './Lesson-overlay.module.scss'; import profileStyles from './Lesson-overlay-profile.module.scss'; -// @ts-ignore import MoveTracker from '../move-tracker/MoveTracker'; -import ChessBoard from '../../../../components/ChessBoard/ChessBoard'; -import { ReactComponent as RedoIcon } from "../../../../assets/images/icons/icon_redo.svg"; -import { ReactComponent as BackIcon } from "../../../../assets/images/icons/icon_back.svg"; -import { ReactComponent as BackIconInactive } from "../../../../assets/images/icons/icon_back_inactive.svg"; -import { ReactComponent as NextIcon } from "../../../../assets/images/icons/icon_next.svg"; -import { ReactComponent as NextIconInactive } from "../../../../assets/images/icons/icon_next_inactive.svg"; +import { environment } from "../../../../environments/environment"; +import ChessBoard, { ChessBoardRef } from '../../../../components/ChessBoard/ChessBoard'; +import { Move } from "../../../../core/types/chess"; +import { ReactComponent as RedoIcon } from '../../../images/icons/icon_redo.svg'; +import { ReactComponent as BackIcon } from '../../../images/icons/icon_back.svg'; +import { ReactComponent as BackIconInactive } from '../../../images/icons/icon_back_inactive.svg'; +import { ReactComponent as NextIcon } from '../../../images/icons/icon_next.svg'; +import { ReactComponent as NextIconInactive } from '../../../images/icons/icon_next_inactive.svg'; import { useNavigate, useLocation } from 'react-router'; - import PromotionPopup from '../../lessons-main/PromotionPopup'; // Custom Hooks import { useChessGameLogic } from './hooks/useChessGameLogic'; import { useLessonManager } from './hooks/useLessonManager'; -import { useSocketChessEngine } from './hooks/useSocketChessEngine'; +import { useChessSocket } from './hooks/useChessSocket'; import { useTimeTracking } from './hooks/useTimeTracking'; -// types for the component props type LessonOverlayProps = { propPieceName?: any; propLessonNumber?: any; @@ -28,7 +27,6 @@ type LessonOverlayProps = { styleType?: any; onChessMove?: (fen: string) => void; onChessReset?: (fen: string) => void; - }; const LessonOverlay: React.FC = ({ @@ -39,33 +37,28 @@ const LessonOverlay: React.FC = ({ onChessMove, onChessReset, }) => { - const styles = styleType === 'profile' ? profileStyles : pageStyles; - const navigate = useNavigate(); const location = useLocation(); const [cookies] = useCookies(['login']); - const chessBoardRef = useRef(null); - const isReadyRef = useRef(false); + const chessBoardRef = useRef(null); - // Information for lesson + // Lesson information const [piece, setPiece] = useState(propPieceName || location.state?.piece || ""); const [initialLessonNum] = useState(propLessonNumber ?? location.state?.lessonNum ?? 0); - const lessonStartFENRef = useRef("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"); - const [currentFEN, setCurrentFEN] = useState(lessonStartFENRef.current); - const lessonEndFENRef = useRef(""); - const lessonTypeRef = useRef("default"); - const turnRef = useRef("white"); - const [name, setName] = useState(""); // name of lesson - const [info, setInfo] = useState(""); // description of lesson - const [progress, setProgress] = useState(0); // for time tracking progress bar - const [isFading, setIsFading] = useState(false); // for instructions fade-out effect - - // Information needed for move tracker - const [level, setLevel] = useState(20); - - // Controlling popups + const [currentFEN, setCurrentFEN] = useState("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"); + const [boardOrientation, setBoardOrientation] = useState<"white" | "black">("white"); + const [name, setName] = useState(""); + const [info, setInfo] = useState(""); + const [progress, setProgress] = useState(0); + const [isFading, setIsFading] = useState(false); + + // Move tracking + const [moveHistory, setMoveHistory] = useState([]); + const [highlightSquares, setHighlightSquares] = useState([]); + + // Popups const [showVPopup, setShowVPopup] = useState(false); const [showXPopup, setShowXPopup] = useState(false); const [ShowError, setShowError] = useState(false); @@ -73,66 +66,69 @@ const LessonOverlay: React.FC = ({ const [showInstruction, setShowInstruction] = useState(false); const [allLessonsDone, setAllLessonsDone] = useState(false); + // Promotion const [isPromoting, setIsPromoting] = useState(false); const [promotionSource, setPromotionSource] = useState(""); const [promotionTarget, setPromotionTarget] = useState(""); - const [moveHistory, setMoveHistory] = useState([]); - const [hidePieces, setHidePieces] = useState(true); + // Refs for lesson data + const lessonStartFENRef = useRef(""); + const lessonEndFENRef = useRef(""); + const lessonTypeRef = useRef("default"); + const isInitializedRef = useRef(false); + + // Initialize socket with all callbacks + const socket = useChessSocket({ + student: styleType === 'profile' ? cookies.login?.studentId : "guest_student", + mentor: "mentor_" + piece, + role: 'student', + serverUrl: environment.urls.chessServerURL, + mode: 'lesson', + + // Board state changes (PRIMARY SOURCE OF TRUTH) + onBoardStateChange: (newFEN, color) => { + setCurrentFEN(newFEN); + + if (color) { + setBoardOrientation(color); + } - useEffect(() => { - if (propPieceName) setPiece(propPieceName); - }, [propPieceName]); - - function handleMove(fen: string) { - // store current FEN (before the new move) into history - setMoveHistory(prev => [...prev, currentFenRef.current || ""]); - - // update refs/state to the new FEN - currentFenRef.current = fen; - setCurrentFEN(fen); - - // notify parent if UI ready - if (typeof onChessMove === 'function') { - onChessMove(fen); - } - - // process local move logic - processMove(); - - // send to engine (guard socket) - if (socketRef?.current) { - socketRef.current.emit("evaluate-fen", { fen, move: "", level }); - } - } - - function undoMove() { - if (!chessBoardRef.current) return; - - chessBoardRef.current.undo(); - const engineFEN = chessBoardRef.current.getFen(); - setCurrentFEN(engineFEN); - currentFenRef.current = engineFEN; + // Notify parent if callback provided + if (onChessMove) onChessMove(newFEN); - setMoveHistory(prev => prev.slice(0, -1)); - } + // Check lesson completion + checkLessonCompletion(newFEN); + }, - const handleEvaluationComplete = useCallback((data) => { - prevFenRef.current = currentFenRef.current; - currentFenRef.current = data.newFEN; - setCurrentFEN(data.newFEN) - processMove(); + // Move highlighting + onLastMove: (from, to) => { + setHighlightSquares([from, to]); + if (chessBoardRef.current) { + chessBoardRef.current.highlightMove(from, to); + } + }, - if (isReadyRef.current && typeof onChessMove === 'function') { - onChessMove(data.newFEN); - } - }, [onChessMove]); + // Color assignment + onColorAssigned: (color) => { + setBoardOrientation(color); + if (chessBoardRef.current) { + chessBoardRef.current.setOrientation(color); + } + }, + // Reset handler + onReset: () => { + handleReset(); + }, - // FROM CUSTOM HOOKS - const socketRef = useSocketChessEngine(handleEvaluationComplete); + // Error handler + onError: (msg) => { + console.error("Socket error:", msg); + setShowError(true); + }, + }); const { lessonData, @@ -151,60 +147,59 @@ const LessonOverlay: React.FC = ({ moves, processMove, resetLesson, - currentFenRef, - prevFenRef } = useChessGameLogic(); useTimeTracking(piece, cookies); + // Update piece from props + useEffect(() => { + if (propPieceName) setPiece(propPieceName); + }, [propPieceName]); + // Initialize lesson progress useEffect(() => { - // initialize (totals, completed and current lesson) via manager setShowLPopup(true); refreshProgress(initialLessonNum).finally(() => { setShowLPopup(false); }); }, [piece, initialLessonNum, refreshProgress]); - // react to lessonData changes useEffect(() => { - if (!lessonData || !lessonData.startFen) return; - - setHidePieces(false); // show pieces once lesson data is ready + if (!lessonData?.startFen) return; + if (!socket.connected) { + return; + } + setHidePieces(false); setShowLPopup(false); setShowInstruction(true); - // Check if we've reached the end of lessons - if (!lessonData.lessonNum) { + // Check if all lessons completed + if (!lessonData.lessonNum && lessonNum >= totalLessons - 1) { setAllLessonsDone(true); - return + return; } - // Update lesson data & info - lessonStartFENRef.current = lessonData.startFen - lessonEndFENRef.current = lessonData.endFen - + // Update lesson refs + lessonStartFENRef.current = lessonData.startFen; + lessonEndFENRef.current = lessonData.endFen; - // Only initialize current FEN if it hasn't been set yet - if (!currentFenRef.current || currentFenRef.current === "") { - currentFenRef.current = lessonData.startFen - setCurrentFEN(lessonData.startFen) - } + // Set initial position locally + setCurrentFEN(lessonData.startFen); - try { - turnRef.current = getTurnFromFEN(lessonData.startFen); - } catch (err) { - console.warn("Failed to parse turn from FEN", err); - turnRef.current = "white"; - } + // Determine turn from FEN + const turn = getTurnFromFEN(lessonData.startFen); + const color = turn === 'white' ? 'white' : 'black'; + setBoardOrientation(color); - setInfo(lessonData.info || "") - setName(lessonData.name || "") + // Update lesson info + setInfo(lessonData.info || ""); + setName(lessonData.name || ""); - // update lesson type for completion checking (case-insensitive) + // Determine lesson type const infoLower = (lessonData.info || "").toLowerCase(); const nameLower = (lessonData.name || "").toLowerCase(); + if (infoLower.includes("checkmate the opponent") || nameLower.includes("= win")) { lessonTypeRef.current = "checkmate"; } else if (infoLower.includes("get a winning position")) { @@ -219,22 +214,22 @@ const LessonOverlay: React.FC = ({ lessonTypeRef.current = "default"; } - // Update the session's fen only if socket is ready - if (socketRef?.current?.connected) { - socketRef.current.emit("update-fen", { fen: lessonData.startFen }); - } + // Initialize game on server with delay to ensure socket is ready + isInitializedRef.current = false; + const initTimer = setTimeout(() => { + initializeLessonOnServer(); + }, 100); - sendLessonToChessBoard(); + return () => clearTimeout(initTimer); - }, [lessonData, socketRef]); + }, [lessonData, socket.connected]); - // Handle instruction popup with dynamic loading bar and fade-out + // Instruction popup with progress bar useEffect(() => { if (!showInstruction) return; - // Calculate time dynamically based on instruction length const wordCount = info ? info.split(/\s+/).length : 0; - const totalTime = Math.min(20000, 3000 + wordCount * 300); // cap at 20s max + const totalTime = Math.min(20000, 3000 + wordCount * 300); let startTime = Date.now(); @@ -244,193 +239,302 @@ const LessonOverlay: React.FC = ({ setProgress(pct); if (pct >= 100) { clearInterval(interval); - setIsFading(true); // trigger fade-out - setTimeout(() => setShowInstruction(false), 500); // match CSS duration + setIsFading(true); + setTimeout(() => setShowInstruction(false), 500); } }, 100); return () => clearInterval(interval); }, [showInstruction, info]); + const initializeLessonOnServer = useCallback(() => { + if (!lessonData || isInitializedRef.current) return; + if (!socket.connected) { + return; + } + + isInitializedRef.current = true; + + // Determine player color from FEN + const turn = getTurnFromFEN(lessonData.startFen); + const playerColor = turn === 'white' ? 'white' : 'black'; + + // Send lesson state to server + socket.setGameStateWithColor( + lessonData.startFen, + playerColor, + lessonData.info + ); + + }, [lessonData, socket]); + + const checkLessonCompletion = useCallback((fen: string) => { + if (!lessonEndFENRef.current) return; - // send lesson to chess client to update UI - const sendLessonToChessBoard = () => { - if (!lessonData) return; - if (typeof onChessMove === 'function') { - onChessMove(currentFenRef.current || lessonStartFENRef.current); + const lessonType = lessonTypeRef.current; + + // Exact FEN match for position-based lessons + if (lessonType === "position" || lessonType === "equalize") { + if (fen === lessonEndFENRef.current) { + setShowVPopup(true); + return; + } } - }; - // Navigate to previous lesson + // For other types, check game state + const Chess = require('chess.js').Chess; + const game = new Chess(fen); + + if (lessonType === "checkmate" && game.isCheckmate()) { + setShowVPopup(true); + } else if (lessonType === "draw" && game.isDraw()) { + setShowVPopup(true); + } else if (lessonType === "promote") { + // Check if a new queen was added (pawn promoted) + const startQueens = (lessonStartFENRef.current.match(/[Qq]/g) || []).length; + const currentQueens = (fen.match(/[Qq]/g) || []).length; + + if (currentQueens > startQueens) { + setShowVPopup(true); + } + } + + }, []); + + function getTurnFromFEN(fen: string): 'white' | 'black' { + if (!fen || typeof fen !== 'string') { + return 'white'; + } + const parts = fen.split(' '); + return parts[1] === 'w' ? 'white' : 'black'; + } + + const handleMove = useCallback((move: Move) => { + try { + // Process move locally + processMove(); + + // Add to history + setMoveHistory(prev => [...prev, `${move.from}-${move.to}`]); + + // Send to server + socket.sendMove(move); + socket.sendLastMove(move.from, move.to); + + } catch (error) { + console.error("Error handling move:", error); + setShowError(true); + } + }, [socket, processMove]); + + const handleInvalidMove = useCallback(() => { + // Show a brief error message instead of breaking + const errorTimeout = setTimeout(() => { + // Could add a toast notification here + }, 2000); + return () => clearTimeout(errorTimeout); + }, []); + + const undoMove = useCallback(() => { + if (!chessBoardRef.current) return; + if (moveHistory.length === 0) return; + + // Undo locally + chessBoardRef.current.undo(); + + // Update history + setMoveHistory(prev => prev.slice(0, -1)); + + // Send to server + socket.undo(); + + }, [socket, moveHistory.length]); + + const handleReset = useCallback(() => { + + if (chessBoardRef.current) { + chessBoardRef.current.reset(); + } + + // Reset to lesson start position + const startFen = lessonStartFENRef.current; + setCurrentFEN(startFen); + setMoveHistory([]); + setHighlightSquares([]); + + // Reset on server + socket.setGameState(startFen); + + // Notify parent + if (onChessReset) onChessReset(startFen); + + // Reset game logic + resetLesson(startFen); + + }, [socket, onChessReset, resetLesson]); + const previousLesson = async () => { + isInitializedRef.current = false; await managerPrevLesson(); resetLesson(null); - } + setMoveHistory([]); + setHighlightSquares([]); + }; - // Navigate to next lesson const nextLesson = async () => { + isInitializedRef.current = false; await managerNextLesson(); - // clear move tracker resetLesson(null); - }; - - // reset board to play again - function handleReset() { - // Update chessboard through callback - if (typeof onChessReset === "function") { - onChessReset(lessonStartFENRef.current); // reset ChessClient FEN - } - - // reset move tracker and clear local history - resetLesson(lessonStartFENRef.current); setMoveHistory([]); - // also reset current fen ref/state to lesson start - currentFenRef.current = lessonStartFENRef.current; - setCurrentFEN(lessonStartFENRef.current); - } - + setHighlightSquares([]); + }; - // user agrees to complete lesson const handleVPopup = async () => { - setShowVPopup(false); // disable popup + setShowVPopup(false); setShowXPopup(false); await updateCompletion(); - // clean move tracker - resetLesson(lessonStartFENRef.current) - } + // Reset for next attempt + resetLesson(lessonStartFENRef.current); + setMoveHistory([]); + }; - // user agrees to restart lesson after failure const handleXPopup = () => { setShowXPopup(false); - handleReset() - } - - function getTurnFromFEN(fen) { - if (!fen || typeof fen !== 'string') { - throw new Error('Invalid FEN string'); - } - - const parts = fen.split(' '); - const turn = parts[1]; - - if (turn === 'w') return 'white'; - if (turn === 'b') return 'black'; - - throw new Error('Could not determine turn from FEN'); - } + handleReset(); + }; - function promotePawn(position: string, piece: string) { + const promotePawn = (to: string, piece: string) => { setIsPromoting(false); - if (chessBoardRef.current && typeof chessBoardRef.current.handlePromotion === 'function') { + if (chessBoardRef.current) { chessBoardRef.current.handlePromotion(promotionSource, promotionTarget, piece.toLowerCase()); } - processMove(); // keep move tracking logic - } + const move: Move = { + from: promotionSource, + to: promotionTarget, + promotion: piece.toLowerCase() + }; + + socket.sendMove(move); + processMove(); + }; return (
- - + +
-
{ - if (navigateFunc) navigateFunc(); - else navigate("/lessons-selection"); - }}>Switch Lesson +
{ + if (navigateFunc) navigateFunc(); + else navigate("/lessons-selection"); + }} + > + Switch Lesson
+
{/* Lesson info */}

{piece}

-
-

{lessonNum + 1} / {totalLessons}: {name}

-

{info}

+

+ {lessonNum + 1} / {totalLessons}: {name} +

+ +

{info}

- {/* deactivate previous button, if there are no lessons before it*/} + {/* Navigation buttons */}
- { - lessonNum <= 0 ? ( - - ) : ( - - - ) - } - - {/* deactivate next button, if it goes beyond first uncompleted, or beyond last available lesson */} + {lessonNum <= 0 ? ( + + ) : ( + + )} + {((lessonNum >= completedNum) || (lessonNum >= totalLessons - 1)) ? ( ) : ( - - ) - } + )}
- {styleType !== 'profile' && ()} + + {/* Move tracker */} + {styleType !== 'profile' && }
+ + {/* Chessboard */}
- {/* connection error popup */} + + {/* POPUPS */} + + {/* Connection error */} {ShowError && (
- - - + + +

Failed to load content

@@ -439,14 +543,14 @@ const LessonOverlay: React.FC = ({
)} - {/* lesson completed popup */} + {/* Lesson completed */} {showVPopup && (
- - + +

Lesson completed

@@ -456,35 +560,15 @@ const LessonOverlay: React.FC = ({
)} - {/* lesson not done yet popup */} + {/* Lesson failed */} {showXPopup && !showVPopup && (
- - - + + +

Lesson failed

@@ -494,21 +578,13 @@ const LessonOverlay: React.FC = ({
)} - {/* loading to wait for lesson fetching */} + {/* Loading */} {showLPopup && (
- +

Loading lesson...

@@ -517,39 +593,39 @@ const LessonOverlay: React.FC = ({
)} - {/* have users read instructions first */} + {/* Instructions */} {showInstruction && (

Lesson Instructions

{info}

- {/* Loading bar at the bottom */}
-
+
)} + + {/* All lessons done */} {allLessonsDone && (

🎉 Congratulations!

-

- You have completed all lessons for this scenario. -

- +

You have completed all lessons for this scenario.

+
)} - {isPromoting ? : null /* Show promotion popup if needed */} + {/* Promotion popup */} + {isPromoting && ( + + )}
); }; -export default LessonOverlay; \ No newline at end of file +export default LessonOverlay; diff --git a/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.test.ts b/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.test.ts new file mode 100644 index 00000000..e69de29b diff --git a/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.ts b/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.ts new file mode 100644 index 00000000..25eb82d6 --- /dev/null +++ b/react-ystemandchess/src/features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket.ts @@ -0,0 +1,590 @@ +import { useState, useEffect, useRef, useCallback } from "react"; +import { io, Socket } from "socket.io-client"; +import { Chess } from "chess.js"; +import { Move, BoardState, MousePosition, GameConfig, GameMode, PlayerColor } from "../../../../../core/types/chess"; + +interface UseChessSocketOptions { + student: string; + mentor?: string; + role?: "mentor" | "student" | "host" | "guest"; + serverUrl: string; + mode?: GameMode; + trackMouse?: boolean; + + // Event callbacks + onBoardStateChange?: (fen: string, color?: PlayerColor) => void; + onMove?: (data: { fen: string; move?: Move }) => void; + onHighlight?: (from: string, to: string) => void; + onLastMove?: (from: string, to: string) => void; + onMouseMove?: (position: MousePosition) => void; + onPieceDrag?: (piece: string) => void; + onPieceDrop?: () => void; + onGreySquare?: (square: string) => void; + onRemoveGrey?: () => void; + onPromotion?: (from: string, to: string, piece: string) => void; + onReset?: () => void; + onError?: (msg: string) => void; + onMessage?: (msg: string) => void; + onRoleAssigned?: (role: "host" | "guest") => void; + onColorAssigned?: (color: PlayerColor) => void; +} + +export const useChessSocket = ({ + student, + mentor = "", + role = "student", + serverUrl, + mode = "regular", + trackMouse = false, + onBoardStateChange, + onMove, + onHighlight, + onLastMove, + onMouseMove, + onPieceDrag, + onPieceDrop, + onGreySquare, + onRemoveGrey, + onReset, + onError, + onMessage, + onRoleAssigned, + onColorAssigned, +}: UseChessSocketOptions) => { + // ======== state ======== + const [fen, setFen] = useState(""); + const [connected, setConnected] = useState(false); + const [playerColor, setPlayerColor] = useState(null); + const [assignedRole, setAssignedRole] = useState<"host" | "guest" | null>(null); + + // ======== refs ======== + const socketRef = useRef(null); + const gameStateRef = useRef(new Chess()); + const currentFenRef = useRef(""); + const expectedMoveRef = useRef(null); + const isPuzzleRef = useRef(mode === "puzzle"); + const nextPuzzleMoveRef = useRef([]); + const mouseTrackingRef = useRef(false); + const highlightFromRef = useRef(""); + const highlightToRef = useRef(""); + + // Store mentor/student/role in refs so they can be updated + const mentorRef = useRef(mentor); + const studentRef = useRef(student); + const roleRef = useRef<"mentor" | "student" | "host" | "guest">(role); + + // ======== connect / listeners ======== + useEffect(() => { + const socket = io(serverUrl, { + transports: ["websocket"], + reconnection: true, + reconnectionDelay: 1000, + reconnectionAttempts: 5, + }); + + socketRef.current = socket; + + // on connect + socket.on("connect", () => { + console.log("Connected to chess server - socket id:", socket.id); + setConnected(true); + }); + + socket.on("disconnect", (reason: any) => { + console.log("Disconnected from chess server", reason); + setConnected(false); + }); + + socket.on("connect_error", (error: any) => { + console.error("Connection error:", error); + setConnected(false); + if (onError) onError("Connection failed"); + }); + + // host / guest assignment + socket.on("host", () => { + console.log("Assigned as HOST"); + setAssignedRole("host"); + isPuzzleRef.current = true; + if (onRoleAssigned) onRoleAssigned("host"); + }); + + socket.on("guest", () => { + console.log("Assigned as GUEST"); + setAssignedRole("guest"); + isPuzzleRef.current = true; + if (onRoleAssigned) onRoleAssigned("guest"); + }); + + // boardstate - primary source of truth + socket.on("boardstate", (msg: string) => { + try { + const parsed: BoardState = JSON.parse(msg); + const newFen = (parsed as any).boardState || (parsed as any).fen; + + console.log("Board state received:", newFen); + + // Puzzle validation + if (isPuzzleRef.current && nextPuzzleMoveRef.current.length > 0) { + const expectedMove = nextPuzzleMoveRef.current[0]; + const source = expectedMove.from; + const target = expectedMove.to; + + const testState = new Chess(currentFenRef.current); + const testMove = testState.move({ + from: source, + to: target, + promotion: expectedMove.promotion || "q", + }); + + // Wrong puzzle move -> reset to current position + if (!testMove || testState.fen() !== newFen) { + console.log("Wrong puzzle move, resetting"); + const data = { state: currentFenRef.current }; + socketRef.current?.emit("setstate", JSON.stringify(data)); + + // Highlight the expected move + if (highlightFromRef.current && highlightToRef.current) { + if (onLastMove) { + onLastMove(highlightFromRef.current, highlightToRef.current); + } + } + return; + } else if (testMove) { + // Correct puzzle move + console.log("Correct puzzle move"); + nextPuzzleMoveRef.current = []; + + // Notify parent of the move + if (onMove) { + onMove({ + fen: newFen, + move: { from: source, to: target, promotion: expectedMove.promotion }, + }); + } + } + } + + // Update game state ref + try { + gameStateRef.current.load(newFen); + } catch (err) { + console.error("Failed to load FEN into game state:", err); + } + + // Update refs/state + setFen(newFen); + currentFenRef.current = newFen; + + // Color assignment + if ((parsed as any).color) { + const color = (parsed as any).color as PlayerColor; + setPlayerColor(color); + if (onColorAssigned) onColorAssigned(color); + } + + // Notify parent + if (onBoardStateChange) { + onBoardStateChange(newFen, (parsed as any).color); + } + + if (onMove && !isPuzzleRef.current) { + onMove({ fen: newFen, move: (parsed as any).move }); + } + } catch (err) { + console.error("Invalid boardstate:", err); + } + }); + + // color (explicit) + socket.on("color", (msg: string) => { + try { + const parsed = JSON.parse(msg); + const color = parsed.color as PlayerColor; + console.log("Color assigned:", color); + setPlayerColor(color); + if (onColorAssigned) onColorAssigned(color); + } catch (err) { + console.error("Invalid color message:", err); + } + }); + + // last move highlight + socket.on("lastmove", (msg: string) => { + try { + const parsed = JSON.parse(msg); + + // Check for puzzle mode and skip if no moves + if (!parsed.from && !parsed.to && nextPuzzleMoveRef.current.length > 0) { + return; + } + + if (parsed.from && parsed.to) { + console.log("Last move highlight:", parsed.from, "→", parsed.to); + if (onLastMove) onLastMove(parsed.from, parsed.to); + } + } catch (err) { + console.error("Invalid lastmove:", err); + } + }); + + // highlight arrows + socket.on("highlight", (msg: string) => { + try { + const parsed = JSON.parse(msg); + console.log("Highlight:", parsed.from, "→", parsed.to); + if (onHighlight) onHighlight(parsed.from, parsed.to); + } catch (err) { + console.error("Invalid highlight:", err); + } + }); + + // piece drag/drop from remote + socket.on("piecedrag", (msg: string) => { + try { + const parsed = JSON.parse(msg); + console.log("Piece drag:", parsed.piece); + if (onPieceDrag) onPieceDrag(parsed.piece); + } catch (err) { + console.error("Invalid piecedrag:", err); + } + }); + + socket.on("piecedrop", () => { + console.log("Piece drop"); + if (onPieceDrop) onPieceDrop(); + }); + + // grey squares + socket.on("addgrey", (msg: string) => { + try { + const parsed = JSON.parse(msg); + if (onGreySquare) onGreySquare(parsed.to); + } catch (err) { + console.error("Invalid addgrey:", err); + } + }); + + socket.on("removegrey", () => { + if (onRemoveGrey) onRemoveGrey(); + }); + + // mouse move with viewport calculations + socket.on("mousexy", (msg: string) => { + try { + const parsed: MousePosition = JSON.parse(msg); + + if (parsed.x && parsed.y) { + const viewportWidth = window.innerWidth; + const viewportHeight = window.innerHeight; + + let adjustedX: number; + let adjustedY: number; + + if (isPuzzleRef.current) { + adjustedX = parsed.x - 28; + adjustedY = parsed.y - 28; + } else { + adjustedX = -1 * parsed.x + viewportWidth - 28; + adjustedY = -1 * parsed.y + viewportHeight - 28; + } + + if (onMouseMove) onMouseMove({ x: adjustedX, y: adjustedY }); + } + } catch (err) { + console.error("Invalid mousexy:", err); + } + }); + + // reset + socket.on("reset", () => { + console.log("Game reset"); + setFen(""); + currentFenRef.current = ""; + expectedMoveRef.current = null; + gameStateRef.current = new Chess(); + if (onReset) onReset(); + }); + + // message + socket.on("message", (msg: string) => { + try { + const parsed = JSON.parse(msg); + if (onMessage) onMessage(parsed.message); + } catch (err) { + if (onMessage) onMessage(msg); + } + }); + + // gameerror + socket.on("gameerror", (msg: string) => { + console.error("Game error:", msg); + if (onError) onError(msg); + }); + + // cleanup when component unmounts + return () => { + try { + socket.disconnect(); + } catch (err) { + /* ignore */ + } + socketRef.current = null; + setConnected(false); + stopMouseTracking(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [serverUrl]); + + // ======== Outgoing commands ======== + + const startNewGame = useCallback(() => { + const data: GameConfig = { + mentor: mentorRef.current, + student: studentRef.current, + role: roleRef.current + }; + console.log("Starting new game:", data); + socketRef.current?.emit("newgame", JSON.stringify(data)); + }, []); + + const startNewPuzzle = useCallback(() => { + const data: GameConfig = { + mentor: mentorRef.current, + student: studentRef.current, + role: roleRef.current + }; + console.log("Starting new puzzle:", data); + socketRef.current?.emit("newPuzzle", JSON.stringify(data)); + }, []); + + const setGameState = useCallback((fenToSet: string) => { + const data = { state: fenToSet }; + console.log("Setting game state:", fenToSet); + socketRef.current?.emit("setstate", JSON.stringify(data)); + }, []); + + const setGameStateWithColor = useCallback( + (fenToSet: string, color: PlayerColor, hints?: string) => { + const data = { state: fenToSet, color, hints: hints || "" }; + console.log("Setting game state with color:", data); + socketRef.current?.emit("setstateColor", JSON.stringify(data)); + }, + [] + ); + + const sendMove = useCallback((move: Move) => { + const data = { + mentor: mentorRef.current, + student: studentRef.current, + role: roleRef.current, + from: move.from, + to: move.to, + promotion: move.promotion, + }; + console.log("Sending move:", data); + socketRef.current?.emit("move", JSON.stringify(data)); + }, []); + + const sendLastMove = useCallback((from: string, to: string) => { + const data = { + from, + to, + mentor: mentorRef.current, + student: studentRef.current + }; + // Store for puzzle validation + highlightFromRef.current = from; + highlightToRef.current = to; + socketRef.current?.emit("lastmove", JSON.stringify(data)); + }, []); + + const sendHighlight = useCallback((from: string, to: string) => { + const data = { + from, + to, + mentor: mentorRef.current, + student: studentRef.current + }; + socketRef.current?.emit("highlight", JSON.stringify(data)); + }, []); + + const sendMousePosition = useCallback((x: number, y: number) => { + const data = { + x, + y, + mentor: mentorRef.current, + student: studentRef.current + }; + socketRef.current?.emit("mousexy", JSON.stringify(data)); + }, []); + + const sendPieceDrag = useCallback((piece: string) => { + const data = { + mentor: mentorRef.current, + student: studentRef.current, + piece + }; + socketRef.current?.emit("piecedrag", JSON.stringify(data)); + }, []); + + const sendPieceDrop = useCallback(() => { + const data = { + mentor: mentorRef.current, + student: studentRef.current + }; + socketRef.current?.emit("piecedrop", JSON.stringify(data)); + }, []); + + const sendGreySquare = useCallback((square: string) => { + const data = { + mentor: mentorRef.current, + student: studentRef.current, + to: square + }; + socketRef.current?.emit("addgrey", JSON.stringify(data)); + }, []); + + const sendRemoveGrey = useCallback(() => { + const data = { + mentor: mentorRef.current, + student: studentRef.current + }; + socketRef.current?.emit("removegrey", JSON.stringify(data)); + }, []); + + const undo = useCallback(() => { + const data = { + mentor: mentorRef.current, + student: studentRef.current, + role: roleRef.current + }; + console.log("Sending undo"); + socketRef.current?.emit("undo", JSON.stringify(data)); + }, []); + + const endGame = useCallback(() => { + const data = { + mentor: mentorRef.current, + student: studentRef.current, + role: roleRef.current + }; + console.log("Ending game"); + socketRef.current?.emit("endgame", JSON.stringify(data)); + }, []); + + const sendMessage = useCallback((message: string) => { + const data = { message }; + socketRef.current?.emit("message", JSON.stringify(data)); + }, []); + + const setExpectedMove = useCallback((move: Move | null) => { + expectedMoveRef.current = move; + }, []); + + const setPuzzleMoves = useCallback((moves: Move[]) => { + nextPuzzleMoveRef.current = moves; + isPuzzleRef.current = true; + }, []); + + // ======== mouse tracking helpers ======== + const _onMouseMove = useCallback( + (e: MouseEvent) => { + const x = e.clientX; + const y = e.clientY; + sendMousePosition(x, y); + }, + [sendMousePosition] + ); + + const startMouseTracking = useCallback(() => { + if (mouseTrackingRef.current) return; + mouseTrackingRef.current = true; + document.addEventListener("mousemove", _onMouseMove); + }, [_onMouseMove]); + + const stopMouseTracking = useCallback(() => { + if (!mouseTrackingRef.current) return; + mouseTrackingRef.current = false; + document.removeEventListener("mousemove", _onMouseMove); + }, [_onMouseMove]); + + // auto-start if requested + useEffect(() => { + if (trackMouse && connected) startMouseTracking(); + return () => { + if (trackMouse) stopMouseTracking(); + }; + }, [trackMouse, connected, startMouseTracking, stopMouseTracking]); + + // Update refs when props change + useEffect(() => { + mentorRef.current = mentor; + studentRef.current = student; + roleRef.current = role; + }, [mentor, student, role]); + + // allow runtime change of mentor/student/role + const setUserInfo = useCallback( + (info: { + mentor?: string; + student?: string; + role?: "mentor" | "student" | "host" | "guest" + }) => { + if (info.mentor) mentorRef.current = info.mentor; + if (info.student) studentRef.current = info.student; + if (info.role) roleRef.current = info.role; + }, + [] + ); + + // ======== Public API ======== + return { + // State + fen, + connected, + playerColor, + assignedRole, + + // Game control + startNewGame, + startNewPuzzle, + endGame, + + // Move operations + sendMove, + undo, + setExpectedMove, + setPuzzleMoves, + + // State management + setGameState, + setGameStateWithColor, + + // Visual feedback + sendHighlight, + sendLastMove, + sendGreySquare, + sendRemoveGrey, + + // Piece interaction + sendPieceDrag, + sendPieceDrop, + + // Communication + sendMousePosition, + sendMessage, + + // Mouse tracking helpers + startMouseTracking, + stopMouseTracking, + + // Registration / user info + setUserInfo, + + // Refs for direct access + socketRef, + currentFenRef, + gameStateRef, + }; +}; From 61a87c64d19fd02c59d8e0bd9a3dbe066071677f Mon Sep 17 00:00:00 2001 From: F-Hejazi <60328249+F-Hejazi@users.noreply.github.com> Date: Fri, 5 Dec 2025 07:45:30 +0100 Subject: [PATCH 02/28] chore: delete chess client --- chessClient/.gitignore | 0 chessClient/Dockerfile | 5 - chessClient/README.md | 1 - chessClient/archive/both.html | 144 - chessClient/archive/parent.html | 314 - chessClient/archive/rapid_render.json | 22 - chessClient/css/chessboard-1.0.0.css | 77 - chessClient/css/chessboard-1.0.0.min.css | 44 - chessClient/default.conf | 9 - chessClient/docs/CHANGELOG.md | 36 - chessClient/docs/LICENSE.md | 20 - chessClient/docs/README_MOBILE_RESPONSIVE.md | 114 - chessClient/html/index.html | 226 - chessClient/img/chesspieces/wikipedia/bB.png | Bin 1405 -> 0 bytes chessClient/img/chesspieces/wikipedia/bK.png | Bin 3009 -> 0 bytes chessClient/img/chesspieces/wikipedia/bN.png | Bin 1875 -> 0 bytes chessClient/img/chesspieces/wikipedia/bP.png | Bin 777 -> 0 bytes chessClient/img/chesspieces/wikipedia/bQ.png | Bin 2648 -> 0 bytes chessClient/img/chesspieces/wikipedia/bR.png | Bin 748 -> 0 bytes chessClient/img/chesspieces/wikipedia/dot.png | Bin 594 -> 0 bytes .../img/chesspieces/wikipedia/star.jpg | Bin 533762 -> 0 bytes chessClient/img/chesspieces/wikipedia/wB.png | Bin 2374 -> 0 bytes chessClient/img/chesspieces/wikipedia/wK.png | Bin 2823 -> 0 bytes chessClient/img/chesspieces/wikipedia/wN.png | Bin 2388 -> 0 bytes chessClient/img/chesspieces/wikipedia/wP.png | Bin 1571 -> 0 bytes chessClient/img/chesspieces/wikipedia/wQ.png | Bin 3812 -> 0 bytes chessClient/img/chesspieces/wikipedia/wR.png | Bin 1097 -> 0 bytes chessClient/img/cursor.png | Bin 2192 -> 0 bytes chessClient/index.html | 130 - chessClient/index.js | 1118 ---- chessClient/js/chessboard-1.0.0.js | 1916 ------- chessClient/js/chessboard-1.0.0.min.js | 831 --- chessClient/package-lock.json | 5106 ----------------- chessClient/package.json | 42 - 34 files changed, 10155 deletions(-) delete mode 100644 chessClient/.gitignore delete mode 100644 chessClient/Dockerfile delete mode 100644 chessClient/README.md delete mode 100644 chessClient/archive/both.html delete mode 100644 chessClient/archive/parent.html delete mode 100644 chessClient/archive/rapid_render.json delete mode 100644 chessClient/css/chessboard-1.0.0.css delete mode 100644 chessClient/css/chessboard-1.0.0.min.css delete mode 100644 chessClient/default.conf delete mode 100644 chessClient/docs/CHANGELOG.md delete mode 100644 chessClient/docs/LICENSE.md delete mode 100644 chessClient/docs/README_MOBILE_RESPONSIVE.md delete mode 100644 chessClient/html/index.html delete mode 100644 chessClient/img/chesspieces/wikipedia/bB.png delete mode 100644 chessClient/img/chesspieces/wikipedia/bK.png delete mode 100644 chessClient/img/chesspieces/wikipedia/bN.png delete mode 100644 chessClient/img/chesspieces/wikipedia/bP.png delete mode 100644 chessClient/img/chesspieces/wikipedia/bQ.png delete mode 100644 chessClient/img/chesspieces/wikipedia/bR.png delete mode 100644 chessClient/img/chesspieces/wikipedia/dot.png delete mode 100644 chessClient/img/chesspieces/wikipedia/star.jpg delete mode 100644 chessClient/img/chesspieces/wikipedia/wB.png delete mode 100644 chessClient/img/chesspieces/wikipedia/wK.png delete mode 100644 chessClient/img/chesspieces/wikipedia/wN.png delete mode 100644 chessClient/img/chesspieces/wikipedia/wP.png delete mode 100644 chessClient/img/chesspieces/wikipedia/wQ.png delete mode 100644 chessClient/img/chesspieces/wikipedia/wR.png delete mode 100644 chessClient/img/cursor.png delete mode 100644 chessClient/index.html delete mode 100644 chessClient/index.js delete mode 100644 chessClient/js/chessboard-1.0.0.js delete mode 100644 chessClient/js/chessboard-1.0.0.min.js delete mode 100644 chessClient/package-lock.json delete mode 100644 chessClient/package.json diff --git a/chessClient/.gitignore b/chessClient/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/chessClient/Dockerfile b/chessClient/Dockerfile deleted file mode 100644 index cab8ae8c..00000000 --- a/chessClient/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM nginx - -COPY ./ /usr/share/nginx/html - -EXPOSE 4200 \ No newline at end of file diff --git a/chessClient/README.md b/chessClient/README.md deleted file mode 100644 index f683d041..00000000 --- a/chessClient/README.md +++ /dev/null @@ -1 +0,0 @@ -This needs to be run in an apache server. diff --git a/chessClient/archive/both.html b/chessClient/archive/both.html deleted file mode 100644 index 0a55f2b9..00000000 --- a/chessClient/archive/both.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - Iframe Example - - - - - - -
-
- -
-

Mentor

- -
- - -
-

User

- -
-
-
- - - - - - - diff --git a/chessClient/archive/parent.html b/chessClient/archive/parent.html deleted file mode 100644 index 306857c5..00000000 --- a/chessClient/archive/parent.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - Parent Window - - - - - - - - -

Parent Window

-

This is the parent page. It will receive messages from the embedded child app (JavaScript).

- - - - - -

- -
- -
- -
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
- - -
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
- - - - - - - - diff --git a/chessClient/archive/rapid_render.json b/chessClient/archive/rapid_render.json deleted file mode 100644 index da18f957..00000000 --- a/chessClient/archive/rapid_render.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": "monaco-parts-splash", - "colorInfo": { - "foreground": "#cccccc", - "editorBackground": "#1e1e1e", - "titleBarBackground": "#3c3c3c", - "activityBarBackground": "#333333", - "sideBarBackground": "#252526", - "statusBarBackground": "#007acc", - "statusBarNoFolderBackground": "#68217a" - }, - "layoutInfo": { - "sideBarSide": "left", - "editorPartMinWidth": 220, - "titleBarHeight": 0, - "activityBarWidth": 48, - "sideBarWidth": 256, - "statusBarHeight": 22, - "windowBorder": false - }, - "baseTheme": "vs-dark" -} diff --git a/chessClient/css/chessboard-1.0.0.css b/chessClient/css/chessboard-1.0.0.css deleted file mode 100644 index 702feb01..00000000 --- a/chessClient/css/chessboard-1.0.0.css +++ /dev/null @@ -1,77 +0,0 @@ -/*! chessboard.js v1.0.0 | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ - -.clearfix-7da63 { - clear: both; -} - -.board-b72b1 { - border: 2px solid #404040; - box-sizing: content-box; -} - -.square-55d63 { - float: left; - position: relative; - - /* disable any native browser highlighting */ - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.white-1e1d7 { - background-color: #f0d9b5; - color: #b58863; -} - -.black-3c85d { - background-color: #b58863; - color: #f0d9b5; -} - -.highlight1-32417, -.highlight2-9c5d2 { - box-shadow: inset 0 0 3px 3px yellow; -} - -.notation-322f9 { - cursor: default; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 20px; - position: absolute; - font-weight: bold; -} - -.alpha-d2270 { - bottom: 1px; - right: 3px; -} - -.numeric-fc462 { - top: 2px; - left: 2px; -} - -.hightlight-red { - color: red; -} - -/* Mobile responsive enhancements */ -@media screen and (max-width: 768px) { - .board-b72b1 { - border-width: 1px; - } - - .notation-322f9 { - font-size: 14px; - } -} - -@media screen and (max-width: 480px) { - .notation-322f9 { - font-size: 12px; - } -} diff --git a/chessClient/css/chessboard-1.0.0.min.css b/chessClient/css/chessboard-1.0.0.min.css deleted file mode 100644 index 9e5e56e2..00000000 --- a/chessClient/css/chessboard-1.0.0.min.css +++ /dev/null @@ -1,44 +0,0 @@ -/*! chessboard.js v1.0.0 | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ -.clearfix-7da63 { - clear: both; -} -.board-b72b1 { - border: 2px solid #404040; - box-sizing: content-box; -} -.square-55d63 { - float: left; - position: relative; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.white-1e1d7 { - background-color: #f0d9b5; - color: #b58863; -} -.black-3c85d { - background-color: #b58863; - color: #f0d9b5; -} -.highlight1-32417, -.highlight2-9c5d2 { - box-shadow: inset 0 0 3px 3px #ff0; -} -.notation-322f9 { - cursor: default; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - position: absolute; -} -.alpha-d2270 { - bottom: 1px; - right: 3px; -} -.numeric-fc462 { - top: 2px; - left: 2px; -} diff --git a/chessClient/default.conf b/chessClient/default.conf deleted file mode 100644 index 5bba4e6c..00000000 --- a/chessClient/default.conf +++ /dev/null @@ -1,9 +0,0 @@ -server { - listen 80 default_server; - listen [::]:80 default_server; - root /usr/share/nginx/html; - index index.html; - location / { - try_files $uri $uri/ =404; - } -} diff --git a/chessClient/docs/CHANGELOG.md b/chessClient/docs/CHANGELOG.md deleted file mode 100644 index 62daf4f0..00000000 --- a/chessClient/docs/CHANGELOG.md +++ /dev/null @@ -1,36 +0,0 @@ -# chessboard.js Change Log - -All notable changes to this project will be documented in this file. - -## [1.0.0] - 2019-06-11 - -- Orientation methods now return current orientation. [Issue #64] -- Drop support for IE8 -- Do not check for `window.JSON` (Error #1004) -- Rename `ChessBoard` to `Chessboard` (`ChessBoard` is still supported, however) -- id query selectors are now supported as the first argument to `Chessboard()` -- Remove Error #1002 -- Format code according to [StandardJS] -- Bump minimum jQuery version to 1.8.3 -- Throttle piece drag functions - -## [0.3.0] - 2013-08-10 - -- Added `appearSpeed` animation config property -- Added `onSnapbackEnd` event -- Added `onMoveEnd` event - -## [0.2.0] - 2013-08-05 - -- Added `onMouseoverSquare` and `onMouseoutSquare` events -- Added `onSnapEnd` event -- Added square code as CSS class on the squares -- Added [chess.js] integration examples - -## [0.1.0] - 2013-05-21 - -- Initial release - -[chess.js]: https://github.com/jhlywa/chess.js -[Issue #64]: https://github.com/oakmac/chessboardjs/issues/64 -[StandardJS]: https://standardjs.com/ diff --git a/chessClient/docs/LICENSE.md b/chessClient/docs/LICENSE.md deleted file mode 100644 index 20b7d615..00000000 --- a/chessClient/docs/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 2019 Chris Oakman - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/chessClient/docs/README_MOBILE_RESPONSIVE.md b/chessClient/docs/README_MOBILE_RESPONSIVE.md deleted file mode 100644 index a1449512..00000000 --- a/chessClient/docs/README_MOBILE_RESPONSIVE.md +++ /dev/null @@ -1,114 +0,0 @@ -# Mobile Responsive Chess Client - -## Overview -The static chess client webpages have been enhanced with comprehensive mobile responsive design to provide an optimal user experience across all device sizes. - -## Files Modified - -### 1. `index.html` - Main Chess Board -- Added proper HTML5 doctype and meta viewport tag -- Implemented responsive CSS with mobile-first approach -- Chessboard now scales appropriately on mobile devices (95vw on tablets, 98vw on phones) -- Enhanced cursor element for better mobile interaction -- Added centering and proper spacing for mobile layouts - -### 2. `parent.html` - Parent Window with Controls -- Complete mobile responsive redesign -- Bootstrap grid system optimized for mobile stacking -- Form controls enhanced with better touch targets -- Responsive chessboard iframe sizing -- Improved button layout for mobile interaction -- Added iOS-specific fixes (font-size 16px to prevent zoom) -- Landscape orientation support - -### 3. `both.html` - Dual View Layout -- Responsive dual-pane layout -- Mobile: Stacks vertically (50vh each pane) -- Tablet: Maintains side-by-side layout -- Landscape mobile: Reverts to horizontal layout -- Enhanced visual styling with gradients and shadows -- Proper iframe scaling and minimum heights - -### 4. `css/chessboard-1.0.0.css` - Chessboard Styling -- Added mobile-specific breakpoints -- Responsive board sizing using viewport units -- Optimized touch targets for mobile interaction -- Landscape orientation handling -- Improved notation font sizes for smaller screens - -### 5. `html/index.html` - HTML Subdirectory Version -- Added HTML5 doctype and responsive meta tags -- Mobile-first CSS approach -- Proper viewport scaling for chessboard - -## Responsive Breakpoints - -### Desktop (Default) -- Full-size chessboard and controls -- Standard Bootstrap grid layout - -### Tablet (≤768px) -- Chessboard scales to 95vw -- Form elements stack appropriately -- Buttons maintain full width for better touch interaction - -### Mobile (≤480px) -- Chessboard scales to 98vw with maximum 350px -- Optimized padding and margins -- Smaller font sizes for better fit -- Enhanced touch targets - -### Landscape Mobile -- Special handling for landscape orientation -- Maintains usability in both orientations - -## Features Added - -1. **Touch-Friendly Design** - - Larger touch targets for mobile interaction - - Proper touch-action CSS properties - - iOS-specific optimizations - -2. **Flexible Layouts** - - Viewport-based sizing (vw/vh units) - - Flexbox layouts for better responsive behavior - - Bootstrap grid enhancements - -3. **Cross-Device Compatibility** - - Works on phones, tablets, and desktops - - Handles both portrait and landscape orientations - - Maintains functionality across all screen sizes - -4. **Visual Enhancements** - - Modern gradient backgrounds - - Subtle shadows and rounded corners - - Improved typography scaling - -## Testing - -To test the responsive design: - -1. Start the HTTP server: `python3 -m http.server 8080` -2. Visit the following URLs: - - `http://localhost:8080/index.html` - Main chessboard - - `http://localhost:8080/parent.html` - Parent window with controls - - `http://localhost:8080/both.html` - Dual view layout - - `http://localhost:8080/html/index.html` - HTML subdirectory version - -3. Test on various screen sizes using browser developer tools -4. Test on actual mobile devices for touch interaction - -## Browser Support - -- Chrome/Safari/Firefox on desktop -- Mobile Safari (iOS) -- Chrome Mobile (Android) -- Responsive design works across all modern browsers - -## Next Steps - -The static webpages are now fully mobile responsive. Consider: -1. Testing on actual mobile devices -2. Performance optimization for slower mobile connections -3. Adding PWA features for mobile app-like experience -4. Implementing touch gestures for enhanced mobile interaction diff --git a/chessClient/html/index.html b/chessClient/html/index.html deleted file mode 100644 index 42a4fd00..00000000 --- a/chessClient/html/index.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - Chess Game - HTML Version - - - - - - -
- - diff --git a/chessClient/img/chesspieces/wikipedia/bB.png b/chessClient/img/chesspieces/wikipedia/bB.png deleted file mode 100644 index be3007dd0cdc7662268e103458b30a035da1cebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1405 zcmV-@1%mpCP);OAg&;29>pXtLFL9VGS_o&_2gy))=`i$DX3vw-9Gh)}RQ7JcwuWkdbRXt|A`xA>c4EW@MX> zj1K`bMy|`TiE&}qk z)5K?tT>s;C;y#C_DqWhf#67pwvT!jB9HSn^b1L&UY}D79cyZ!hpTfBbxfeETrsfTo zDW224pVh+TdWo{)C`Y)3gggu%T4E{j;}FCv7V#rpMSR#zUWI`}!j4;@#o3 zwq!Dyxf++t==OPfWGs*%U_4=RzH(`}WqAcL=rA~|k z8bl;wh$ODZe5|BZM;X(Y;=zPth-6yGt$ruZ0ZgQw$T8d!)h(;@rPja_mvT-ukYl(u zs?GS<5H=0`@|P$NBKsGCfS*QLz?~s(UwK`PycA^t`CY|i6-2asO<*4~(nwcPz*lwH zOyD`#=M@yu_Hk5blorehk!O_$wBqr2etHrF*_N1}&3aa7n1s2Jc$^=wp`pRbX0!Q? zf^xw&*cRJ_c;ARZQo5G7nMF*cQgUo;Oa=wE#Wo>cLTHTVxt7$`)ybx&CfU{1CA+)3 z%OcxgTWk|G@Ht(@yARWfFb5I~K9ahL$MeAh6&Q)t7fM>?%RDUH^ZtS+=Mk>cNx)rI zSjxSui+C~W>_5P$Ysv6ov9F$kz?Yr25HN<*lqbT}EQgl6svu9+Hr%txLo=goZiOOR&&?PZU1ak|MYyb7l^<6GG!O zUsX)rSl|~ve_;JO<3qd|+{5<{VFMxZqVewU3gVr_)x>+TsJ|bZn-3D#ibCe-dTAJ#4RquQl+UL@cWj+ls}qQ@x6~8_nh*F-!cKc!KyX@f7g~ z;u+#k#B;>oh$F-?G&xy9Q+6togUu26I0v6+5W^|NbOJGEvAMyqKU-C93njH_WNeCt*&$TPie{tCooB3#mtf7LOCfFK8;> zLZ3-&4stj7of;6YSj2aO+|}j}oF}i)8Rt-D9IFA9~G_GA#Y&zMRQ2aT?G3jCO<1$YN-Hcm_$1rNmBAD+);Xe%ck8oZgZpVBqMSKWM zVSdJQwJpSL#3qGX(M52%yNJtNVpxVUDcrNQ$ksOa*Z`ku9P1F<4#c_#v44+eu}9=% z=trP|Z1_lNO1_lNO2I1mAaAmM>MWmh600000 LNkvXXu0mjfilMA( diff --git a/chessClient/img/chesspieces/wikipedia/bK.png b/chessClient/img/chesspieces/wikipedia/bK.png deleted file mode 100644 index de9880ce6390d6a53464f1b028bff7be0fd0f131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3009 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 DNo%uI diff --git a/chessClient/img/chesspieces/wikipedia/bN.png b/chessClient/img/chesspieces/wikipedia/bN.png deleted file mode 100644 index e31a6d0224819791210e91218fc99b7cd3b848ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1875 zcmV-Z2dwysP)9wVNxLjD`@*iP6__$6VA8`tL&-X#RW zUP5D_3pg!{fgB^uc5!V9p(tNV|Gp5&;zh}#i3&mRJj2PgnS>Jx@#yvSfh=IOEEuS) zYKSmaaa{!A4~pxQ{4vmn@SiF{sCCuL0>==(p%PfhDZ)^~NW!o{6tLqymZi2z(Zy#! z%lA1-SS~L#j}it2f`CuC5C&X`M>(%N&&tYzef##^$h?u1g{eeo%(*%pyZ{SquvcgUrlKsIIPto}M0{~GzX|xd+VWPeTnQG71|}zqobjzsYw#CySp0~m(fM`;oP82 zZGH9i^^$O+D2*(Lii*-?NRv4b8X6j;u1}sk2@w$yzwz!f78Cxfe2Mkz*MkzBot>J_ zi$Os_*r&8Y@7}!|&wt@nJdE3Qsb2tBLnYGF(?RRS1y|{tH*doH{Jgkk%^Ga`oJRp) zC0tNHd~4?}Qpu;v0H3knLPDTMfpq8zX-;z>M=lnglY`8ICc2#t-6uxHO6 zAgiHI#6#j2ck0wB>5DX*&Di!WX?utl0V`cS{E8JTd}et{CMPGu?c29ucz77%;^MHa zln3!*eJ#vVSXWmkt;&ZE9m4ZIfrFgO7g}uByhWqYh>HnayLL@P=bp6X`BJ~~C=smv@?6opVFtPUR>}+XoJUKZDX=!QL z_9n}8C}!Edak8(JfX7~NQ$BXm?*>+LZc6k$(}ExzT4cYhRPPGX4GiQjkGTO)$&%e&+@8x)lE1V!?_D)&d?pcu*4X z)~#Do`hm1nvvgw`Jbd8K1owWrfWeB(TI_gm7lOb_FRVS3Lv+kw5|&?W)h)RHyN^1- zz2ZxcSyWWy@FcLVMvDOJnI#NYdORYyUnNzhWsnw~X^NdYcVgS$TI`2w2?u3sqz`jP z6?RgFqTCG?y{z8pux3U^hC{%;d-qC}3|d8H(4scW3F-pDUbxfi5PVpenWuQT8-)38?k({PSnyS@n8IqcN|mpqeVyP(DAH=daK^;M zM2CPUPMnb9go6E7Q+|Q%EOH)8Ar>A{U_GH+ep2WU;yo{~cs@;wDg``u?i|(-V*4w+ zi}x_$Fb^qCOlwkLh#!kGNxPYM0lyYFNysbbK%31*1>DcGc&`Z@RWm3BymaXj74U6d z#WQ#q(P1hemLJRY+f}>@xJ}-%a8pY|>ts|GXyH}BPkFLFWJ*fPJ!uJ9z#1OKi;*KT zTnUIp?-ZCHmfe{5c@%IR>->hN(U_K&7V1d9$D@Ex^5Xjms_K1;)2C0k zj|cA9vBM$Y@#DwoUie)e1$>6^55fLVBzWQEu3fukF|m#%9#*S$E-WkzW1I(g6fjn{ z!sj^Rvu3k-^T5DB!QkLvfyH9kLIlLP<|Bd*9XfRA(4j+z4jnq!;y-|v529HMk23%O N002ovPDHLkV1nn}h0*{3 diff --git a/chessClient/img/chesspieces/wikipedia/bP.png b/chessClient/img/chesspieces/wikipedia/bP.png deleted file mode 100644 index afa0c9d4459e4d04648ca413ba90690bfdd49a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 777 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 l`)^ z-n=PRR8&Y=QBY6-yLRn@ZQHiN`t|E!<;sAcp zw%QWGCeI%Jk3K#=;OpxPetv$>x@|x}z;l$ZV;L-qHWmf^#$AssUBz<`-r2+glP6CG z>_T(r&V{(RIEasrhgGXq!P>QJVbi8fuzmY>$jZus-Me?gzJ2>3CnpCEA3h96j~SgBFX6i=n){9A`ir z#HFPO&Xg|-=o{<6x~^WmD%Fi`z_y^^(b3Vi|D)|m85tRE>cCoCTcNtTS_%f25@~5^ zkdl%DD^{$K)@n0n&V)&mCP8Rus6?D)wJ3j&Wzh!LnCJt2q0d8y4oP)jU0A0YnVFgY z5%}M%^~l)wFE;yP_Y&ER2N4kw9-lmLse^4{OB)f}CJerjZ%cfnx1Ga5AJ=dbCQN`S zQ>IA5PM(V}NuxNxC#9lytNSe|u9X$^>eP$cv_ zapFW6GiHo5(Fn$G-M?kKu8Z3v9K5khZP~H~_UzdM`T6;9>eMMHEiHu$7cRi%%a@_9 zt`2V8xPgmpX*-6yjE4^&O1p_CPo7BQSZ{Byw4)dp7?9Z4*C$=a@8ul~?nv(3xdXRu z-GYXO2FWjO>n>ir2xVnuQdcf4EQGy#_d;rFDkLT*!i*U+ASfsZp8#grO1<3N+@D^% zcC8n;R!^Tk1yR)8$w^x<9N^hj52~uF;M}=$P*hYT1)7(a2S<(^k!D<+Z87ld>}=^@ z{6AhtVmZ7qY%M3<7~EyxB-PZ^B#CM?!QhR$efze!dGqFv?4;ia)~!l0yBZrCMHFP` z&Yh5)oGf)Y?5^ytyLH^dbz^vVIK;-r!kRT}aPoi?Cr-fi>(`}>UA}yIt(^`NLcH-L znk~eW9RXcC58P}Q0r4H>Prd9|A72ewX17`RufpI%>V9E(U(Fa!AN|zEPw1(lt$@F; z@GHhYPy@?IR2;DJ?WY!c2HX1rGpm>CXrVf5sSRb+rajbkz2f&{@Gp_Z({Vq(Iu^~i zKp6b}gH?=4!r<>@;qT1gd(Zf)?{3Bqg~7i%!h_FT;$gb>A(hD{n^f|VL_XuGj%cbg zoZ8?kyyUPnW0000+NjA?5IGAHvP4t z54%KWsa~*up#S25g4PyUJ-=B#vU8SfOkVC3u;J1>CCN>xZx>V_Sh(vMyUFU{q&A(T z%a1H=@4r>w>!lpyyYBwP?~T)?JD%6QuQd^xTrI;6v+VaXtCeeiy8Wc6`Rl~%4ZC%_?Pl1m|0#bk z^7R^V?ErQbHRi&f$MXc79yDCv;r+Zw?g6KO{)aj8(mb3yc@;lQyRI|;dChg!RlNKE z2Rz^KOH@NqfTL01M}LIQvs-Etth*oXd|r8f`Q??<_)3?oyAnC+!1AR*FSp!&`>Jlg ze_+iNk^RBzuU~#z^mB@p_ivL;)4i7N+qG`>cNAB`UCr7Rwbo5)mgnY` z%;g)qY$tQOpL?4le&-}t+^m}H?YFCJM3nTCehM|;g7cR zGA+F`RWxmJzeVFD=0;#pu4Yve;?#ZdEzbUm=b{7K&po<#$IEQ?)x!@1Zt*^=Q-AeL z=bfkBqwE`8`967bj@It5w>>Ys`)K2?z~f8Lnb+t}{M^W$ak}{Ubs@{GvO*EfV88O5 ze8_iV_VWU1rp*0s-6soA?ptd4F#E=>dx^Ko-DaPg7dgu!o*9yi7XDzq)Gu?~A%9jq ONWjz8&t;ucLK6U+JX?nV diff --git a/chessClient/img/chesspieces/wikipedia/dot.png b/chessClient/img/chesspieces/wikipedia/dot.png deleted file mode 100644 index 65fd6649e13d5be4880dbd0deb3b6a6d8c91a39f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVB7>k44ofvPP)Tsw@I14-?iy0WW zg+Z8+Vb&Z8py0*;pAc6d9TyQXgwX9ZwxK{rTbBg+1v4m=-Fx=u|MRC)wc_7@Zx49# zGpc{1!1`mmmQP&d@bCV?gcl*Um(Kitm3jSB+U`d`#J}iH+4Omp{pJtH3!ZG=`WR@; zXHOT$kcv5PufFy>W@2r6?d?kyoxcn z!#vApz34;6+-cW4zclEvmxw0xKl~~x_aUj=;ehcsHZOjOSxw5k7G|uqyf5NquT&iP z+j#B&1*;Xe4^Py*akYUtcmk7Y#+!>SFMZEC&blc(;YH{}OPLAxl=e0}6+ElFhxPK} z@BIb&Cs{jfy5Ij@Sy31jwsBAJ{C_jI{p&hiyZz?7PkJ%=^&U4KfSmnuzAR(8oXozL T^WQE5dY{45)z4*}Q$iB}Xgv4s diff --git a/chessClient/img/chesspieces/wikipedia/star.jpg b/chessClient/img/chesspieces/wikipedia/star.jpg deleted file mode 100644 index 43ffce3b4eb9cbf42bfee20ce44931ab99c340d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533762 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

EJJ3I|$tfp?>c?o=e7} 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 p65!Y6n&8U$E27E%Cs2D$-DmHE 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

&~@>R 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�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 Z{12-kJ&=_`^N#=k002ovPDHLkV1l3JS(E?( diff --git a/chessClient/img/chesspieces/wikipedia/wN.png b/chessClient/img/chesspieces/wikipedia/wN.png deleted file mode 100644 index 237250c164f652f0ea61f5e8f65c9b4cb83489b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2388 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 V@B7wJo3#J{002ovPDHLkV1iHz`5piO diff --git a/chessClient/img/chesspieces/wikipedia/wQ.png b/chessClient/img/chesspieces/wikipedia/wQ.png deleted file mode 100644 index c3dfc15e556cbbeb546374aa9ee5e6bf121e929d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3812 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 dYLH7V`vEPuk - - - - - - - Chess Game - - - - - - - - - - - - - - -

- - - - - - \ No newline at end of file diff --git a/chessClient/index.js b/chessClient/index.js deleted file mode 100644 index e2659a23..00000000 --- a/chessClient/index.js +++ /dev/null @@ -1,1118 +0,0 @@ -// Global state flags for lesson management -let flag = false -let lessonFlag = false -let isLesson = false -let lessonStarted = false -let lessonBoard = '' -let lessonEnd = '' -let endSquare = '' -let previousEndSquare = '' - -// Chessboard UI configuration -var squareClass = 'square-55d63' -var $board = $('#myBoard') -var board = null -var currentState = new Chess() -var whiteSquareGrey = '#eebe7bf7' -var blackSquareGrey = '#ae5716d6' - -var serverStartNotified = false - -// Cross-browser event listener compatibility -var eventMethod = window.addEventListener ? 'addEventListener' : 'attachEvent' -var eventer = window[eventMethod] -var messageEvent = eventMethod == 'attachEvent' ? 'onmessage' : 'message' - -// User identification -var mentor = '' -var student = '' -var role = 'student' - -var playerColor - -// Free move mode allows moving pieces freely without restrictions -var freemoveFlag = false - -// Mouse tracking for showing opponent's cursor -var myMouseX -var myMouseY -const mouseImage = 'img/cursor.png' - -var opponentMouseX = 0 -var opponentMouseY = 0 - -// Puzzle-specific variables -var nextPuzzleMove = [] -var isPuzzle = false - -// Move highlighting state -var highlightFrom = '' -var highlightTo = '' - -// Listen for mouse position change -document.addEventListener('mousemove', (event) => { - myMouseX = event.clientX - myMouseY = event.clientY - - if (mentor && student) { - sendMouseXY() - } -}) - -/** - * Updates the visual position of opponent's cursor on screen - */ -function updateOpponentMouseXY () { - const img = document.getElementById('cursor') - - // Set absolute position values (top and left in pixels) - img.style.top = `${opponentMouseY}px` - img.style.left = `${opponentMouseX}px` -} - -// References to chess piece images -const chessPieceFolder = 'img/chesspieces/wikipedia/' - -const chessImages = { - bB: 'bB.png', // Black Bishop - bK: 'bK.png', // Black King - bN: 'bN.png', // Black Knight - bP: 'bP.png', // Black Pawn - bQ: 'bQ.png', // Black Queen - bR: 'bR.png', // Black Rook - wB: 'wB.png', // White Bishop - wK: 'wK.png', // White King - wN: 'wN.png', // White Knight - wP: 'wP.png', // White Pawn - wQ: 'wQ.png', // White Queen - wR: 'wR.png' // White Rook -} - -/** - * Returns the full path to a chess piece image - * @param {string} peice - Piece identifier (e.g., 'wP', 'bK') - */ -function getChessPieceImage (peice) { - chessString = chessPieceFolder + chessImages[peice] - return chessString -} - -// Connect to chess server via Socket.IO -const socket = io('http://localhost:3001') - -// Default starting FEN position -let defaultFEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' - -// Notify parent window that client is ready -letParentKnow() - -/** - * Removes grey highlighting from all squares - */ -function removeGreySquares () { - $('#myBoard .square-55d63').css('background', '') - $('#myBoard .square-55d63').css('background-image', '') - $('#myBoard .square-55d63').css('background-position', '') -} - -/** - * Highlights a square with grey overlay and dot indicator - * @param {string} square - Square notation (e.g., 'e4') - */ -function greySquare (square) { - var $square = $('#myBoard .square-' + square) - - var background = whiteSquareGrey - if ($square.hasClass('black-3c85d')) { - background = blackSquareGrey - } - - $square.css('background', background) - $square.css('background-position', 'center') - $square.css('background-image', "url('img/chesspieces/wikipedia/dot.png')") -} - -/** - * Initiates a new chess game with the server - */ -function sendNewGame () { - console.log('starting new game with server') - var data = {'mentor': mentor, 'student': student, 'role': role} - console.log(data) - socket.emit('newgame', JSON.stringify(data)) -} - -/** - * Initiates a new puzzle session with the server - */ -function sendNewPuzzle () { - console.log('starting new puzzle with server') - var data = {'mentor': mentor, 'student': student, 'role': role} - console.log(data) - socket.emit('newPuzzle', JSON.stringify(data)) -} - -/** - * Updates the board state on the server with a new FEN string - * @param {string} fen - FEN notation of the new board state - */ -function sendSetState (fen) { - console.log('setting a new board state') - var data = {'state': fen} - console.log(data) - socket.emit('setstate', JSON.stringify(data)) -} - -/** - * Updates the board state and player color (primarily for puzzles) - * @param {string} fen - FEN notation of the new board state - * @param {string} color - Player color ('white' or 'black') - * @param {string} hints - Puzzle hints to display - */ -function sendSetStateColor (fen, color, hints) { - console.log('setting a new board state') - var data = {'state': fen, 'color': color, 'hints': hints} - console.log(data) - socket.emit('setstateColor', JSON.stringify(data)) -} - -/** - * Sends a move to the server for validation and broadcast - * @param {string} from - Source square - * @param {string} to - Target square - */ -function sendMove (from, to) { - console.log('sending move to server') - var data = {'mentor': mentor, 'student': student, 'role': role, 'from': from, 'to': to} - console.log(data) - socket.emit('move', JSON.stringify(data)) -} - -/** - * Notifies the server to end the current game - */ -function sendEndGame () { - console.log('sending end game to server') - var data = {'mentor': mentor, 'student': student, 'role': role} - console.log(data) - socket.emit('endgame', JSON.stringify(data)) -} - -/** - * Broadcasts mouse position to opponent - */ -function sendMouseXY () { - let data = {'x': myMouseX, 'y': myMouseY, 'mentor': mentor, 'student': student} - socket.emit('mousexy', JSON.stringify(data)) -} - -/** - * Broadcasts the last move for highlighting - * @param {string} from - Source square - * @param {string} to - Target square - */ -function sendLastMove (from, to) { - let data = {'from': from, 'to': to, 'mentor': mentor, 'student': student} - socket.emit('lastmove', JSON.stringify(data)) -} - -/** - * Sends highlight command to opponent - * @param {string} from - Source square - * @param {string} to - Target square - */ -function sendHighLight (from, to) { - console.log('sending highlihgt') - let data = {'from': from, 'to': to, 'mentor': mentor, 'student': student} - socket.emit('highlight', JSON.stringify(data)) -} - -/** - * Requests the server to undo the last move - */ -function sendUndo () { - console.log('sending undo to server') - var data = {'mentor': mentor, 'student': student, 'role': role} - console.log(data) - socket.emit('undo', JSON.stringify(data)) -} - -/** - * Requests removal of grey square highlights - */ -function sendRemoveGrey () { - var data = {'mentor': mentor, 'student': student} - socket.emit('removegrey', JSON.stringify(data)) -} - -/** - * Requests adding grey highlight to a square - * @param {string} to - Target square to highlight - */ -function sendGreySquare (to) { - var data = {'mentor': mentor, 'student': student, 'to': to} - socket.emit('addgrey', JSON.stringify(data)) -} - -/** - * Notifies opponent that a piece is being dragged - * @param {string} piece - Piece identifier being dragged - */ -function sendPieceDrag (piece) { - console.log('sending drag') - var data = {'mentor': mentor, 'student': student, 'piece': piece} - socket.emit('piecedrag', JSON.stringify(data)) -} - -/** - * Notifies opponent that a piece drag has ended - */ -function sendPieceDrop () { - console.log('sending drop') - var data = {'mentor': mentor, 'student': student} - socket.emit('piecedrop', JSON.stringify(data)) -} - -/** - * Broadcasts a simple text message - * @param {string} message - Message to send - */ -function sendMessage (message) { - console.log('sending message:', message) - var data = {'message': message} - socket.emit('message', JSON.stringify(data)) -} - -// notify front end that their user has created a new game/puzzle as host -socket.on('host', () => { - parent.postMessage('host', '*') - isPuzzle = true -}) - -// notify front end that their user has joined an existing new game/puzzle as guest -socket.on('guest', () => { - parent.postMessage('guest', '*') - isPuzzle = true -}) - -socket.on('message', (msg) => { - parsedMsg = JSON.parse(msg) - parent.postMessage(parsedMsg.message, '*') -}) - -// Handle boardstate message from the client -socket.on('boardstate', (msg) => { - parsedMsg = JSON.parse(msg) - - // if served as a client for a puzzle host (a guest does not store nextPuzzleMove for simplicity) - if (nextPuzzleMove.length == 2) { - // for a puzzle host, 'boardstate' message is either initiated by host itself or its guest - - // if initiated by host itself, ignore the message - if (parsedMsg.boardState == currentState.fen()) return - // else 'boardstate' message is initiated by puzzle guest - - // the expected puzzle moves - var source = nextPuzzleMove[0] - var target = nextPuzzleMove[1] - - // the expected chess board based on expected moves - const testState = new Chess(currentState.fen()) - testState.move({ from: source, to: target }) - - // new board state is different from expected board, so client has made an incorrect move - if (testState.fen() != parsedMsg.boardState) { - // snap back, reset puzzle to current state - sendSetState(currentState.fen()) - highlightMove(highlightFrom, highlightTo, 'lastmove') - } else { - // else client has made the expected move - nextPuzzleMove = [] // clear next moves - currentState = new Chess(parsedMsg.boardState) // rearrange board according to guest move - board.position(currentState.fen()) - sendToParent( // notify front end that a move has been made - JSON.stringify({ - from: source, - to: target - }) - ) - } - return - } - - // update state of chess board - console.log(currentState) - console.log(currentState.fen()) - currentState = new Chess(parsedMsg.boardState) - console.log('received board state', parsedMsg) - - // setting player color - if (parsedMsg.color) { - // setting player color for turn keeping - playerColor = parsedMsg.color - console.log(playerColor) - - // setting chess board orientation - config.orientation = parsedMsg.color - board = Chessboard('myBoard', config) - parent.postMessage('new game received', '*') - } - - // update visuals of chessboard - board.position(currentState.fen()) -}) - -socket.on('piecedrag', (msg) => { - console.log('recieved piece drag') - parsedMsg = JSON.parse(msg) - - // Change the image of the cursor back to default - cursor = document.getElementById('cursor') - pieceImage = getChessPieceImage(parsedMsg.piece) - - console.log(pieceImage) - console.log(parsedMsg.piece) - - cursor.src = pieceImage -}) - -socket.on('color', (msg) => { - console.log('received color', msg) - parsedMsg = JSON.parse(msg) - playerColor = parsedMsg.color -}) - -socket.on('piecedrop', () => { - console.log('recieved piece drop') - - // Change the image of the cursor back to default - cursor = document.getElementById('cursor') - cursor.src = mouseImage -}) - -socket.on('highlight', (msg) => { - // Highlight the anticipated space - console.log('highlight recieved') - parsedMsg = JSON.parse(msg) - highlightMove(parsedMsg.from, parsedMsg.to, 'lastMove') -}) - -socket.on('addgrey', (msg) => { - // Highlight the last moved spaces - parsedMsg = JSON.parse(msg) - greySquare(parsedMsg.to) -}) - -socket.on('removegrey', () => { - removeGreySquares() -}) - -// handle change of opponents mousexy -socket.on('mousexy', (msg) => { - let parsedMsg = JSON.parse(msg) - - let viewportWidth = window.innerWidth - let viewportHeight = window.innerHeight - - if (parsedMsg.x && parsedMsg.y) { - if (isPuzzle) { - opponentMouseX = parsedMsg.x - 28 - opponentMouseY = parsedMsg.y - 28 - } else { - opponentMouseX = (-1 * parsedMsg.x) + viewportWidth - 28 - opponentMouseY = (-1 * parsedMsg.y) + viewportHeight - 28 - } - - updateOpponentMouseXY() - } -}) - -// Handle reset message from the client -socket.on('reset', () => { - // reload page - location.reload() - // deleteAllCookies(); - console.log('resetting board') -}) - -// Handle lastmove message from the client -socket.on('lastmove', (msg) => { - // Highlight the last moved spaces - parsedMsg = JSON.parse(msg) - if (!parsedMsg.from && !parsedMsg.to && nextPuzzleMove.length > 0) return - highlightMove(parsedMsg.from, parsedMsg.to, 'lastmove') -}) - -// Deletes all cookies on iframe -function deleteAllCookies () { - const cookies = document.cookie.split(';') - - for (let cookie of cookies) { - const cookieName = cookie.split('=')[0].trim() - deleteCookie(cookieName) - } -} - -// Listen to message from parent window -eventer( - messageEvent, - (e) => { - console.log('client event: ', e) // uncomment for debugging - let data - try { - data = typeof e.data === 'string' ? JSON.parse(e.data) : e.data - } catch (err) { - console.error('Invalid JSON message from parent:', e.data) - return - } - - updateStatus() - board.position(currentState.fen()) - sendToParent(currentState.fen()) - - // get command from parent and send to server - var command = data.command - if (command == 'newgame') { // front end wants to create / join game - sendNewGame() - } else if (command == 'newPuzzle') { // front end wants to create / join puzzle - sendNewPuzzle() - } else if (command == 'message') { // front end wants to broadcast a message - sendMessage(data.message) - } else if (command == 'endgame') { // front end wants to end existing game / puzzle - // delete game on server - sendEndGame() - } else if (command == 'userinfo') { - mentor = data.mentor - student = data.student - role = data.role - } else if (command == 'undo') { sendUndo() } - - // check if puzzle - if (data.PuzzleId) { - console.log('loading puzzle: ', data.PuzzleId) - currentState.load(data.FEN) - board.position(data.FEN) - - // find the starting color - var activeColor = data.FEN.split(' ')[1] - // the computer makes the first move - // change board orientation accordingly - // i.e. if active color is w, then player is black, and vice versa - if (activeColor === 'w') { - playerColor = 'black' - board.orientation('black') - } else { - playerColor = 'white' - board.orientation('white') - } - - sendSetStateColor(currentState.fen(), playerColor, data.Hints) - sendToParent(currentState.fen()) - } - - // get and set lessonflag - lessonFlag = data.lessonFlag - if (lessonFlag == true) { - isLesson = true - } - - // move a piece if it's a move message - if ('from' in data && 'to' in data) { - currentState.move({ from: data.from, to: data.to }) - - // move highlight - highlightMove(data.from, data.to) - - updateStatus() - sendToParent(currentState.fen()) - } - - // highlight message - if ('highlightFrom' in data && 'highlightTo' in data) { - highlightMove(data.highlightFrom, data.highlightTo, 'lastmove') - } - - if ('clearhighlight' in data) { - $board.find('.' + squareClass).removeClass('lastmove') - } - - // if this is a lesson, setup lesson - if (isLesson == true) { - endSquare = data.endSquare - lessonBoard = data.boardState - lessonEnd = data.endState - - if ( - (data.color === 'black' || data.color === 'white') && - data.color !== playerColor - ) { - playerColor = data.color - console.log('data.color: ' + data.color) - console.log('setting orientation to: ' + playerColor) - board.orientation(playerColor) - } - - previousEndSquare = data.previousEndSquare - - if (previousEndSquare !== '') { - $board.find('.square-' + previousEndSquare).removeClass('highlight') - } - - if (lessonStarted == false) { - var lessonConfig = { - draggable: true, - showNotation: true, - position: lessonBoard, - onDragStart: onDragStart, - onDrop: onDrop, - onMouseoutSquare: onMouseoutSquare, - onMouseoverSquare: onMouseoverSquare, - onSnapEnd: onSnapEnd - } - board = Chessboard('myBoard', lessonConfig) - // var overlay = new ChessboardArrows('board_wrapper'); - lessonStarted = true - currentState.load(lessonBoard) - } else { - board.position(data.boardState) - currentState.load(data.boardState) - updateStatus() - } - - $board.find('.square-' + endSquare).addClass('highlight') - } else if (data.boardState == defaultFEN) { - currentState = new Chess() - } - - if (isLesson == false && data.color && data.boardState) { - playerColor = data.color - board.orientation(playerColor) - currentState.load(data.boardState) - board.position(data.boardState) - updateStatus() - } - - // highlight message - // if ("highlightFrom" in data && "highlightTo" in data) { - // highlightMove(data.highlightFrom, data.highlightTo); - // } - }, - false -) - -/** - * Highlights move squares on the board - * @param {string} from - Source square - * @param {string} to - Target square - * @param {string} style - CSS class name to apply - */ -function highlightMove (from, to, style) { - console.log('hightlight!!!', from, to) - $board.find('.' + squareClass).removeClass(style) - if (from !== 'remove' || to !== 'remove') { - if (from && to) { - highlightFrom = from - highlightTo = to - } - $board.find('.square-' + from).addClass(style) - $board.find('.square-' + to).addClass(style) - } -} - -/** - * Flips the board orientation - */ -function flip () { - board.flip() -} - -/** - * Notifies parent window that iframe is ready to receive messages - */ -function letParentKnow () { - if (flag === false) { - parent.postMessage('ReadyToRecieve', '*') - } - flag = true -} - -/** - * Validates whether a piece can be dragged - * Checks turn, player color, and game state - */ -function onDragStart (source, piece, position, orientation) { - // if freeplay mode is off - if (!freemoveFlag) { - if (!playerColor) { - console.log('Player color not set') - } - - // if it's your turn - if (playerColor && playerColor[0] == currentState.turn()) { - // do not pick up pieces if the game is over - if (isLesson == false) { - if (currentState.game_over()) { - sendGameOver() - return false - } - } - - if (playerColor === 'black') { - if (piece.search(/^w/) !== -1) return false - } else if (playerColor === 'white') { - if (piece.search(/^b/) !== -1) return false - } - - // only pick up pieces for the side to move - if ( - (currentState.turn() === 'w' && piece.search(/^b/) !== -1) || - (currentState.turn() === 'b' && piece.search(/^w/) !== -1) - ) { - return false - } - - sendPieceDrag(piece) - } - } else { - return true - } -} - -/** - * Handles piece drop event - * Validates move legality and updates game state - */ -function onDrop (source, target, draggedPieceSource) { - removeGreySquares() - sendPieceDrop() - - // if we're not in freeplay - if (!freemoveFlag) { - // if we're doing a puzzle, check if the move is correct - if (nextPuzzleMove.length == 2) { - // incorrect move, snapback - if (source !== nextPuzzleMove[0] || target !== nextPuzzleMove[1]) { - return 'snapback' - } - // correct move, clear the next expected move - else { nextPuzzleMove = [] } - } - - // see if the move is legal - var move = currentState.move({ - from: source, - to: target, - promotion: 'q' // NOTE: always promote to a queen for example simplicity - }) - - // illegal move - if (move === null) { return 'snapback' } - // legal move - else { sendMove(source, target) }; - - if (isLesson == false) { - if (currentState.game_over()) { - sendGameOver() - } - } - - // move highlight - highlightMove(source, target, 'lastmove') - // move highlight of mentor/student - sendLastMove(source, target) - - updateStatus() - sendToParent(`piece-${draggedPieceSource}`) - sendToParent( - JSON.stringify({ - from: source, - to: target - }) - ) - sendToParent(`target:${move.to}`) - sendToParent(currentState.fen()) - } -} - -/** - * Shows possible moves when hovering over a square - * Displays grey dots on valid destination squares - */ -function onMouseoverSquare (square, piece) { - if (playerColor && playerColor[0] == currentState.turn()) { - // get list of possible moves for this square - var moves = currentState.moves({ - square: square, - verbose: true - }) - - // exit if there are no moves available for this square - if (moves.length === 0) return - - // highlight the possible squares for this piece - for (var i = 0; i < moves.length; i++) { - greySquare(moves[i].to) - sendGreySquare(moves[i].to) - } - } -} - -/** - * Removes possible move suggestions when mouse leaves square - */ -function onMouseoutSquare (square, piece) { - removeGreySquares() - sendRemoveGrey() -} - -/** - * Sends data to parent window via postMessage - * @param {string} fen - Data to send (typically FEN or event info) - */ -function sendToParent (fen) { - parent.postMessage(fen, '*') -} - -/** - * Updates board position after piece snap animation - * Handles special moves like castling, en passant, pawn promotion - */ -function onSnapEnd () { - board.position(currentState.fen()) -} - -/** - * Updates game status text and checks for game over conditions - */ -function updateStatus () { - var status = '' - - var moveColor = 'White' - - if (currentState.turn() === 'b') { - moveColor = 'Black' - } - - // checkmate? - if (isLesson == false) { - if (currentState.in_checkmate()) { - status = 'Game over, ' + moveColor + ' is in checkmate.' - sendCheckmate() - } - - // draw? - else if (currentState.in_draw()) { - status = 'Game over, drawn position' - sendDraw() - } - } - - // game still on - else { - status = moveColor + ' to move' - - // check? - if (currentState.in_check()) { - status += ', ' + moveColor + ' is in check' - } - - if (currentState.game_over()) { - if (currentState.in_check() && moveColor == 'Black') { - parent.postMessage('won:white', '*') - } else if (currentState.in_check() && moveColor == 'Black') { - parent.postMessage('won:black', '*') - } else { - parent.postMessage('restart', '*') - } - } - } -} - -/** - * Notifies parent that game is over - */ -function sendGameOver () { - parent.postMessage('gameOver', '*') -} - -/** - * Notifies parent of draw condition - */ -function sendDraw () { - parent.postMessage('draw', '*') -} - -/** - * Notifies parent of checkmate - */ -function sendCheckmate () { - parent.postMessage('checkmate', '*') -} - -/** - * ChessboardArrows - Draws arrows on the chessboard for move annotations - * @param {string} id - Board container element ID - * @param {number} RES_FACTOR - Resolution scaling factor - * @param {string} COLOUR - Arrow color in RGB format - */ -var ChessboardArrows = function ( - id, - RES_FACTOR = 2, - COLOUR = 'rgb(0, 128,0,1)' -) { - const NUM_SQUARES = 8 - var resFactor, - colour, - drawCanvas, - drawContext, - primaryCanvas, - primaryContext, - initialPoint, - mouseDown - - resFactor = RES_FACTOR - colour = COLOUR - - // drawing canvas - drawCanvas = document.getElementById('drawing_canvas') - drawContext = changeResolution(drawCanvas, resFactor) - setContextStyle(drawContext) - - // primary canvas - primaryCanvas = document.getElementById('primary_canvas') - primaryContext = changeResolution(primaryCanvas, resFactor) - setContextStyle(primaryContext) - - // setup mouse event callbacks - var board = document.getElementById(id) - board.addEventListener('mousedown', function (event) { - onMouseDown(event) - }) - board.addEventListener('mouseup', function (event) { - onMouseUp(event) - }) - board.addEventListener('mousemove', function (event) { - onMouseMove(event) - }) - board.addEventListener( - 'contextmenu', - function (e) { - e.preventDefault() - }, - false - ) - - // initialise vars - initialPoint = { x: null, y: null } - finalPoint = { x: null, y: null } - arrowWidth = 15 - mouseDown = false - - // source: https://stackoverflow.com/questions/808826/draw-arrow-on-canvas-tag - function drawArrow (context, fromx, fromy, tox, toy, r) { - var x_center = tox - var y_center = toy - var angle, x, y - - context.beginPath() - - angle = Math.atan2(toy - fromy, tox - fromx) - x = r * Math.cos(angle) + x_center - y = r * Math.sin(angle) + y_center - - context.moveTo(x, y) - - angle += (1 / 3) * (2 * Math.PI) - x = r * Math.cos(angle) + x_center - y = r * Math.sin(angle) + y_center - - context.lineTo(x, y) - - angle += (1 / 3) * (2 * Math.PI) - x = r * Math.cos(angle) + x_center - y = r * Math.sin(angle) + y_center - - context.lineTo(x, y) - context.closePath() - context.fill() - } - - function getMousePos (canvas, evt) { - var rect = canvas.getBoundingClientRect() - return { - x: Q(evt.clientX - rect.left), - y: Q(evt.clientY - rect.top) - } - } - - function setContextStyle (context) { - context.strokeStyle = context.fillStyle = colour - context.lineJoin = 'butt' - } - - function onMouseDown (event) { - if (event.which == 3) { - // right click - mouseDown = true - initialPoint = finalPoint = getMousePos(drawCanvas, event) - drawCircle( - drawContext, - initialPoint.x, - initialPoint.y, - primaryCanvas.width / (resFactor * NUM_SQUARES * 2) - 1 - ) - } - } - - function onMouseUp (event) { - if (event.which == 3) { - // right click - mouseDown = false - // if starting position == ending position, draw a circle to primary canvas - if (initialPoint.x == finalPoint.x && initialPoint.y == finalPoint.y) { - drawCircle( - primaryContext, - initialPoint.x, - initialPoint.y, - primaryCanvas.width / (resFactor * NUM_SQUARES * 2) - 1 - ) // reduce radius of square by 1px - } - // otherwise draw an arrow - else { - drawArrowToCanvas(primaryContext) - } - drawContext.clearRect(0, 0, drawCanvas.width, drawCanvas.height) - } else if (event.which == 1) { - // left click - // clear canvases - drawContext.clearRect(0, 0, drawCanvas.width, drawCanvas.height) - primaryContext.clearRect(0, 0, primaryCanvas.width, primaryCanvas.height) - } - } - - function onMouseMove (event) { - finalPoint = getMousePos(drawCanvas, event) - - if (!mouseDown) return - if (initialPoint.x == finalPoint.x && initialPoint.y == finalPoint.y) { return } - - drawContext.clearRect(0, 0, drawCanvas.width, drawCanvas.height) - drawArrowToCanvas(drawContext) - } - - function drawArrowToCanvas (context) { - // offset finalPoint so the arrow head hits the center of the square - var xFactor, yFactor, offsetSize - if (finalPoint.x == initialPoint.x) { - yFactor = Math.sign(finalPoint.y - initialPoint.y) * arrowWidth - xFactor = 0 - } else if (finalPoint.y == initialPoint.y) { - xFactor = Math.sign(finalPoint.x - initialPoint.x) * arrowWidth - yFactor = 0 - } else { - // find delta x and delta y to achieve hypotenuse of arrowWidth - slope_mag = Math.abs( - (finalPoint.y - initialPoint.y) / (finalPoint.x - initialPoint.x) - ) - xFactor = - (Math.sign(finalPoint.x - initialPoint.x) * arrowWidth) / - Math.sqrt(1 + Math.pow(slope_mag, 2)) - yFactor = - Math.sign(finalPoint.y - initialPoint.y) * - Math.abs(xFactor) * - slope_mag - } - - // draw line - context.beginPath() - context.lineCap = 'round' - context.lineWidth = 8 - context.moveTo(initialPoint.x, initialPoint.y) - context.lineTo(finalPoint.x - xFactor, finalPoint.y - yFactor) - context.stroke() - - // draw arrow head - drawArrow( - context, - initialPoint.x, - initialPoint.y, - finalPoint.x - xFactor, - finalPoint.y - yFactor, - arrowWidth - ) - } - - function Q (x, d) { - // mid-tread quantiser - d = primaryCanvas.width / (resFactor * NUM_SQUARES) - return d * (Math.floor(x / d) + 0.5) - } - - function drawCircle (context, x, y, r) { - context.beginPath() - context.lineWidth = 4 - context.arc(x, y, r, 0, 2 * Math.PI) - context.stroke() - } - - // source: https://stackoverflow.com/questions/14488849/higher-dpi-graphics-with-html5-canvas - function changeResolution (canvas, scaleFactor) { - // Set up CSS size. - canvas.style.width = canvas.style.width || canvas.width + 'px' - canvas.style.height = canvas.style.height || canvas.height + 'px' - - // Resize canvas and scale future draws. - canvas.width = Math.ceil(canvas.width * scaleFactor) - canvas.height = Math.ceil(canvas.height * scaleFactor) - var ctx = canvas.getContext('2d') - ctx.scale(scaleFactor, scaleFactor) - return ctx - } -} -var config = { - draggable: true, - showNotation: true, - position: 'start', - orientation: 'white', - onDragStart: onDragStart, - onDrop: onDrop, - onMouseoutSquare: onMouseoutSquare, - onMouseoverSquare: onMouseoverSquare, - onSnapEnd: onSnapEnd -} - -if (isLesson == false) { - // Initialize board with proper sizing - board = Chessboard('myBoard', config) - - // Force a resize to ensure proper dimensions - setTimeout(function() { - if (board) { - board.resize() - } - }, 100) - - // var overlay = new ChessboardArrows('board_wrapper'); -} - -// Handle window resize with proper board resizing -let resizeTimer -$(window).resize(function() { - clearTimeout(resizeTimer) - resizeTimer = setTimeout(function() { - if (board) { - board.resize() - } - }, 250) -}) - -// Also handle orientation changes on mobile -$(window).on('orientationchange', function() { - setTimeout(function() { - if (board) { - board.resize() - } - }, 500) -}) - -updateStatus() diff --git a/chessClient/js/chessboard-1.0.0.js b/chessClient/js/chessboard-1.0.0.js deleted file mode 100644 index 89fa6628..00000000 --- a/chessClient/js/chessboard-1.0.0.js +++ /dev/null @@ -1,1916 +0,0 @@ -// chessboard.js v1.0.0 -// https://github.com/oakmac/chessboardjs/ -// -// Copyright (c) 2019, Chris Oakman -// Released under the MIT license -// https://github.com/oakmac/chessboardjs/blob/master/LICENSE.md - -// start anonymous scope -(function () { - 'use strict' - - var $ = window['jQuery'] - - // --------------------------------------------------------------------------- - // Constants - // --------------------------------------------------------------------------- - - var COLUMNS = 'abcdefgh'.split('') - var DEFAULT_DRAG_THROTTLE_RATE = 20 - var ELLIPSIS = '…' - var MINIMUM_JQUERY_VERSION = '1.8.3' - var RUN_ASSERTS = false - var START_FEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' - var START_POSITION = fenToObj(START_FEN) - - // default animation speeds - var DEFAULT_APPEAR_SPEED = 200 - var DEFAULT_MOVE_SPEED = 200 - var DEFAULT_SNAPBACK_SPEED = 60 - var DEFAULT_SNAP_SPEED = 30 - var DEFAULT_TRASH_SPEED = 100 - - // use unique class names to prevent clashing with anything else on the page - // and simplify selectors - // NOTE: these should never change - var CSS = {} - CSS['alpha'] = 'alpha-d2270' - CSS['black'] = 'black-3c85d' - CSS['board'] = 'board-b72b1' - CSS['chessboard'] = 'chessboard-63f37' - CSS['clearfix'] = 'clearfix-7da63' - CSS['highlight1'] = 'highlight1-32417' - CSS['highlight2'] = 'highlight2-9c5d2' - CSS['notation'] = 'notation-322f9' - CSS['numeric'] = 'numeric-fc462' - CSS['piece'] = 'piece-417db' - CSS['row'] = 'row-5277c' - CSS['sparePieces'] = 'spare-pieces-7492f' - CSS['sparePiecesBottom'] = 'spare-pieces-bottom-ae20f' - CSS['sparePiecesTop'] = 'spare-pieces-top-4028b' - CSS['square'] = 'square-55d63' - CSS['white'] = 'white-1e1d7' - - // --------------------------------------------------------------------------- - // Misc Util Functions - // --------------------------------------------------------------------------- - - function throttle (f, interval, scope) { - var timeout = 0 - var shouldFire = false - var args = [] - - var handleTimeout = function () { - timeout = 0 - if (shouldFire) { - shouldFire = false - fire() - } - } - - var fire = function () { - timeout = window.setTimeout(handleTimeout, interval) - f.apply(scope, args) - } - - return function (_args) { - args = arguments - if (!timeout) { - fire() - } else { - shouldFire = true - } - } - } - - // function debounce (f, interval, scope) { - // var timeout = 0 - // return function (_args) { - // window.clearTimeout(timeout) - // var args = arguments - // timeout = window.setTimeout(function () { - // f.apply(scope, args) - // }, interval) - // } - // } - - function uuid () { - return 'xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'.replace( - /x/g, - function (c) { - var r = (Math.random() * 16) | 0 - return r.toString(16) - } - ) - } - - function deepCopy (thing) { - return JSON.parse(JSON.stringify(thing)) - } - - function parseSemVer (version) { - var tmp = version.split('.') - return { - major: parseInt(tmp[0], 10), - minor: parseInt(tmp[1], 10), - patch: parseInt(tmp[2], 10) - } - } - - // returns true if version is >= minimum - function validSemanticVersion (version, minimum) { - version = parseSemVer(version) - minimum = parseSemVer(minimum) - - var versionNum = - version.major * 100000 * 100000 + version.minor * 100000 + version.patch - var minimumNum = - minimum.major * 100000 * 100000 + minimum.minor * 100000 + minimum.patch - - return versionNum >= minimumNum - } - - function interpolateTemplate (str, obj) { - for (var key in obj) { - if (!obj.hasOwnProperty(key)) continue - var keyTemplateStr = '{' + key + '}' - var value = obj[key] - while (str.indexOf(keyTemplateStr) !== -1) { - str = str.replace(keyTemplateStr, value) - } - } - return str - } - - if (RUN_ASSERTS) { - console.assert(interpolateTemplate('abc', { a: 'x' }) === 'abc') - console.assert(interpolateTemplate('{a}bc', {}) === '{a}bc') - console.assert(interpolateTemplate('{a}bc', { p: 'q' }) === '{a}bc') - console.assert(interpolateTemplate('{a}bc', { a: 'x' }) === 'xbc') - console.assert(interpolateTemplate('{a}bc{a}bc', { a: 'x' }) === 'xbcxbc') - console.assert( - interpolateTemplate('{a}{a}{b}', { a: 'x', b: 'y' }) === 'xxy' - ) - } - - // --------------------------------------------------------------------------- - // Predicates - // --------------------------------------------------------------------------- - - function isString (s) { - return typeof s === 'string' - } - - function isFunction (f) { - return typeof f === 'function' - } - - function isInteger (n) { - return typeof n === 'number' && isFinite(n) && Math.floor(n) === n - } - - function validAnimationSpeed (speed) { - if (speed === 'fast' || speed === 'slow') return true - if (!isInteger(speed)) return false - return speed >= 0 - } - - function validThrottleRate (rate) { - return isInteger(rate) && rate >= 1 - } - - function validMove (move) { - // move should be a string - if (!isString(move)) return false - - // move should be in the form of "e2-e4", "f6-d5" - var squares = move.split('-') - if (squares.length !== 2) return false - - return validSquare(squares[0]) && validSquare(squares[1]) - } - - function validSquare (square) { - return isString(square) && square.search(/^[a-h][1-8]$/) !== -1 - } - - if (RUN_ASSERTS) { - console.assert(validSquare('a1')) - console.assert(validSquare('e2')) - console.assert(!validSquare('D2')) - console.assert(!validSquare('g9')) - console.assert(!validSquare('a')) - console.assert(!validSquare(true)) - console.assert(!validSquare(null)) - console.assert(!validSquare({})) - } - - function validPieceCode (code) { - return isString(code) && code.search(/^[bw][KQRNBP]$/) !== -1 - } - - if (RUN_ASSERTS) { - console.assert(validPieceCode('bP')) - console.assert(validPieceCode('bK')) - console.assert(validPieceCode('wK')) - console.assert(validPieceCode('wR')) - console.assert(!validPieceCode('WR')) - console.assert(!validPieceCode('Wr')) - console.assert(!validPieceCode('a')) - console.assert(!validPieceCode(true)) - console.assert(!validPieceCode(null)) - console.assert(!validPieceCode({})) - } - - function validFen (fen) { - if (!isString(fen)) return false - - // cut off any move, castling, etc info from the end - // we're only interested in position information - fen = fen.replace(/ .+$/, '') - - // expand the empty square numbers to just 1s - fen = expandFenEmptySquares(fen) - - // FEN should be 8 sections separated by slashes - var chunks = fen.split('/') - if (chunks.length !== 8) return false - - // check each section - for (var i = 0; i < 8; i++) { - if ( - chunks[i].length !== 8 || - chunks[i].search(/[^kqrnbpKQRNBP1]/) !== -1 - ) { - return false - } - } - - return true - } - - if (RUN_ASSERTS) { - console.assert(validFen(START_FEN)) - console.assert(validFen('8/8/8/8/8/8/8/8')) - console.assert( - validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R') - ) - console.assert( - validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') - ) - console.assert( - !validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1') - ) - console.assert(!validFen('anbqkbnr/8/8/8/8/8/PPPPPPPP/8')) - console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/')) - console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBN')) - console.assert(!validFen('888888/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR')) - console.assert(!validFen('888888/pppppppp/74/8/8/8/PPPPPPPP/RNBQKBNR')) - console.assert(!validFen({})) - } - - function validPositionObject (pos) { - if (!$.isPlainObject(pos)) return false - - for (var i in pos) { - if (!pos.hasOwnProperty(i)) continue - - if (!validSquare(i) || !validPieceCode(pos[i])) { - return false - } - } - - return true - } - - if (RUN_ASSERTS) { - console.assert(validPositionObject(START_POSITION)) - console.assert(validPositionObject({})) - console.assert(validPositionObject({ e2: 'wP' })) - console.assert(validPositionObject({ e2: 'wP', d2: 'wP' })) - console.assert(!validPositionObject({ e2: 'BP' })) - console.assert(!validPositionObject({ y2: 'wP' })) - console.assert(!validPositionObject(null)) - console.assert(!validPositionObject('start')) - console.assert(!validPositionObject(START_FEN)) - } - - function isTouchDevice () { - return 'ontouchstart' in document.documentElement - } - - function validJQueryVersion () { - return ( - typeof window.$ && - $.fn && - $.fn.jquery && - validSemanticVersion($.fn.jquery, MINIMUM_JQUERY_VERSION) - ) - } - - // --------------------------------------------------------------------------- - // Chess Util Functions - // --------------------------------------------------------------------------- - - // convert FEN piece code to bP, wK, etc - function fenToPieceCode (piece) { - // black piece - if (piece.toLowerCase() === piece) { - return 'b' + piece.toUpperCase() - } - - // white piece - return 'w' + piece.toUpperCase() - } - - // convert bP, wK, etc code to FEN structure - function pieceCodeToFen (piece) { - var pieceCodeLetters = piece.split('') - - // white piece - if (pieceCodeLetters[0] === 'w') { - return pieceCodeLetters[1].toUpperCase() - } - - // black piece - return pieceCodeLetters[1].toLowerCase() - } - - // convert FEN string to position object - // returns false if the FEN string is invalid - function fenToObj (fen) { - if (!validFen(fen)) return false - - // cut off any move, castling, etc info from the end - // we're only interested in position information - fen = fen.replace(/ .+$/, '') - - var rows = fen.split('/') - var position = {} - - var currentRow = 8 - for (var i = 0; i < 8; i++) { - var row = rows[i].split('') - var colIdx = 0 - - // loop through each character in the FEN section - for (var j = 0; j < row.length; j++) { - // number / empty squares - if (row[j].search(/[1-8]/) !== -1) { - var numEmptySquares = parseInt(row[j], 10) - colIdx = colIdx + numEmptySquares - } else { - // piece - var square = COLUMNS[colIdx] + currentRow - position[square] = fenToPieceCode(row[j]) - colIdx = colIdx + 1 - } - } - - currentRow = currentRow - 1 - } - - return position - } - - // position object to FEN string - // returns false if the obj is not a valid position object - function objToFen (obj) { - if (!validPositionObject(obj)) return false - - var fen = '' - - var currentRow = 8 - for (var i = 0; i < 8; i++) { - for (var j = 0; j < 8; j++) { - var square = COLUMNS[j] + currentRow - - // piece exists - if (obj.hasOwnProperty(square)) { - fen = fen + pieceCodeToFen(obj[square]) - } else { - // empty space - fen = fen + '1' - } - } - - if (i !== 7) { - fen = fen + '/' - } - - currentRow = currentRow - 1 - } - - // squeeze the empty numbers together - fen = squeezeFenEmptySquares(fen) - - return fen - } - - if (RUN_ASSERTS) { - console.assert(objToFen(START_POSITION) === START_FEN) - console.assert(objToFen({}) === '8/8/8/8/8/8/8/8') - console.assert(objToFen({ a2: 'wP', b2: 'bP' }) === '8/8/8/8/8/8/Pp6/8') - } - - function squeezeFenEmptySquares (fen) { - return fen - .replace(/11111111/g, '8') - .replace(/1111111/g, '7') - .replace(/111111/g, '6') - .replace(/11111/g, '5') - .replace(/1111/g, '4') - .replace(/111/g, '3') - .replace(/11/g, '2') - } - - function expandFenEmptySquares (fen) { - return fen - .replace(/8/g, '11111111') - .replace(/7/g, '1111111') - .replace(/6/g, '111111') - .replace(/5/g, '11111') - .replace(/4/g, '1111') - .replace(/3/g, '111') - .replace(/2/g, '11') - } - - // returns the distance between two squares - function squareDistance (squareA, squareB) { - var squareAArray = squareA.split('') - var squareAx = COLUMNS.indexOf(squareAArray[0]) + 1 - var squareAy = parseInt(squareAArray[1], 10) - - var squareBArray = squareB.split('') - var squareBx = COLUMNS.indexOf(squareBArray[0]) + 1 - var squareBy = parseInt(squareBArray[1], 10) - - var xDelta = Math.abs(squareAx - squareBx) - var yDelta = Math.abs(squareAy - squareBy) - - if (xDelta >= yDelta) return xDelta - return yDelta - } - - // returns the square of the closest instance of piece - // returns false if no instance of piece is found in position - function findClosestPiece (position, piece, square) { - // create array of closest squares from square - var closestSquares = createRadius(square) - - // search through the position in order of distance for the piece - for (var i = 0; i < closestSquares.length; i++) { - var s = closestSquares[i] - - if (position.hasOwnProperty(s) && position[s] === piece) { - return s - } - } - - return false - } - - // returns an array of closest squares from square - function createRadius (square) { - var squares = [] - - // calculate distance of all squares - for (var i = 0; i < 8; i++) { - for (var j = 0; j < 8; j++) { - var s = COLUMNS[i] + (j + 1) - - // skip the square we're starting from - if (square === s) continue - - squares.push({ - square: s, - distance: squareDistance(square, s) - }) - } - } - - // sort by distance - squares.sort(function (a, b) { - return a.distance - b.distance - }) - - // just return the square code - var surroundingSquares = [] - for (i = 0; i < squares.length; i++) { - surroundingSquares.push(squares[i].square) - } - - return surroundingSquares - } - - // given a position and a set of moves, return a new position - // with the moves executed - function calculatePositionFromMoves (position, moves) { - var newPosition = deepCopy(position) - - for (var i in moves) { - if (!moves.hasOwnProperty(i)) continue - - // skip the move if the position doesn't have a piece on the source square - if (!newPosition.hasOwnProperty(i)) continue - - var piece = newPosition[i] - delete newPosition[i] - newPosition[moves[i]] = piece - } - - return newPosition - } - - // TODO: add some asserts here for calculatePositionFromMoves - - // --------------------------------------------------------------------------- - // HTML - // --------------------------------------------------------------------------- - - function buildContainerHTML (hasSparePieces) { - var html = '
' - - if (hasSparePieces) { - html += '
' - } - - html += '
' - - if (hasSparePieces) { - html += '
' - } - - html += '
' - - return interpolateTemplate(html, CSS) - } - - // --------------------------------------------------------------------------- - // Config - // --------------------------------------------------------------------------- - - function expandConfigArgumentShorthand (config) { - if (config === 'start') { - config = { position: deepCopy(START_POSITION) } - } else if (validFen(config)) { - config = { position: fenToObj(config) } - } else if (validPositionObject(config)) { - config = { position: deepCopy(config) } - } - - // config must be an object - if (!$.isPlainObject(config)) config = {} - - return config - } - - // validate config / set default options - function expandConfig (config) { - // default for orientation is white - if (config.orientation !== 'black') config.orientation = 'white' - - // default for showNotation is true - if (config.showNotation !== false) config.showNotation = true - - // default for draggable is false - if (config.draggable !== true) config.draggable = false - - // default for dropOffBoard is 'snapback' - if (config.dropOffBoard !== 'trash') config.dropOffBoard = 'snapback' - - // default for sparePieces is false - if (config.sparePieces !== true) config.sparePieces = false - - // draggable must be true if sparePieces is enabled - if (config.sparePieces) config.draggable = true - - // default piece theme is wikipedia - if ( - !config.hasOwnProperty('pieceTheme') || - (!isString(config.pieceTheme) && !isFunction(config.pieceTheme)) - ) { - config.pieceTheme = 'img/chesspieces/wikipedia/{piece}.png' - } - - // animation speeds - if (!validAnimationSpeed(config.appearSpeed)) { config.appearSpeed = DEFAULT_APPEAR_SPEED } - if (!validAnimationSpeed(config.moveSpeed)) { config.moveSpeed = DEFAULT_MOVE_SPEED } - if (!validAnimationSpeed(config.snapbackSpeed)) { config.snapbackSpeed = DEFAULT_SNAPBACK_SPEED } - if (!validAnimationSpeed(config.snapSpeed)) { config.snapSpeed = DEFAULT_SNAP_SPEED } - if (!validAnimationSpeed(config.trashSpeed)) { config.trashSpeed = DEFAULT_TRASH_SPEED } - - // throttle rate - if (!validThrottleRate(config.dragThrottleRate)) { config.dragThrottleRate = DEFAULT_DRAG_THROTTLE_RATE } - - return config - } - - // --------------------------------------------------------------------------- - // Dependencies - // --------------------------------------------------------------------------- - - // check for a compatible version of jQuery - function checkJQuery () { - if (!validJQueryVersion()) { - var errorMsg = - 'Chessboard Error 1005: Unable to find a valid version of jQuery. ' + - 'Please include jQuery ' + - MINIMUM_JQUERY_VERSION + - ' or higher on the page' + - '\n\n' + - 'Exiting' + - ELLIPSIS - window.alert(errorMsg) - return false - } - - return true - } - - // return either boolean false or the $container element - function checkContainerArg (containerElOrString) { - if (containerElOrString === '') { - var errorMsg1 = - 'Chessboard Error 1001: ' + - 'The first argument to Chessboard() cannot be an empty string.' + - '\n\n' + - 'Exiting' + - ELLIPSIS - window.alert(errorMsg1) - return false - } - - // convert containerEl to query selector if it is a string - if ( - isString(containerElOrString) && - containerElOrString.charAt(0) !== '#' - ) { - containerElOrString = '#' + containerElOrString - } - - // containerEl must be something that becomes a jQuery collection of size 1 - var $container = $(containerElOrString) - if ($container.length !== 1) { - var errorMsg2 = - 'Chessboard Error 1003: ' + - 'The first argument to Chessboard() must be the ID of a DOM node, ' + - 'an ID query selector, or a single DOM node.' + - '\n\n' + - 'Exiting' + - ELLIPSIS - window.alert(errorMsg2) - return false - } - - return $container - } - - // --------------------------------------------------------------------------- - // Constructor - // --------------------------------------------------------------------------- - - function constructor (containerElOrString, config) { - // first things first: check basic dependencies - if (!checkJQuery()) return null - var $container = checkContainerArg(containerElOrString) - if (!$container) return null - - // ensure the config object is what we expect - config = expandConfigArgumentShorthand(config) - config = expandConfig(config) - - // DOM elements - var $board = null - var $draggedPiece = null - var $sparePiecesTop = null - var $sparePiecesBottom = null - - // constructor return object - var widget = {} - - // ------------------------------------------------------------------------- - // Stateful - // ------------------------------------------------------------------------- - - var boardBorderSize = 2 - var currentOrientation = 'white' - var currentPosition = {} - var draggedPiece = null - var draggedPieceLocation = null - var draggedPieceSource = null - var isDragging = false - var sparePiecesElsIds = {} - var squareElsIds = {} - var squareElsOffsets = {} - var squareSize = 16 - - // ------------------------------------------------------------------------- - // Validation / Errors - // ------------------------------------------------------------------------- - - function error (code, msg, obj) { - // do nothing if showErrors is not set - if ( - config.hasOwnProperty('showErrors') !== true || - config.showErrors === false - ) { - return - } - - var errorText = 'Chessboard Error ' + code + ': ' + msg - - // print to console - if ( - config.showErrors === 'console' && - typeof console === 'object' && - typeof console.log === 'function' - ) { - console.log(errorText) - if (arguments.length >= 2) { - console.log(obj) - } - return - } - - // alert errors - if (config.showErrors === 'alert') { - if (obj) { - errorText += '\n\n' + JSON.stringify(obj) - } - window.alert(errorText) - return - } - - // custom function - if (isFunction(config.showErrors)) { - config.showErrors(code, msg, obj) - } - } - - function setInitialState () { - currentOrientation = config.orientation - - // make sure position is valid - if (config.hasOwnProperty('position')) { - if (config.position === 'start') { - currentPosition = deepCopy(START_POSITION) - } else if (validFen(config.position)) { - currentPosition = fenToObj(config.position) - } else if (validPositionObject(config.position)) { - currentPosition = deepCopy(config.position) - } else { - error( - 7263, - 'Invalid value passed to config.position.', - config.position - ) - } - } - } - - // ------------------------------------------------------------------------- - // DOM Misc - // ------------------------------------------------------------------------- - - // calculates square size based on the width of the container - // got a little CSS black magic here, so let me explain: - // get the width of the container element (could be anything), reduce by 1 for - // fudge factor, and then keep reducing until we find an exact mod 8 for - // our square size - function calculateSquareSize () { - var containerWidth = parseInt($container.width(), 10) - - // defensive, prevent infinite loop - if (!containerWidth || containerWidth <= 0) { - return 0 - } - - // pad one pixel - var boardWidth = containerWidth - 1 - - while (boardWidth % 8 !== 0 && boardWidth > 0) { - boardWidth = boardWidth - 1 - } - - return boardWidth / 8 - } - - // create random IDs for elements - function createElIds () { - // squares on the board - for (var i = 0; i < COLUMNS.length; i++) { - for (var j = 1; j <= 8; j++) { - var square = COLUMNS[i] + j - squareElsIds[square] = square + '-' + uuid() - } - } - - // spare pieces - var pieces = 'KQRNBP'.split('') - for (i = 0; i < pieces.length; i++) { - var whitePiece = 'w' + pieces[i] - var blackPiece = 'b' + pieces[i] - sparePiecesElsIds[whitePiece] = whitePiece + '-' + uuid() - sparePiecesElsIds[blackPiece] = blackPiece + '-' + uuid() - } - } - - // ------------------------------------------------------------------------- - // Markup Building - // ------------------------------------------------------------------------- - - function buildBoardHTML (orientation) { - if (orientation !== 'black') { - orientation = 'white' - } - - var html = '' - - // algebraic notation / orientation - var alpha = deepCopy(COLUMNS) - var row = 8 - if (orientation === 'black') { - alpha.reverse() - row = 1 - } - - var squareColor = 'white' - for (var i = 0; i < 8; i++) { - html += '
' - for (var j = 0; j < 8; j++) { - var square = alpha[j] + row - - html += - '
' - - if (config.showNotation) { - // alpha notation - if ( - (orientation === 'white' && row === 1) || - (orientation === 'black' && row === 8) - ) { - html += '
' + alpha[j] + '
' - } - - // numeric notation - if (j === 0) { - html += '
' + row + '
' - } - } - - html += '
' // end .square - - squareColor = squareColor === 'white' ? 'black' : 'white' - } - html += '
' - - squareColor = squareColor === 'white' ? 'black' : 'white' - - if (orientation === 'white') { - row = row - 1 - } else { - row = row + 1 - } - } - - return interpolateTemplate(html, CSS) - } - - function buildPieceImgSrc (piece) { - if (isFunction(config.pieceTheme)) { - return config.pieceTheme(piece) - } - - if (isString(config.pieceTheme)) { - return interpolateTemplate(config.pieceTheme, { piece: piece }) - } - - // NOTE: this should never happen - error(8272, 'Unable to build image source for config.pieceTheme.') - return '' - } - - function buildPieceHTML (piece, hidden, id) { - var html = '' - - return interpolateTemplate(html, CSS) - } - - function buildSparePiecesHTML (color) { - var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP'] - if (color === 'black') { - pieces = ['bK', 'bQ', 'bR', 'bB', 'bN', 'bP'] - } - - var html = '' - for (var i = 0; i < pieces.length; i++) { - html += buildPieceHTML(pieces[i], false, sparePiecesElsIds[pieces[i]]) - } - - return html - } - - // ------------------------------------------------------------------------- - // Animations - // ------------------------------------------------------------------------- - - function animateSquareToSquare (src, dest, piece, completeFn) { - // get information about the source and destination squares - var $srcSquare = $('#' + squareElsIds[src]) - var srcSquarePosition = $srcSquare.offset() - var $destSquare = $('#' + squareElsIds[dest]) - var destSquarePosition = $destSquare.offset() - - // create the animated piece and absolutely position it - // over the source square - var animatedPieceId = uuid() - $('body').append(buildPieceHTML(piece, true, animatedPieceId)) - var $animatedPiece = $('#' + animatedPieceId) - $animatedPiece.css({ - display: '', - position: 'absolute', - top: srcSquarePosition.top, - left: srcSquarePosition.left - }) - - // remove original piece from source square - $srcSquare.find('.' + CSS.piece).remove() - - function onFinishAnimation1 () { - // add the "real" piece to the destination square - $destSquare.append(buildPieceHTML(piece)) - - // remove the animated piece - $animatedPiece.remove() - - // run complete function - if (isFunction(completeFn)) { - completeFn() - } - } - - // animate the piece to the destination square - var opts = { - duration: config.moveSpeed, - complete: onFinishAnimation1 - } - $animatedPiece.animate(destSquarePosition, opts) - } - - function animateSparePieceToSquare (piece, dest, completeFn) { - var srcOffset = $('#' + sparePiecesElsIds[piece]).offset() - var $destSquare = $('#' + squareElsIds[dest]) - var destOffset = $destSquare.offset() - - // create the animate piece - var pieceId = uuid() - $('body').append(buildPieceHTML(piece, true, pieceId)) - var $animatedPiece = $('#' + pieceId) - $animatedPiece.css({ - display: '', - position: 'absolute', - left: srcOffset.left, - top: srcOffset.top - }) - - // on complete - function onFinishAnimation2 () { - // add the "real" piece to the destination square - $destSquare.find('.' + CSS.piece).remove() - $destSquare.append(buildPieceHTML(piece)) - - // remove the animated piece - $animatedPiece.remove() - - // run complete function - if (isFunction(completeFn)) { - completeFn() - } - } - - // animate the piece to the destination square - var opts = { - duration: config.moveSpeed, - complete: onFinishAnimation2 - } - $animatedPiece.animate(destOffset, opts) - } - - // execute an array of animations - function doAnimations (animations, oldPos, newPos) { - if (animations.length === 0) return - - var numFinished = 0 - function onFinishAnimation3 () { - // exit if all the animations aren't finished - numFinished = numFinished + 1 - if (numFinished !== animations.length) return - - drawPositionInstant() - - // run their onMoveEnd function - if (isFunction(config.onMoveEnd)) { - config.onMoveEnd(deepCopy(oldPos), deepCopy(newPos)) - } - } - - for (var i = 0; i < animations.length; i++) { - var animation = animations[i] - - // clear a piece - if (animation.type === 'clear') { - $('#' + squareElsIds[animation.square] + ' .' + CSS.piece).fadeOut( - config.trashSpeed, - onFinishAnimation3 - ) - - // add a piece with no spare pieces - fade the piece onto the square - } else if (animation.type === 'add' && !config.sparePieces) { - $('#' + squareElsIds[animation.square]) - .append(buildPieceHTML(animation.piece, true)) - .find('.' + CSS.piece) - .fadeIn(config.appearSpeed, onFinishAnimation3) - - // add a piece with spare pieces - animate from the spares - } else if (animation.type === 'add' && config.sparePieces) { - animateSparePieceToSquare( - animation.piece, - animation.square, - onFinishAnimation3 - ) - - // move a piece from squareA to squareB - } else if (animation.type === 'move') { - animateSquareToSquare( - animation.source, - animation.destination, - animation.piece, - onFinishAnimation3 - ) - } - } - } - - // calculate an array of animations that need to happen in order to get - // from pos1 to pos2 - function calculateAnimations (pos1, pos2) { - // make copies of both - pos1 = deepCopy(pos1) - pos2 = deepCopy(pos2) - - var animations = [] - var squaresMovedTo = {} - - // remove pieces that are the same in both positions - for (var i in pos2) { - if (!pos2.hasOwnProperty(i)) continue - - if (pos1.hasOwnProperty(i) && pos1[i] === pos2[i]) { - delete pos1[i] - delete pos2[i] - } - } - - // find all the "move" animations - for (i in pos2) { - if (!pos2.hasOwnProperty(i)) continue - - var closestPiece = findClosestPiece(pos1, pos2[i], i) - if (closestPiece) { - animations.push({ - type: 'move', - source: closestPiece, - destination: i, - piece: pos2[i] - }) - - delete pos1[closestPiece] - delete pos2[i] - squaresMovedTo[i] = true - } - } - - // "add" animations - for (i in pos2) { - if (!pos2.hasOwnProperty(i)) continue - - animations.push({ - type: 'add', - square: i, - piece: pos2[i] - }) - - delete pos2[i] - } - - // "clear" animations - for (i in pos1) { - if (!pos1.hasOwnProperty(i)) continue - - // do not clear a piece if it is on a square that is the result - // of a "move", ie: a piece capture - if (squaresMovedTo.hasOwnProperty(i)) continue - - animations.push({ - type: 'clear', - square: i, - piece: pos1[i] - }) - - delete pos1[i] - } - - return animations - } - - // ------------------------------------------------------------------------- - // Control Flow - // ------------------------------------------------------------------------- - - function drawPositionInstant () { - // clear the board - $board.find('.' + CSS.piece).remove() - - // add the pieces - for (var i in currentPosition) { - if (!currentPosition.hasOwnProperty(i)) continue - - $('#' + squareElsIds[i]).append(buildPieceHTML(currentPosition[i])) - } - } - - function drawBoard () { - $board.html( - buildBoardHTML(currentOrientation, squareSize, config.showNotation) - ) - drawPositionInstant() - - if (config.sparePieces) { - if (currentOrientation === 'white') { - $sparePiecesTop.html(buildSparePiecesHTML('black')) - $sparePiecesBottom.html(buildSparePiecesHTML('white')) - } else { - $sparePiecesTop.html(buildSparePiecesHTML('white')) - $sparePiecesBottom.html(buildSparePiecesHTML('black')) - } - } - } - - function setCurrentPosition (position) { - var oldPos = deepCopy(currentPosition) - var newPos = deepCopy(position) - var oldFen = objToFen(oldPos) - var newFen = objToFen(newPos) - - // do nothing if no change in position - if (oldFen === newFen) return - - // run their onChange function - if (isFunction(config.onChange)) { - config.onChange(oldPos, newPos) - } - - // update state - currentPosition = position - } - - function isXYOnSquare (x, y) { - for (var i in squareElsOffsets) { - if (!squareElsOffsets.hasOwnProperty(i)) continue - - var s = squareElsOffsets[i] - if ( - x >= s.left && - x < s.left + squareSize && - y >= s.top && - y < s.top + squareSize - ) { - return i - } - } - - return 'offboard' - } - - // records the XY coords of every square into memory - function captureSquareOffsets () { - squareElsOffsets = {} - - for (var i in squareElsIds) { - if (!squareElsIds.hasOwnProperty(i)) continue - - squareElsOffsets[i] = $('#' + squareElsIds[i]).offset() - } - } - - function removeSquareHighlights () { - $board - .find('.' + CSS.square) - .removeClass(CSS.highlight1 + ' ' + CSS.highlight2) - } - - function snapbackDraggedPiece () { - // there is no "snapback" for spare pieces - if (draggedPieceSource === 'spare') { - trashDraggedPiece() - return - } - - removeSquareHighlights() - - // animation complete - function complete () { - drawPositionInstant() - $draggedPiece.css('display', 'none') - - // run their onSnapbackEnd function - if (isFunction(config.onSnapbackEnd)) { - config.onSnapbackEnd( - draggedPiece, - draggedPieceSource, - deepCopy(currentPosition), - currentOrientation - ) - } - } - - // get source square position - var sourceSquarePosition = $( - '#' + squareElsIds[draggedPieceSource] - ).offset() - - // animate the piece to the target square - var opts = { - duration: config.snapbackSpeed, - complete: complete - } - $draggedPiece.animate(sourceSquarePosition, opts) - - // set state - isDragging = false - } - - function trashDraggedPiece () { - removeSquareHighlights() - - // remove the source piece - var newPosition = deepCopy(currentPosition) - delete newPosition[draggedPieceSource] - setCurrentPosition(newPosition) - - // redraw the position - drawPositionInstant() - - // hide the dragged piece - $draggedPiece.fadeOut(config.trashSpeed) - - // set state - isDragging = false - } - - function dropDraggedPieceOnSquare (square) { - removeSquareHighlights() - - // update position - var newPosition = deepCopy(currentPosition) - delete newPosition[draggedPieceSource] - newPosition[square] = draggedPiece - setCurrentPosition(newPosition) - - // get target square information - var targetSquarePosition = $('#' + squareElsIds[square]).offset() - - // animation complete - function onAnimationComplete () { - drawPositionInstant() - $draggedPiece.css('display', 'none') - - // execute their onSnapEnd function - if (isFunction(config.onSnapEnd)) { - config.onSnapEnd(draggedPieceSource, square, draggedPiece) - } - } - - // snap the piece to the target square - var opts = { - duration: config.snapSpeed, - complete: onAnimationComplete - } - $draggedPiece.animate(targetSquarePosition, opts) - - // set state - isDragging = false - } - - function beginDraggingPiece (source, piece, x, y) { - // run their custom onDragStart function - // their custom onDragStart function can cancel drag start - if ( - isFunction(config.onDragStart) && - config.onDragStart( - source, - piece, - deepCopy(currentPosition), - currentOrientation - ) === false - ) { - return - } - - // set state - isDragging = true - draggedPiece = piece - draggedPieceSource = source - - // if the piece came from spare pieces, location is offboard - if (source === 'spare') { - draggedPieceLocation = 'offboard' - } else { - draggedPieceLocation = source - } - - // capture the x, y coords of all squares in memory - captureSquareOffsets() - - // create the dragged piece - $draggedPiece.attr('src', buildPieceImgSrc(piece)).css({ - display: '', - position: 'absolute', - left: x - squareSize / 2, - top: y - squareSize / 2 - }) - - if (source !== 'spare') { - // highlight the source square and hide the piece - $('#' + squareElsIds[source]) - .addClass(CSS.highlight1) - .find('.' + CSS.piece) - .css('display', 'none') - } - } - - function updateDraggedPiece (x, y) { - // put the dragged piece over the mouse cursor - $draggedPiece.css({ - left: x - squareSize / 2, - top: y - squareSize / 2 - }) - - // get location - var location = isXYOnSquare(x, y) - - // do nothing if the location has not changed - if (location === draggedPieceLocation) return - - // remove highlight from previous square - if (validSquare(draggedPieceLocation)) { - $('#' + squareElsIds[draggedPieceLocation]).removeClass(CSS.highlight2) - } - - // add highlight to new square - if (validSquare(location)) { - $('#' + squareElsIds[location]).addClass(CSS.highlight2) - } - - // run onDragMove - if (isFunction(config.onDragMove)) { - config.onDragMove( - location, - draggedPieceLocation, - draggedPieceSource, - draggedPiece, - deepCopy(currentPosition), - currentOrientation - ) - } - - // update state - draggedPieceLocation = location - } - - function stopDraggedPiece (location) { - // determine what the action should be - var action = 'drop' - if (location === 'offboard' && config.dropOffBoard === 'snapback') { - action = 'snapback' - } - if (location === 'offboard' && config.dropOffBoard === 'trash') { - action = 'trash' - } - - // run their onDrop function, which can potentially change the drop action - if (isFunction(config.onDrop)) { - var newPosition = deepCopy(currentPosition) - - // source piece is a spare piece and position is off the board - // if (draggedPieceSource === 'spare' && location === 'offboard') {...} - // position has not changed; do nothing - - // source piece is a spare piece and position is on the board - if (draggedPieceSource === 'spare' && validSquare(location)) { - // add the piece to the board - newPosition[location] = draggedPiece - } - - // source piece was on the board and position is off the board - if (validSquare(draggedPieceSource) && location === 'offboard') { - // remove the piece from the board - delete newPosition[draggedPieceSource] - } - - // source piece was on the board and position is on the board - if (validSquare(draggedPieceSource) && validSquare(location)) { - // move the piece - delete newPosition[draggedPieceSource] - newPosition[location] = draggedPiece - } - - var oldPosition = deepCopy(currentPosition) - - var result = config.onDrop( - draggedPieceSource, - location, - draggedPiece, - newPosition, - oldPosition, - currentOrientation - ) - if (result === 'snapback' || result === 'trash') { - action = result - } - } - - // do it! - if (action === 'snapback') { - snapbackDraggedPiece() - } else if (action === 'trash') { - trashDraggedPiece() - } else if (action === 'drop') { - dropDraggedPieceOnSquare(location) - } - } - - // ------------------------------------------------------------------------- - // Public Methods - // ------------------------------------------------------------------------- - - // clear the board - widget.clear = function (useAnimation) { - widget.position({}, useAnimation) - } - - // remove the widget from the page - widget.destroy = function () { - // remove markup - $container.html('') - $draggedPiece.remove() - - // remove event handlers - $container.unbind() - } - - // shorthand method to get the current FEN - widget.fen = function () { - return widget.position('fen') - } - - // flip orientation - widget.flip = function () { - return widget.orientation('flip') - } - - // move pieces - // TODO: this method should be variadic as well as accept an array of moves - widget.move = function () { - // no need to throw an error here; just do nothing - // TODO: this should return the current position - if (arguments.length === 0) return - - var useAnimation = true - - // collect the moves into an object - var moves = {} - for (var i = 0; i < arguments.length; i++) { - // any "false" to this function means no animations - if (arguments[i] === false) { - useAnimation = false - continue - } - - // skip invalid arguments - if (!validMove(arguments[i])) { - error(2826, 'Invalid move passed to the move method.', arguments[i]) - continue - } - - var tmp = arguments[i].split('-') - moves[tmp[0]] = tmp[1] - } - - // calculate position from moves - var newPos = calculatePositionFromMoves(currentPosition, moves) - - // update the board - widget.position(newPos, useAnimation) - - // return the new position object - return newPos - } - - widget.orientation = function (arg) { - // no arguments, return the current orientation - if (arguments.length === 0) { - return currentOrientation - } - - // set to white or black - if (arg === 'white' || arg === 'black') { - currentOrientation = arg - drawBoard() - return currentOrientation - } - - // flip orientation - if (arg === 'flip') { - currentOrientation = currentOrientation === 'white' ? 'black' : 'white' - drawBoard() - return currentOrientation - } - - error(5482, 'Invalid value passed to the orientation method.', arg) - } - - widget.position = function (position, useAnimation) { - // no arguments, return the current position - if (arguments.length === 0) { - return deepCopy(currentPosition) - } - - // get position as FEN - if (isString(position) && position.toLowerCase() === 'fen') { - return objToFen(currentPosition) - } - - // start position - if (isString(position) && position.toLowerCase() === 'start') { - position = deepCopy(START_POSITION) - } - - // convert FEN to position object - if (validFen(position)) { - position = fenToObj(position) - } - - // validate position object - if (!validPositionObject(position)) { - error(6482, 'Invalid value passed to the position method.', position) - return - } - - // default for useAnimations is true - if (useAnimation !== false) useAnimation = true - - if (useAnimation) { - // start the animations - var animations = calculateAnimations(currentPosition, position) - doAnimations(animations, currentPosition, position) - - // set the new position - setCurrentPosition(position) - } else { - // instant update - setCurrentPosition(position) - drawPositionInstant() - } - } - - widget.resize = function () { - // calulate the new square size - squareSize = calculateSquareSize() - - // set board width - $board.css('width', squareSize * 8 + 'px') - - // set drag piece size - $draggedPiece.css({ - height: squareSize, - width: squareSize - }) - - // spare pieces - if (config.sparePieces) { - $container - .find('.' + CSS.sparePieces) - .css('paddingLeft', squareSize + boardBorderSize + 'px') - } - - // redraw the board - drawBoard() - } - - // set the starting position - widget.start = function (useAnimation) { - widget.position('start', useAnimation) - } - - // ------------------------------------------------------------------------- - // Browser Events - // ------------------------------------------------------------------------- - - function stopDefault (evt) { - evt.preventDefault() - } - - function mousedownSquare (evt) { - // do nothing if we're not draggable - if (!config.draggable) return - - // do nothing if there is no piece on this square - var square = $(this).attr('data-square') - if (!validSquare(square)) return - if (!currentPosition.hasOwnProperty(square)) return - - beginDraggingPiece(square, currentPosition[square], evt.pageX, evt.pageY) - } - - function touchstartSquare (e) { - // do nothing if we're not draggable - if (!config.draggable) return - - // do nothing if there is no piece on this square - var square = $(this).attr('data-square') - if (!validSquare(square)) return - if (!currentPosition.hasOwnProperty(square)) return - - e = e.originalEvent - beginDraggingPiece( - square, - currentPosition[square], - e.changedTouches[0].pageX, - e.changedTouches[0].pageY - ) - } - - function mousedownSparePiece (evt) { - // do nothing if sparePieces is not enabled - if (!config.sparePieces) return - - var piece = $(this).attr('data-piece') - - beginDraggingPiece('spare', piece, evt.pageX, evt.pageY) - } - - function touchstartSparePiece (e) { - // do nothing if sparePieces is not enabled - if (!config.sparePieces) return - - var piece = $(this).attr('data-piece') - - e = e.originalEvent - beginDraggingPiece( - 'spare', - piece, - e.changedTouches[0].pageX, - e.changedTouches[0].pageY - ) - } - - function mousemoveWindow (evt) { - if (isDragging) { - updateDraggedPiece(evt.pageX, evt.pageY) - } - } - - var throttledMousemoveWindow = throttle( - mousemoveWindow, - config.dragThrottleRate - ) - - function touchmoveWindow (evt) { - // do nothing if we are not dragging a piece - if (!isDragging) return - - // prevent screen from scrolling - evt.preventDefault() - - updateDraggedPiece( - evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY - ) - } - - var throttledTouchmoveWindow = throttle( - touchmoveWindow, - config.dragThrottleRate - ) - - function mouseupWindow (evt) { - // do nothing if we are not dragging a piece - if (!isDragging) return - - // get the location - var location = isXYOnSquare(evt.pageX, evt.pageY) - - stopDraggedPiece(location) - } - - function touchendWindow (evt) { - // do nothing if we are not dragging a piece - if (!isDragging) return - - // get the location - var location = isXYOnSquare( - evt.originalEvent.changedTouches[0].pageX, - evt.originalEvent.changedTouches[0].pageY - ) - - stopDraggedPiece(location) - } - - function mouseenterSquare (evt) { - // do not fire this event if we are dragging a piece - // NOTE: this should never happen, but it's a safeguard - if (isDragging) return - - // exit if they did not provide a onMouseoverSquare function - if (!isFunction(config.onMouseoverSquare)) return - - // get the square - var square = $(evt.currentTarget).attr('data-square') - - // NOTE: this should never happen; defensive - if (!validSquare(square)) return - - // get the piece on this square - var piece = false - if (currentPosition.hasOwnProperty(square)) { - piece = currentPosition[square] - } - - // execute their function - config.onMouseoverSquare( - square, - piece, - deepCopy(currentPosition), - currentOrientation - ) - } - - function mouseleaveSquare (evt) { - // do not fire this event if we are dragging a piece - // NOTE: this should never happen, but it's a safeguard - if (isDragging) return - - // exit if they did not provide an onMouseoutSquare function - if (!isFunction(config.onMouseoutSquare)) return - - // get the square - var square = $(evt.currentTarget).attr('data-square') - - // NOTE: this should never happen; defensive - if (!validSquare(square)) return - - // get the piece on this square - var piece = false - if (currentPosition.hasOwnProperty(square)) { - piece = currentPosition[square] - } - - // execute their function - config.onMouseoutSquare( - square, - piece, - deepCopy(currentPosition), - currentOrientation - ) - } - - // ------------------------------------------------------------------------- - // Initialization - // ------------------------------------------------------------------------- - - function addEvents () { - // prevent "image drag" - $('body').on('mousedown mousemove', '.' + CSS.piece, stopDefault) - - // mouse drag pieces - $board.on('mousedown', '.' + CSS.square, mousedownSquare) - $container.on( - 'mousedown', - '.' + CSS.sparePieces + ' .' + CSS.piece, - mousedownSparePiece - ) - - // mouse enter / leave square - $board - .on('mouseenter', '.' + CSS.square, mouseenterSquare) - .on('mouseleave', '.' + CSS.square, mouseleaveSquare) - - // piece drag - var $window = $(window) - $window - .on('mousemove', throttledMousemoveWindow) - .on('mouseup', mouseupWindow) - - // touch drag pieces - if (isTouchDevice()) { - $board.on('touchstart', '.' + CSS.square, touchstartSquare) - $container.on( - 'touchstart', - '.' + CSS.sparePieces + ' .' + CSS.piece, - touchstartSparePiece - ) - $window - .on('touchmove', throttledTouchmoveWindow) - .on('touchend', touchendWindow) - } - } - - function initDOM () { - // create unique IDs for all the elements we will create - createElIds() - - // build board and save it in memory - $container.html(buildContainerHTML(config.sparePieces)) - $board = $container.find('.' + CSS.board) - - if (config.sparePieces) { - $sparePiecesTop = $container.find('.' + CSS.sparePiecesTop) - $sparePiecesBottom = $container.find('.' + CSS.sparePiecesBottom) - } - - // create the drag piece - var draggedPieceId = uuid() - $('body').append(buildPieceHTML('wP', true, draggedPieceId)) - $draggedPiece = $('#' + draggedPieceId) - - // TODO: need to remove this dragged piece element if the board is no - // longer in the DOM - - // get the border size - boardBorderSize = parseInt($board.css('borderLeftWidth'), 10) - - // set the size and draw the board - widget.resize() - } - - // ------------------------------------------------------------------------- - // Initialization - // ------------------------------------------------------------------------- - - setInitialState() - initDOM() - addEvents() - - // return the widget object - return widget - } // end constructor - - // TODO: do module exports here - window['Chessboard'] = constructor - - // support legacy ChessBoard name - window['ChessBoard'] = window['Chessboard'] - - // expose util functions - window['Chessboard']['fenToObj'] = fenToObj - window['Chessboard']['objToFen'] = objToFen -})() // end anonymous wrapper diff --git a/chessClient/js/chessboard-1.0.0.min.js b/chessClient/js/chessboard-1.0.0.min.js deleted file mode 100644 index ed7b5bbf..00000000 --- a/chessClient/js/chessboard-1.0.0.min.js +++ /dev/null @@ -1,831 +0,0 @@ -/*! chessboard.js v1.0.0 | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ -!(function () { - "use strict"; - var z = window.jQuery, - F = "abcdefgh".split(""), - r = 20, - A = "…", - W = "1.8.3", - e = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR", - G = pe(e), - n = 200, - t = 200, - o = 60, - a = 30, - i = 100, - H = {}; - function V(e, r, n) { - function t() { - (o = 0), a && ((a = !1), s()); - } - var o = 0, - a = !1, - i = [], - s = function () { - (o = window.setTimeout(t, r)), e.apply(n, i); - }; - return function (e) { - (i = arguments), o ? (a = !0) : s(); - }; - } - function Z() { - return "xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx".replace( - /x/g, - function (e) { - return ((16 * Math.random()) | 0).toString(16); - }, - ); - } - function _(e) { - return JSON.parse(JSON.stringify(e)); - } - function s(e) { - var r = e.split("."); - return { - major: parseInt(r[0], 10), - minor: parseInt(r[1], 10), - patch: parseInt(r[2], 10), - }; - } - function ee(e, r) { - for (var n in r) - if (r.hasOwnProperty(n)) - for (var t = "{" + n + "}", o = r[n]; -1 !== e.indexOf(t); ) - e = e.replace(t, o); - return e; - } - function re(e) { - return "string" == typeof e; - } - function ne(e) { - return "function" == typeof e; - } - function p(e) { - return "number" == typeof e && isFinite(e) && Math.floor(e) === e; - } - function c(e) { - return "fast" === e || "slow" === e || (!!p(e) && 0 <= e); - } - function te(e) { - if (!re(e)) return !1; - var r = e.split("-"); - return 2 === r.length && oe(r[0]) && oe(r[1]); - } - function oe(e) { - return re(e) && -1 !== e.search(/^[a-h][1-8]$/); - } - function u(e) { - return re(e) && -1 !== e.search(/^[bw][KQRNBP]$/); - } - function ae(e) { - if (!re(e)) return !1; - var r = (e = (function (e) { - return e - .replace(/8/g, "11111111") - .replace(/7/g, "1111111") - .replace(/6/g, "111111") - .replace(/5/g, "11111") - .replace(/4/g, "1111") - .replace(/3/g, "111") - .replace(/2/g, "11"); - })((e = e.replace(/ .+$/, "")))).split("/"); - if (8 !== r.length) return !1; - for (var n = 0; n < 8; n++) - if (8 !== r[n].length || -1 !== r[n].search(/[^kqrnbpKQRNBP1]/)) - return !1; - return !0; - } - function ie(e) { - if (!z.isPlainObject(e)) return !1; - for (var r in e) if (e.hasOwnProperty(r) && (!oe(r) || !u(e[r]))) return !1; - return !0; - } - function se() { - return ( - typeof window.$ && - z.fn && - z.fn.jquery && - (function (e, r) { - (e = s(e)), (r = s(r)); - var n = 1e5 * e.major * 1e5 + 1e5 * e.minor + e.patch; - return 1e5 * r.major * 1e5 + 1e5 * r.minor + r.patch <= n; - })(z.fn.jquery, W) - ); - } - function pe(e) { - if (!ae(e)) return !1; - for ( - var r, n = (e = e.replace(/ .+$/, "")).split("/"), t = {}, o = 8, a = 0; - a < 8; - a++ - ) { - for (var i = n[a].split(""), s = 0, p = 0; p < i.length; p++) { - if (-1 !== i[p].search(/[1-8]/)) s += parseInt(i[p], 10); - else - (t[F[s] + o] = - (r = i[p]).toLowerCase() === r - ? "b" + r.toUpperCase() - : "w" + r.toUpperCase()), - (s += 1); - } - o -= 1; - } - return t; - } - function ce(e) { - if (!ie(e)) return !1; - for (var r, n, t = "", o = 8, a = 0; a < 8; a++) { - for (var i = 0; i < 8; i++) { - var s = F[i] + o; - e.hasOwnProperty(s) - ? (t += - ((r = e[s]), - (n = void 0), - "w" === (n = r.split(""))[0] - ? n[1].toUpperCase() - : n[1].toLowerCase())) - : (t += "1"); - } - 7 !== a && (t += "/"), (o -= 1); - } - return (t = (function (e) { - return e - .replace(/11111111/g, "8") - .replace(/1111111/g, "7") - .replace(/111111/g, "6") - .replace(/11111/g, "5") - .replace(/1111/g, "4") - .replace(/111/g, "3") - .replace(/11/g, "2"); - })(t)); - } - function ue(e, r, n) { - for ( - var t = (function (e) { - for (var r = [], n = 0; n < 8; n++) - for (var t = 0; t < 8; t++) { - var o = F[n] + (t + 1); - e !== o && - r.push({ - square: o, - distance: - ((a = e), - (i = o), - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - (s = a.split("")), - (p = F.indexOf(s[0]) + 1), - (c = parseInt(s[1], 10)), - (u = i.split("")), - (f = F.indexOf(u[0]) + 1), - (d = parseInt(u[1], 10)), - (h = Math.abs(p - f)), - (l = Math.abs(c - d)), - l <= h ? h : l), - }); - } - var a, i, s, p, c, u, f, d, h, l; - r.sort(function (e, r) { - return e.distance - r.distance; - }); - var v = []; - for (n = 0; n < r.length; n++) v.push(r[n].square); - return v; - })(n), - o = 0; - o < t.length; - o++ - ) { - var a = t[o]; - if (e.hasOwnProperty(a) && e[a] === r) return a; - } - return !1; - } - function fe(e) { - return ( - "black" !== e.orientation && (e.orientation = "white"), - !1 !== e.showNotation && (e.showNotation = !0), - !0 !== e.draggable && (e.draggable = !1), - "trash" !== e.dropOffBoard && (e.dropOffBoard = "snapback"), - !0 !== e.sparePieces && (e.sparePieces = !1), - e.sparePieces && (e.draggable = !0), - (e.hasOwnProperty("pieceTheme") && - (re(e.pieceTheme) || ne(e.pieceTheme))) || - (e.pieceTheme = "img/chesspieces/wikipedia/{piece}.png"), - c(e.appearSpeed) || (e.appearSpeed = n), - c(e.moveSpeed) || (e.moveSpeed = t), - c(e.snapbackSpeed) || (e.snapbackSpeed = o), - c(e.snapSpeed) || (e.snapSpeed = a), - c(e.trashSpeed) || (e.trashSpeed = i), - (function (e) { - return p(e) && 1 <= e; - })(e.dragThrottleRate) || (e.dragThrottleRate = r), - e - ); - } - (H.alpha = "alpha-d2270"), - (H.black = "black-3c85d"), - (H.board = "board-b72b1"), - (H.chessboard = "chessboard-63f37"), - (H.clearfix = "clearfix-7da63"), - (H.highlight1 = "highlight1-32417"), - (H.highlight2 = "highlight2-9c5d2"), - (H.notation = "notation-322f9"), - (H.numeric = "numeric-fc462"), - (H.piece = "piece-417db"), - (H.row = "row-5277c"), - (H.sparePieces = "spare-pieces-7492f"), - (H.sparePiecesBottom = "spare-pieces-bottom-ae20f"), - (H.sparePiecesTop = "spare-pieces-top-4028b"), - (H.square = "square-55d63"), - (H.white = "white-1e1d7"), - (window.Chessboard = function (e, f) { - if ( - !(function () { - if (se()) return !0; - var e = - "Chessboard Error 1005: Unable to find a valid version of jQuery. Please include jQuery " + - W + - " or higher on the page\n\nExiting" + - A; - return window.alert(e), !1; - })() - ) - return null; - var n = (function (e) { - if ("" === e) { - var r = - "Chessboard Error 1001: The first argument to Chessboard() cannot be an empty string.\n\nExiting" + - A; - return window.alert(r), !1; - } - re(e) && "#" !== e.charAt(0) && (e = "#" + e); - var n = z(e); - if (1 === n.length) return n; - var t = - "Chessboard Error 1003: The first argument to Chessboard() must be the ID of a DOM node, an ID query selector, or a single DOM node.\n\nExiting" + - A; - return window.alert(t), !1; - })(e); - if (!n) return null; - f = fe( - (f = (function (e) { - return ( - "start" === e - ? (e = { position: _(G) }) - : ae(e) - ? (e = { position: pe(e) }) - : ie(e) && (e = { position: _(e) }), - z.isPlainObject(e) || (e = {}), - e - ); - })(f)), - ); - var r = null, - a = null, - t = null, - o = null, - i = {}, - s = 2, - p = "white", - c = {}, - u = null, - d = null, - h = null, - l = !1, - v = {}, - g = {}, - w = {}, - b = 16; - function m(e, r, n) { - if (!0 === f.hasOwnProperty("showErrors") && !1 !== f.showErrors) { - var t = "Chessboard Error " + e + ": " + r; - return "console" === f.showErrors && - "object" == typeof console && - "function" == typeof console.log - ? (console.log(t), void (2 <= arguments.length && console.log(n))) - : "alert" === f.showErrors - ? (n && (t += "\n\n" + JSON.stringify(n)), void window.alert(t)) - : void (ne(f.showErrors) && f.showErrors(e, r, n)); - } - } - function P(e) { - return ne(f.pieceTheme) - ? f.pieceTheme(e) - : re(f.pieceTheme) - ? ee(f.pieceTheme, { piece: e }) - : (m(8272, "Unable to build image source for config.pieceTheme."), - ""); - } - function y(e, r, n) { - var t = ''), - f.showNotation && - ((("white" === e && 1 === t) || - ("black" === e && 8 === t)) && - (r += - '
' + n[i] + "
"), - 0 === i && - (r += - '
' + t + "
")), - (r += "
"), - (o = "white" === o ? "black" : "white"); - } - (r += '
'), - (o = "white" === o ? "black" : "white"), - "white" === e ? (t -= 1) : (t += 1); - } - return ee(r, H); - })(p, f.showNotation), - ), - T(), - f.sparePieces && - ("white" === p - ? (t.html(x("black")), o.html(x("white"))) - : (t.html(x("white")), o.html(x("black")))); - } - function k(e) { - var r = _(c), - n = _(e); - ce(r) !== ce(n) && (ne(f.onChange) && f.onChange(r, n), (c = e)); - } - function E(e, r) { - for (var n in w) - if (w.hasOwnProperty(n)) { - var t = w[n]; - if (e >= t.left && e < t.left + b && r >= t.top && r < t.top + b) - return n; - } - return "offboard"; - } - function C() { - r.find("." + H.square).removeClass(H.highlight1 + " " + H.highlight2); - } - function B() { - C(); - var e = _(c); - delete e[h], k(e), T(), a.fadeOut(f.trashSpeed), (l = !1); - } - function I(e, r, n, t) { - (ne(f.onDragStart) && !1 === f.onDragStart(e, r, _(c), p)) || - ((l = !0), - (u = r), - (d = "spare" === (h = e) ? "offboard" : e), - (function () { - for (var e in ((w = {}), g)) - g.hasOwnProperty(e) && (w[e] = z("#" + g[e]).offset()); - })(), - a - .attr("src", P(r)) - .css({ - display: "", - position: "absolute", - left: n - b / 2, - top: t - b / 2, - }), - "spare" !== e && - z("#" + g[e]) - .addClass(H.highlight1) - .find("." + H.piece) - .css("display", "none")); - } - function M(e, r) { - a.css({ left: e - b / 2, top: r - b / 2 }); - var n = E(e, r); - n !== d && - (oe(d) && z("#" + g[d]).removeClass(H.highlight2), - oe(n) && z("#" + g[n]).addClass(H.highlight2), - ne(f.onDragMove) && f.onDragMove(n, d, h, u, _(c), p), - (d = n)); - } - function N(e) { - var r = "drop"; - if ( - ("offboard" === e && - "snapback" === f.dropOffBoard && - (r = "snapback"), - "offboard" === e && "trash" === f.dropOffBoard && (r = "trash"), - ne(f.onDrop)) - ) { - var n = _(c); - "spare" === h && oe(e) && (n[e] = u), - oe(h) && "offboard" === e && delete n[h], - oe(h) && oe(e) && (delete n[h], (n[e] = u)); - var t = _(c), - o = f.onDrop(h, e, u, n, t, p); - ("snapback" !== o && "trash" !== o) || (r = o); - } - "snapback" === r - ? (function () { - if ("spare" !== h) { - C(); - var e = z("#" + g[h]).offset(), - r = { - duration: f.snapbackSpeed, - complete: function () { - T(), - a.css("display", "none"), - ne(f.onSnapbackEnd) && f.onSnapbackEnd(u, h, _(c), p); - }, - }; - a.animate(e, r), (l = !1); - } else B(); - })() - : "trash" === r - ? B() - : "drop" === r && - (function (e) { - C(); - var r = _(c); - delete r[h], (r[e] = u), k(r); - var n = z("#" + g[e]).offset(), - t = { - duration: f.snapSpeed, - complete: function () { - T(), - a.css("display", "none"), - ne(f.onSnapEnd) && f.onSnapEnd(h, e, u); - }, - }; - a.animate(n, t), (l = !1); - })(e); - } - function j(e) { - e.preventDefault(); - } - function D(e) { - if (f.draggable) { - var r = z(this).attr("data-square"); - oe(r) && c.hasOwnProperty(r) && I(r, c[r], e.pageX, e.pageY); - } - } - function R(e) { - if (f.draggable) { - var r = z(this).attr("data-square"); - oe(r) && - c.hasOwnProperty(r) && - ((e = e.originalEvent), - I(r, c[r], e.changedTouches[0].pageX, e.changedTouches[0].pageY)); - } - } - function Q(e) { - f.sparePieces && - I("spare", z(this).attr("data-piece"), e.pageX, e.pageY); - } - function X(e) { - f.sparePieces && - I( - "spare", - z(this).attr("data-piece"), - (e = e.originalEvent).changedTouches[0].pageX, - e.changedTouches[0].pageY, - ); - } - (i.clear = function (e) { - i.position({}, e); - }), - (i.destroy = function () { - n.html(""), a.remove(), n.unbind(); - }), - (i.fen = function () { - return i.position("fen"); - }), - (i.flip = function () { - return i.orientation("flip"); - }), - (i.move = function () { - if (0 !== arguments.length) { - for (var e = !0, r = {}, n = 0; n < arguments.length; n++) - if (!1 !== arguments[n]) - if (te(arguments[n])) { - var t = arguments[n].split("-"); - r[t[0]] = t[1]; - } else - m( - 2826, - "Invalid move passed to the move method.", - arguments[n], - ); - else e = !1; - var o = (function (e, r) { - var n = _(e); - for (var t in r) - if (r.hasOwnProperty(t) && n.hasOwnProperty(t)) { - var o = n[t]; - delete n[t], (n[r[t]] = o); - } - return n; - })(c, r); - return i.position(o, e), o; - } - }), - (i.orientation = function (e) { - return 0 === arguments.length - ? p - : "white" === e || "black" === e - ? ((p = e), q(), p) - : "flip" === e - ? ((p = "white" === p ? "black" : "white"), q(), p) - : void m( - 5482, - "Invalid value passed to the orientation method.", - e, - ); - }), - (i.position = function (e, r) { - if (0 === arguments.length) return _(c); - if (re(e) && "fen" === e.toLowerCase()) return ce(c); - (re(e) && "start" === e.toLowerCase() && (e = _(G)), - ae(e) && (e = pe(e)), - ie(e)) - ? (!1 !== r && (r = !0), - r - ? ((function (e, r, n) { - if (0 !== e.length) - for (var t = 0, o = 0; o < e.length; o++) { - var a = e[o]; - "clear" === a.type - ? z("#" + g[a.square] + " ." + H.piece).fadeOut( - f.trashSpeed, - i, - ) - : "add" !== a.type || f.sparePieces - ? "add" === a.type && f.sparePieces - ? S(a.piece, a.square, i) - : "move" === a.type && - O(a.source, a.destination, a.piece, i) - : z("#" + g[a.square]) - .append(y(a.piece, !0)) - .find("." + H.piece) - .fadeIn(f.appearSpeed, i); - } - function i() { - (t += 1) === e.length && - (T(), ne(f.onMoveEnd) && f.onMoveEnd(_(r), _(n))); - } - })( - (function (e, r) { - (e = _(e)), (r = _(r)); - var n = [], - t = {}; - for (var o in r) - r.hasOwnProperty(o) && - e.hasOwnProperty(o) && - e[o] === r[o] && - (delete e[o], delete r[o]); - for (o in r) - if (r.hasOwnProperty(o)) { - var a = ue(e, r[o], o); - a && - (n.push({ - type: "move", - source: a, - destination: o, - piece: r[o], - }), - delete e[a], - delete r[o], - (t[o] = !0)); - } - for (o in r) - r.hasOwnProperty(o) && - (n.push({ type: "add", square: o, piece: r[o] }), - delete r[o]); - for (o in e) - e.hasOwnProperty(o) && - (t.hasOwnProperty(o) || - (n.push({ type: "clear", square: o, piece: e[o] }), - delete e[o])); - return n; - })(c, e), - c, - e, - ), - k(e)) - : (k(e), T())) - : m(6482, "Invalid value passed to the position method.", e); - }), - (i.resize = function () { - (b = (function () { - var e = parseInt(n.width(), 10); - if (!e || e <= 0) return 0; - for (var r = e - 1; r % 8 != 0 && 0 < r; ) r -= 1; - return r / 8; - })()), - r.css("width", 8 * b + "px"), - a.css({ height: b, width: b }), - f.sparePieces && - n.find("." + H.sparePieces).css("paddingLeft", b + s + "px"), - q(); - }), - (i.start = function (e) { - i.position("start", e); - }); - var Y = V(function (e) { - l && M(e.pageX, e.pageY); - }, f.dragThrottleRate), - K = V(function (e) { - l && - (e.preventDefault(), - M( - e.originalEvent.changedTouches[0].pageX, - e.originalEvent.changedTouches[0].pageY, - )); - }, f.dragThrottleRate); - function L(e) { - l && N(E(e.pageX, e.pageY)); - } - function U(e) { - l && - N( - E( - e.originalEvent.changedTouches[0].pageX, - e.originalEvent.changedTouches[0].pageY, - ), - ); - } - function $(e) { - if (!l && ne(f.onMouseoverSquare)) { - var r = z(e.currentTarget).attr("data-square"); - if (oe(r)) { - var n = !1; - c.hasOwnProperty(r) && (n = c[r]), - f.onMouseoverSquare(r, n, _(c), p); - } - } - } - function J(e) { - if (!l && ne(f.onMouseoutSquare)) { - var r = z(e.currentTarget).attr("data-square"); - if (oe(r)) { - var n = !1; - c.hasOwnProperty(r) && (n = c[r]), - f.onMouseoutSquare(r, n, _(c), p); - } - } - } - return ( - (p = f.orientation), - f.hasOwnProperty("position") && - ("start" === f.position - ? (c = _(G)) - : ae(f.position) - ? (c = pe(f.position)) - : ie(f.position) - ? (c = _(f.position)) - : m( - 7263, - "Invalid value passed to config.position.", - f.position, - )), - (function () { - !(function () { - for (var e = 0; e < F.length; e++) - for (var r = 1; r <= 8; r++) { - var n = F[e] + r; - g[n] = n + "-" + Z(); - } - var t = "KQRNBP".split(""); - for (e = 0; e < t.length; e++) { - var o = "w" + t[e], - a = "b" + t[e]; - (v[o] = o + "-" + Z()), (v[a] = a + "-" + Z()); - } - })(), - n.html( - (function (e) { - var r = '
'; - return ( - e && - (r += '
'), - (r += '
'), - e && - (r += - '
'), - ee((r += "
"), H) - ); - })(f.sparePieces), - ), - (r = n.find("." + H.board)), - f.sparePieces && - ((t = n.find("." + H.sparePiecesTop)), - (o = n.find("." + H.sparePiecesBottom))); - var e = Z(); - z("body").append(y("wP", !0, e)), - (a = z("#" + e)), - (s = parseInt(r.css("borderLeftWidth"), 10)), - i.resize(); - })(), - (function () { - z("body").on("mousedown mousemove", "." + H.piece, j), - r.on("mousedown", "." + H.square, D), - n.on("mousedown", "." + H.sparePieces + " ." + H.piece, Q), - r - .on("mouseenter", "." + H.square, $) - .on("mouseleave", "." + H.square, J); - var e = z(window); - e.on("mousemove", Y).on("mouseup", L), - "ontouchstart" in document.documentElement && - (r.on("touchstart", "." + H.square, R), - n.on("touchstart", "." + H.sparePieces + " ." + H.piece, X), - e.on("touchmove", K).on("touchend", U)); - })(), - i - ); - }), - (window.ChessBoard = window.Chessboard), - (window.Chessboard.fenToObj = pe), - (window.Chessboard.objToFen = ce); -})(); diff --git a/chessClient/package-lock.json b/chessClient/package-lock.json deleted file mode 100644 index cff8b14f..00000000 --- a/chessClient/package-lock.json +++ /dev/null @@ -1,5106 +0,0 @@ -{ - "name": "@chrisoakman/chessboardjs", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@chrisoakman/chessboardjs", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "chess960.js": "^0.2.0", - "dotenv": "^8.6.0", - "express": "^4.17.1", - "jquery": ">=3.4.1", - "nodejs": "0.0.0", - "nodemon": "^3.1.10", - "socket.io": "^4.2.0", - "sweetalert2": "^11.22.0", - "uniq": "^1.0.1" - }, - "devDependencies": { - "csso": "3.5.1", - "fs-plus": "3.1.1", - "kidif": "1.1.0", - "mustache": "2.3.0", - "standard": "^10.0.2", - "uglify-js": "3.6.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.12.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^3.0.4" - } - }, - "node_modules/acorn-jsx/node_modules/acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "node_modules/ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": ">=4.10.0" - } - }, - "node_modules/ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array.prototype.find": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.3.tgz", - "integrity": "sha512-fO/ORdOELvjbbeIfZfzrXFMhYHGofRGqd+am9zm3tZ4GlJINj/pA2eITyfd65Vg6+ZbHd/Cys7stpoRSWtQFdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/chess960.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chess960.js/-/chess960.js-0.2.0.tgz", - "integrity": "sha512-dT0tz/h+4FAjZAUTGih3uNXY2bk7akeSF6mvPRaf+Ur8yBBgttdIhG2MxUfAcdMLpdb5Pf5OlLiw4LvhT89lHg==" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true, - "license": "ISC" - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "1.0.0-alpha.29" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - } - }, - "node_modules/deglob/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/engine.io": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", - "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", - "license": "MIT", - "dependencies": { - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha512-x6LJGXWCGB/4YOBhL48yeppZTo+YQUNC37N5qqCpC1b1kkNzydlQHQAtPuUSFoZSxgIadrysQoW2Hq602P+uEA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "espree": "^3.4.0", - "esquery": "^1.0.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha512-UkFojTV1o0GOe1edOEiuI5ccYLJSuNngtqSeClNzhsmG8KPJ+7mRxgtp2oYhqZAK/brlXMoCd+VgXViE0AfyKw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=3.19.0", - "eslint-plugin-import": ">=2.2.0", - "eslint-plugin-node": ">=4.2.2", - "eslint-plugin-promise": ">=3.5.0", - "eslint-plugin-standard": ">=3.0.0" - } - }, - "node_modules/eslint-config-standard-jsx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", - "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=3.19.0", - "eslint-plugin-react": ">=6.10.3" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha512-HI8ShtDIy7gON76Nr3bu4zl0DuCLPo1Fud9P2lltOQKeiAS2r5/o/l3y+V8HJ1cDLFSz+tHu7/V9fI5jirwlbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^2.2.0", - "object-assign": "^4.0.1", - "resolve": "^1.1.6" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "integrity": "sha512-8HLeIYzOH4eltevxf+iC9Dtz/91yaeOqtlba5srcpQWLrv57F5NNG1RNLqAbpWJWDD4BxKuKjUveJY9W6Tbswg==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^1.1.1", - "contains-path": "^0.1.0", - "debug": "^2.2.0", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.2.0", - "eslint-module-utils": "^2.0.0", - "has": "^1.0.1", - "lodash.cond": "^4.3.0", - "minimatch": "^3.0.3", - "pkg-up": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "2.x - 3.x" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", - "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ignore": "^3.0.11", - "minimatch": "^3.0.2", - "object-assign": "^4.0.1", - "resolve": "^1.1.7", - "semver": "5.3.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=3.1.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", - "integrity": "sha512-kqXN7i1wfx5j7XuFVzuX4W3XDCEyNDsbd+O5NXWIl+zTSP510rKn2Xk8OO6JhM1ivXbkse0tQf6jjSTLS58Prg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha512-vFfMSxJynKlgOhIVjhlZyibVUg442Aiv3482XPkgdYV90T8nD2QvxGXILZGwZHYMQ/l+A/De14O9D0qjDelSrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.find": "^2.0.1", - "doctrine": "^1.2.2", - "has": "^1.0.1", - "jsx-ast-utils": "^1.3.4", - "object.assign": "^4.0.4" - }, - "engines": { - "node": ">=0.10" - }, - "peerDependencies": { - "eslint": "^2.0.0 || ^3.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha512-JyT7wqVYlaHxnljWMT7CKa0R1QDQqArTi6g8kYnexTHHuK7x3Vg//kCepnoTgdT9x/kDbSluXMhJgjBvgVRLlQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=3.19.0" - } - }, - "node_modules/eslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-plus": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fs-plus/-/fs-plus-3.1.1.tgz", - "integrity": "sha512-Se2PJdOWXqos1qVTkvqqjb0CSnfBnwwD+pq+z4ksT+e97mEShod/hrNg0TRCCsXPbJzcIq+NuzQhigunMWMJUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^1.5.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2", - "underscore-plus": "1.x" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-property": "^1.0.2" - } - }, - "node_modules/generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-property": "^1.0.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz", - "integrity": "sha512-Fa+aQV0FFMU4/Jg5mquHjv5DikTujeAWOpbGa9lsG2Qa+ehYxbGN3cCY/T+C+jAS8gKBnYN2MbrdNm0UCAcp7w==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true, - "license": "MIT" - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "license": "ISC" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-my-ip-valid": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", - "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-my-json-valid": { - "version": "2.20.6", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", - "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^5.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true, - "license": "ISC" - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", - "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "dev": true, - "license": "Public Domain", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha512-0LwSmMlQjjUdXsdlyYhEfBJCn2Chm0zgUBmfmf1++KUULh+JOdlzrZfiwe2zmlVJx44UF+KX/B/odBoeK9hxmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kidif": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kidif/-/kidif-1.1.0.tgz", - "integrity": "sha512-QmAHSkWEYssexdqWQshtfEd/AGeJAXHuV1pu607ePgNwwSf2X6fuIzUJsLtKbUQ/ak0pokdwDr8ocZ9sygKhTg==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "7.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", - "dev": true, - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", - "dev": true, - "license": "MPL-2.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/mustache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", - "integrity": "sha512-IgZ/cCHtDG1ft0vdDV9wrlNz20SvbUu2ECoDF6dhk2ZtedLNy1Kehy4oFlzmHPxcUQmVZuXYS2j+d0NkaEjTXQ==", - "dev": true, - "license": "MIT", - "bin": { - "mustache": "bin/mustache" - }, - "engines": { - "npm": ">=1.4.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", - "dev": true, - "license": "ISC" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/nodejs": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/nodejs/-/nodejs-0.0.0.tgz", - "integrity": "sha512-1V+0HwaB/dhxzidEFc4uJ3k52gLI4B6YBZgJIofjwYCSAkD6CI0me6TDBT2QM2nbGWNxCHcq9/wVynzQYZOhUg==", - "license": "ISC" - }, - "node_modules/nodemon": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", - "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pkg-up": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "integrity": "sha512-L+d849d9lz20hnRpUnWBRXOh+mAvygQpK7UuXiw+6QbPwL55RVgl+G+V936wCzs/6J7fj0pvgLY9OknZ+FqaNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", - "dev": true, - "license": "MIT", - "dependencies": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.3.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==", - "dev": true - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha512-/YF5Uk8hcwi7ima04ppkbA4RaRMdPMBfwAvAf8sufYOxsJRtbdoBsT8vGvlb+799BrlGdYrd+oczIA2eN2JdWA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "iojs": "*", - "node": ">=0.11.0" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/socket.io": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", - "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "license": "MIT", - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io-adapter/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io-parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/standard": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz", - "integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint": "~3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-config-standard-jsx": "4.0.2", - "eslint-plugin-import": "~2.2.0", - "eslint-plugin-node": "~4.2.2", - "eslint-plugin-promise": "~3.5.0", - "eslint-plugin-react": "~6.10.0", - "eslint-plugin-standard": "~3.0.1", - "standard-engine": "~7.0.0" - }, - "bin": { - "standard": "bin/cmd.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard-engine": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", - "integrity": "sha512-d/NYzmZxQRxbcoCqlbI9gEMPYq7TLsU6Ywpki54xhedEd0GC4G02j1B7mlexb7HovqRtAtcUPTLQx2MnCO/uyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "deglob": "^2.1.0", - "get-stdin": "^5.0.1", - "minimist": "^1.1.0", - "pkg-conf": "^2.0.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sweetalert2": { - "version": "11.23.0", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.23.0.tgz", - "integrity": "sha512-cKzzbC3C1sIs7o9XAMw4E8F9kBtGXsBDUsd2JZ8JM/dqa+nzWwSGM+9LLYILZWzWHzX9W+HJNHyBlbHPVS/krw==", - "license": "MIT", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/limonte" - } - }, - "node_modules/table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "license": "ISC", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "license": "MIT" - }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "dev": true, - "license": "MIT" - }, - "node_modules/underscore-plus": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore-plus/-/underscore-plus-1.7.0.tgz", - "integrity": "sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA==", - "dev": true, - "dependencies": { - "underscore": "^1.9.1" - } - }, - "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", - "license": "MIT" - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-homedir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - } - } -} diff --git a/chessClient/package.json b/chessClient/package.json deleted file mode 100644 index b84997ec..00000000 --- a/chessClient/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "author": "Chris Oakman (http://chrisoakman.com/)", - "name": "@chrisoakman/chessboardjs", - "description": "JavaScript chessboard widget", - "homepage": "https://chessboardjs.com", - "license": "MIT", - "version": "1.0.0", - "repository": { - "type": "git", - "url": "git://github.com/oakmac/chessboardjs.git" - }, - "files": [ - "dist/" - ], - "dependencies": { - "chess960.js": "^0.2.0", - "dotenv": "^8.6.0", - "express": "^4.17.1", - "jquery": ">=3.4.1", - "nodejs": "0.0.0", - "nodemon": "^3.1.10", - "socket.io": "^4.2.0", - "sweetalert2": "^11.22.0", - "uniq": "^1.0.1" - }, - "devDependencies": { - "csso": "3.5.1", - "fs-plus": "3.1.1", - "kidif": "1.1.0", - "mustache": "2.3.0", - "standard": "^10.0.2", - "uglify-js": "3.6.0" - }, - "scripts": { - "lint": "standard js/chessboard-1.0.0.js", - "standard": "standard --fix js/*.js ./*.js", - "website": "node scripts/website.js" - }, - "volta": { - "node": "18.20.8" - } -} From 445017987b7ff9978fdd0a7cef07a9e5a9ecfd8a Mon Sep 17 00:00:00 2001 From: F-Hejazi <60328249+F-Hejazi@users.noreply.github.com> Date: Fri, 5 Dec 2025 20:01:37 +0100 Subject: [PATCH 03/28] refactor: migrate Puzzles and Student components from iframe to React --- .../puzzles/puzzles-page/Puzzles.test.tsx | 236 +++-- .../features/puzzles/puzzles-page/Puzzles.tsx | 992 +++++++++--------- .../features/student/student-page/Student.tsx | 133 ++- react-ystemandchess/src/globals.ts | 2 +- 4 files changed, 735 insertions(+), 628 deletions(-) diff --git a/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.test.tsx b/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.test.tsx index 1029e8d0..87a8a623 100644 --- a/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.test.tsx +++ b/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.test.tsx @@ -2,30 +2,70 @@ import React from "react"; import { render, screen, fireEvent, act, waitFor } from "@testing-library/react"; import Puzzles from "./Puzzles"; import { MemoryRouter } from "react-router"; -import Swal from "sweetalert2"; -// Mock environment and chessClientURL for iframe src -jest.mock("../../../core/environments/environment", () => ({ +// Mock environment +jest.mock("../../../environments/environment", () => ({ environment: { urls: { - chessClientURL: "http://localhost:3000", - middlewareURL: "http://localhost:4000", + middlewareURL: "http://localhost:8000", + chessServerURL: "http://localhost:3001", }, }, })); -// Silence SweetAlert2 -jest.mock("sweetalert2", () => { +// Mock ChessBoard component +jest.mock("../../../components/ChessBoard/ChessBoard", () => { + const React = require("react"); return { __esModule: true, - default: { - fire: jest.fn(() => Promise.resolve({ isConfirmed: true })), - close: jest.fn(), - showLoading: jest.fn(), - }, + default: React.forwardRef((props: any, ref: any) => { + React.useImperativeHandle(ref, () => ({ + highlightMove: jest.fn(), + reset: jest.fn(), + loadPosition: jest.fn(), + getFen: jest.fn(() => "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"), + })); + return ( +
props.onMove?.({ from: "e2", to: "e4" })} + > + ChessBoard Mock +
+ ); + }), + ChessBoardRef: {}, }; }); +// Mock useChessSocket hook +jest.mock("../../../features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket", () => ({ + useChessSocket: jest.fn(() => ({ + connected: true, + sendMove: jest.fn(), + sendLastMove: jest.fn(), + sendMessage: jest.fn(), + startNewPuzzle: jest.fn(), + setGameStateWithColor: jest.fn(), + setPuzzleMoves: jest.fn(), + })), +})); + +// Mock globals module +jest.mock("../../../globals", () => ({ + SetPermissionLevel: jest.fn(() => Promise.resolve({ error: false, username: "test-user" })), +})); + +// Silence SweetAlert2 +jest.mock("sweetalert2", () => ({ + __esModule: true, + default: { + fire: jest.fn(() => Promise.resolve({ isConfirmed: true })), + close: jest.fn(), + showLoading: jest.fn(), + }, +})); + // Mock fetch for puzzles const mockPuzzles = [ { @@ -40,7 +80,7 @@ const mockPuzzles = [ FEN: "8/8/8/8/8/8/8/8 w - - 0 1", Moves: "a2a4 a7a5", Rating: 800, - Themes: "empty", + Themes: "endgame", }, ]; @@ -50,6 +90,7 @@ describe("Puzzles Component", () => { Promise.resolve({ ok: true, json: () => Promise.resolve(mockPuzzles), + status: 200, }) ) as jest.Mock; }); @@ -58,7 +99,7 @@ describe("Puzzles Component", () => { jest.clearAllMocks(); }); - test("renders iframe and puzzle buttons", async () => { + test("renders ChessBoard and puzzle buttons", async () => { await act(async () => { render( @@ -66,8 +107,8 @@ describe("Puzzles Component", () => { ); }); - - expect(screen.getByTitle("board")).toBeInTheDocument(); + + expect(screen.getByTestId("chessboard")).toBeInTheDocument(); expect(screen.getByText("Get New Puzzle")).toBeInTheDocument(); expect(screen.getByText("Show Hint")).toBeInTheDocument(); }); @@ -81,8 +122,13 @@ describe("Puzzles Component", () => { ); }); - const iframe = screen.getByTitle("board"); - expect(iframe).toBeInTheDocument(); + await waitFor(() => { + expect(global.fetch).toHaveBeenCalledWith( + expect.stringContaining("/puzzles/random?limit=20") + ); + }); + + expect(screen.getByTestId("chessboard")).toBeInTheDocument(); expect(document.getElementById("hint-text")).toBeInTheDocument(); }); @@ -99,59 +145,54 @@ describe("Puzzles Component", () => { const showHintBtn = screen.getByText("Show Hint"); expect(hintText).toHaveStyle("display: none"); + fireEvent.click(showHintBtn); expect(hintText).toHaveStyle("display: block"); + fireEvent.click(showHintBtn); expect(hintText).toHaveStyle("display: none"); }); - test("clicking get new puzzle triggers postMessage", async () => { - await act(async () => { - render( - - - - ); + test("clicking get new puzzle sends message", async () => { + const mockSendMessage = jest.fn(); + const { useChessSocket } = require("../../../features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket"); + + useChessSocket.mockReturnValue({ + connected: true, + sendMessage: mockSendMessage, + sendMove: jest.fn(), + sendLastMove: jest.fn(), + startNewPuzzle: jest.fn(), + setGameStateWithColor: jest.fn(), + setPuzzleMoves: jest.fn(), }); - const iframe = screen.getByTitle("board") as HTMLIFrameElement; - const spy = jest.spyOn(window, "postMessage"); - fireEvent.click(screen.getByText("Get New Puzzle")); - expect(iframe).toBeInTheDocument(); - }); - - test("handles 'puzzle completed' message", async () => { await act(async () => { render( - + ); }); - // send guest join message - act(() => { - window.dispatchEvent(new MessageEvent("message", { data: "guest" })); - }); + fireEvent.click(screen.getByText("Get New Puzzle")); - (Swal.fire as jest.Mock).mockResolvedValueOnce({ isConfirmed: true }); + expect(mockSendMessage).toHaveBeenCalledWith("next puzzle"); + }); - // now send puzzle completed message - act(() => { - window.dispatchEvent(new MessageEvent("message", { data: "puzzle completed" })); + test("shows disconnected indicator when not connected", async () => { + const { useChessSocket } = require("../../../features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket"); + + useChessSocket.mockReturnValue({ + connected: false, + sendMessage: jest.fn(), + sendMove: jest.fn(), + sendLastMove: jest.fn(), + startNewPuzzle: jest.fn(), + setGameStateWithColor: jest.fn(), + setPuzzleMoves: jest.fn(), }); - // assert puzzle completed Swal - await waitFor(() => { - expect(Swal.fire).toHaveBeenCalledWith( - "Puzzle completed", - "Good Job", - "success" - ) - }); - }); - - test("handles 'next puzzle' message", async () => { await act(async () => { render( @@ -160,40 +201,16 @@ describe("Puzzles Component", () => { ); }); - // not mocking puzzle array behvaior so we silence this console error that occurs when getNextPuzzle() is called - const consoleSpy = jest.spyOn(console, "error").mockImplementation(() => {}); - - act(() => { - window.dispatchEvent(new MessageEvent("message", { data: "next puzzle" })); - }); - - expect(Swal.close).toHaveBeenCalled(); - expect(consoleSpy).toHaveBeenCalledWith("Puzzle array is empty"); - - consoleSpy.mockRestore(); + expect(screen.getByText("Disconnected")).toBeInTheDocument(); }); - test("handles 'host' and 'guest' status", async () => { - await act(async () => { - render( - - - - ); - }); - - await waitFor(() => { - window.dispatchEvent(new MessageEvent("message", { data: "host" })); - }); - - await waitFor(() => { - window.dispatchEvent(new MessageEvent("message", { data: "guest" })); - }); + test("handles fetch failure gracefully", async () => { + (global.fetch as jest.Mock).mockImplementationOnce(() => + Promise.resolve({ ok: false, status: 500 }) + ); - expect(screen.getByTitle("board")).toBeInTheDocument(); - }); + const consoleSpy = jest.spyOn(console, "error").mockImplementation(() => {}); - test("handles FEN update message", async () => { await act(async () => { render( @@ -202,42 +219,26 @@ describe("Puzzles Component", () => { ); }); - act(() => { - window.dispatchEvent(new MessageEvent("message", { data: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" })); - }); + expect(screen.getByTestId("chessboard")).toBeInTheDocument(); - // No crash = pass. Could extend with state inspection if needed. - expect(screen.getByTitle("board")).toBeInTheDocument(); + consoleSpy.mockRestore(); }); - test("handles HTML hint message", async () => { - await act(async () => { - render( - - - - ); - }); - - // send guest join message - act(() => { - window.dispatchEvent(new MessageEvent("message", { data: "guest" })); + test("player move triggers socket sendMove and sendLastMove", async () => { + const mockSendMove = jest.fn(); + const mockSendLastMove = jest.fn(); + const { useChessSocket } = require("../../../features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket"); + + useChessSocket.mockReturnValue({ + connected: true, + sendMessage: jest.fn(), + sendMove: mockSendMove, + sendLastMove: mockSendLastMove, + startNewPuzzle: jest.fn(), + setGameStateWithColor: jest.fn(), + setPuzzleMoves: jest.fn(), }); - const hintHTML = `
Test: Hint content
`; - act(() => { - window.dispatchEvent(new MessageEvent("message", { data: hintHTML })); - }) - - const hintText = document.getElementById("hint-text")!; - expect(hintText.innerHTML).toContain("Hint content"); - }); - - test("handles fetch failure gracefully", async () => { - (global.fetch as jest.Mock).mockImplementationOnce(() => - Promise.resolve({ ok: false }) - ); - await act(async () => { render( @@ -246,6 +247,13 @@ describe("Puzzles Component", () => { ); }); - expect(screen.getByTitle("board")).toBeInTheDocument(); + const chessboard = screen.getByTestId("chessboard"); + + // Clicking triggers the mocked onMove + fireEvent.click(chessboard); + + // The move should send via socket + expect(mockSendMove).toHaveBeenCalled(); + expect(mockSendLastMove).toHaveBeenCalled(); }); }); \ No newline at end of file diff --git a/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.tsx b/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.tsx index d926cbc4..9d18f089 100644 --- a/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.tsx +++ b/react-ystemandchess/src/features/puzzles/puzzles-page/Puzzles.tsx @@ -4,22 +4,14 @@ import profileStyles from "./Puzzles-profile.module.scss"; import { Chess } from "chess.js"; import { themesName, themesDescription } from "../../../core/services/themesService"; import Swal from 'sweetalert2'; -import { environment } from "../../../core/environments/environment"; +import { environment } from "../../../environments/environment"; import { v4 as uuidv4 } from "uuid"; import { SetPermissionLevel } from "../../../globals"; -import { useCookies } from 'react-cookie'; +import { useCookies } from 'react-cookie'; +import ChessBoard, { ChessBoardRef } from '../../../components/ChessBoard/ChessBoard'; +import { useChessSocket } from '../../../features/lessons/piece-lessons/lesson-overlay/hooks/useChessSocket'; +import { Move } from "../../../core/types/chess"; -const chessClientURL = environment.urls.chessClientURL; - -// Global variables (keeping similar to Angular version) -let puzzleIndex = 0; -var moveList: string[] = []; -var computerColor: string; -var isPuzzleEnd = false; -var prevFEN: string; -var currentPuzzle: any; - -// types for the puzzle props type PuzzlesProps = { student?: any; mentor?: any; @@ -35,543 +27,571 @@ const Puzzles: React.FC = ({ }) => { const styles = styleType === "profile" ? profileStyles : pageStyles; - const chessboard = useRef(null); - const [puzzleArray, setPuzzleArray] = useState([]); - const [playerMove, setPlayerMove] = useState([]); - const [prevMove, setPrevMove] = useState([]); - const [currentFen, setCurrentFen] = useState(''); - const [prevFen, setPrevFen] = useState(''); - const [dbIndex, setDbIndex] = useState(0); - const [info, setInfo] = useState("Welcome to puzzles"); - const [playerColor, setPlayerColor] = useState(''); - const [themeList, setThemeList] = useState([]); - const [status, setStatus] = useState(""); - const swalRef = useRef(""); - const [cookies] = useCookies(['login']); - - // needed for time tracking - const [eventID, setEventID] = useState(null); - const [startTime, setStartTime] = useState(null); - const [username, setUsername] = useState(null); - const handleUnloadRef = useRef(() => {}); - - const postToBoard = (msg: any) => { - const board = chessboard.current; - if (!board || !board.contentWindow) return; - - const payload: any = { ...msg }; - - if (msg.from && msg.to && !msg.nextMove) { - const tempChess = new Chess(prevFEN); - try { - const moveResult = tempChess.move({ - from: msg.from, - to: msg.to, - promotion: 'q' - }); - - if (!moveResult) { - console.warn("Invalid move (null):", msg); - return; - } + // Refs + const chessBoardRef = useRef(null); + const gameRef = useRef(new Chess()); + const swalRef = useRef(""); + const moveListRef = useRef([]); + const isPuzzleEndRef = useRef(false); + const currentPuzzleRef = useRef(null); + + // Puzzle state + const [puzzleArray, setPuzzleArray] = useState([]); + const [currentFEN, setCurrentFEN] = useState(''); + const [dbIndex, setDbIndex] = useState(0); + const [playerColor, setPlayerColor] = useState<'white' | 'black'>('white'); + const [themeList, setThemeList] = useState([]); + const [status, setStatus] = useState(""); + const [highlightSquares, setHighlightSquares] = useState([]); + const [cookies] = useCookies(['login']); + const [isInitialized, setIsInitialized] = useState(false); + + // User identification + const [studentId] = useState(student || uuidv4()); + const [mentorId] = useState(mentor || uuidv4()); + + // Time tracking + const [eventID, setEventID] = useState(null); + const [startTime, setStartTime] = useState(null); + const [username, setUsername] = useState(null); + const handleUnloadRef = useRef(() => { }); + + // ============================================================================ + // SOCKET CONNECTION + // ============================================================================ + + const socket = useChessSocket({ + student: studentId, + mentor: mentorId, + role: role, + serverUrl: environment.urls.chessServerURL, + mode: 'puzzle', + + onBoardStateChange: (newFEN) => { + console.log("Board state received:", newFEN); + setCurrentFEN(newFEN); + gameRef.current.load(newFEN); + + if (chessBoardRef.current) { + chessBoardRef.current.loadPosition(newFEN); + } + }, + + onMessage: (msg) => { + console.log("Message received:", msg); + handleSocketMessage(msg); + }, + + onRoleAssigned: (assignedRole) => { + console.log("Role assigned:", assignedRole); + if (assignedRole === "host") { + setStatus("host"); + initializeComponent(); + if (styleType === "profile") { + if (status) { + if (role === "student") Swal.fire('Your mentor has left!', 'Creating a new puzzle for you', 'success'); + else Swal.fire('Your student has left!', 'Creating a new puzzle for you', 'success'); + } else { + if (role === "student") Swal.fire('You hosted a new puzzle!', 'Your mentor might join later', 'success'); + else Swal.fire('You hosted a new puzzle!', 'Your student might join later', 'success'); + } + } + } else if (assignedRole === "guest") { + if (status === "host") { + if (role === "student") Swal.fire('Your mentor has joined you!', 'You can now also see their moves', 'success'); + else Swal.fire('Your student has joined you!', 'You can now also see their moves', 'success'); + } else { + setStatus("guest"); + if (role === "student") Swal.fire('You joined your mentor\'s puzzle!', 'Have fun collaborating.', 'success'); + else Swal.fire('You joined your student\'s puzzle!', 'Have fun collaborating.', 'success'); + } + } + }, - prevFEN = tempChess.fen(); - payload.testFEN = prevFEN; // add for testing - } catch (error) { - console.warn("Invalid move (exception):", msg, error); - return; + onLastMove: (from, to) => { + console.log("Highlighting last move:", from, "→", to); + setHighlightSquares([from, to]); + if (chessBoardRef.current) { + chessBoardRef.current.highlightMove(from, to); + } + }, + + onError: (msg) => { + console.error("Socket error:", msg); + }, + }); + + // ============================================================================ + // SOCKET MESSAGE HANDLER + // ============================================================================ + + const handleSocketMessage = (msg: string) => { + if (msg === "puzzle completed") { + if (status === "guest") { + Swal.fire('Puzzle completed', 'Good Job', 'success').then((result) => { + if (result.isConfirmed) socket.sendMessage("next puzzle"); + }); + } + } else if (msg === "next puzzle") { + Swal.close(); + if (status === "guest") { + Swal.fire({ + title: 'Loading next puzzle', + text: 'Please wait...', + allowOutsideClick: false, + allowEscapeKey: false, + showConfirmButton: false, + didOpen: () => { + Swal.showLoading(); + swalRef.current = "loading"; + }, + willClose: () => { + swalRef.current = ""; + } + }); + } + getNextPuzzle(); + } else if (msg === "new game received") { + if (swalRef.current === "loading") Swal.close(); + } else if (msg.startsWith(" { + try { + const response = await fetch(`${environment.urls.middlewareURL}/puzzles/random?limit=20`); + if (response.ok) { + const jsonData = await response.json(); + setPuzzleArray(jsonData); + return jsonData; + } else { + throw new Error('Failed to fetch puzzles from backend'); + } + } catch (error) { + console.error('Error fetching puzzles:', error); + setPuzzleArray([]); + return []; + } }; - // Helper: Play the next computer move from moveList, update FEN, and highlight - const playComputerMove = () => { - if (moveList.length === 0) return; - const computerMove = moveList.shift(); - if (!computerMove) return; - const moveFrom = computerMove.substring(0, 2); - const moveTo = computerMove.substring(2, 4); - - setPrevMove([moveFrom, moveTo]); // For highlighting - - setTimeout(() => { - // Do NOT update FEN here — let iframe do it - // Do NOT include boardState in this message - const chessBoard = chessboard.current; - if (chessBoard && chessBoard.contentWindow) { - const expectedMove = moveList[0]; - if (!expectedMove || expectedMove.length < 4) { - console.warn("Expected move missing or invalid:", expectedMove); - return; - } + const initializeComponent = async () => { + if (isInitialized) return; + setIsInitialized(true); + const puzzles = await initPuzzleArray(); + if (puzzles && puzzles.length > 0) { + setPuzzleArray(puzzles); + const firstPuzzle = puzzles[0]; + currentPuzzleRef.current = firstPuzzle; + moveListRef.current = firstPuzzle?.Moves?.split(" ") || []; - chessBoard.contentWindow.postMessage( - JSON.stringify({ - from: moveFrom, - to: moveTo, - nextMove: [ - expectedMove.substring(0, 2), - expectedMove.substring(2, 4), - ], - }), - chessClientURL - ); - } - }, 300); + if (moveListRef.current.length === 0) { + console.warn("No valid moves in initial puzzle:", firstPuzzle); + return; + } + + setThemeList(firstPuzzle.Themes.split(" ")); + setStateAsActive(firstPuzzle); + updateInfoBox(firstPuzzle.Themes.split(" ")); + } }; - const setStateAsActive = (state: any) => { - if (!state?.FEN || !state?.Moves || !state?.Themes) { - console.warn("Puzzle is missing required fields:", state); - return; - } - console.log("click state---->", state); - // Determine which side is to move in the FEN - const sideToMove = state.FEN.split(" ")[1]; - // Player is the opposite color - const newPlayerColor = sideToMove === 'w' ? 'b' : 'w'; - setPlayerColor(newPlayerColor); - - - const firstObj = { - 'theme': state.Themes, - 'fen': state.FEN, - 'event': '' - }; - console.log("first obj---->", firstObj); + // ============================================================================ + // PUZZLE LOADING + // ============================================================================ - setTimeout(() => { - currentPuzzle = state; - startLesson(firstObj); - }, 200); - }; + const setStateAsActive = (state: any) => { + if (!state?.FEN || !state?.Moves || !state?.Themes) { + console.warn("Puzzle is missing required fields:", state); + return; + } - const startLesson = ({ theme, fen, event }: { theme: string, fen: string, event: string }) => { - if (!fen || fen.split("/").length !== 8) { - console.warn("Invalid or missing FEN:", fen); - return; - } - setCurrentFen(fen); - prevFEN = fen; - - moveList = currentPuzzle?.Moves?.split(" ") || []; - if (moveList.length === 0) { - console.warn("Empty or invalid moveList:", currentPuzzle); - return; - } + console.log("Loading puzzle:", state.PuzzleId); - isPuzzleEnd = false; - setPrevMove(["", ""]); + const sideToMove = state.FEN.split(" ")[1]; + const newPlayerColor = sideToMove === 'w' ? 'black' : 'white'; + setPlayerColor(newPlayerColor); - setTimeout(() => { - if (!fen || fen.split(" ").length < 2 || fen.split("/").length !== 8) { - console.warn("Invalid FEN detected before sending to iframe:", fen); - return; - } + setTimeout(() => { + currentPuzzleRef.current = state; + startLesson(state); + }, 200); + }; - const hintText = document.getElementById("hint-text"); - if(!hintText) return; - - // 1. First send puzzle setup - postToBoard({ - PuzzleId: currentPuzzle?.PuzzleId, - FEN: fen, - Moves: currentPuzzle?.Moves, - Rating: currentPuzzle?.Rating, - Themes: currentPuzzle?.Themes, - Hints: hintText.innerHTML - }); + const startLesson = (puzzle: any) => { + const fen = puzzle.FEN; - // 2. Wait for setup, then send the first computer move if needed - setTimeout(() => { - // If the puzzle starts with a computer move, play it - const tempChess = new Chess(fen); + if (!fen || fen.split("/").length !== 8) { + console.warn("Invalid or missing FEN:", fen); + return; + } - // First move is always by computer - playComputerMove(); + setCurrentFEN(fen); + gameRef.current.load(fen); - // Otherwise, wait for player move - }, 200); - }, 200); - }; + moveListRef.current = puzzle?.Moves?.split(" ") || []; + if (moveListRef.current.length === 0) { + console.warn("Empty or invalid move list:", puzzle); + return; + } - const getNextPuzzle = () => { - if (!puzzleArray || puzzleArray.length === 0) { - console.error("Puzzle array is empty"); - return; - } - console.log("getting new puzzle..."); - - const newDbIndex = (dbIndex + 1) % puzzleArray.length; - setDbIndex(newDbIndex); - - const nextPuzzle = puzzleArray[newDbIndex]; - if (!nextPuzzle.Moves) { - console.error("Selected puzzle has no moves"); - return; - } - - currentPuzzle = nextPuzzle; // Set currentPuzzle before calling setStateAsActive - isPuzzleEnd = false; - setPrevMove(["", ""]); // Reset prevMove for highlighting - - setThemeList(nextPuzzle.Themes.split(" ")); - console.log("Loading puzzle:", nextPuzzle.PuzzleId, "with FEN:", nextPuzzle.FEN); - if (!nextPuzzle?.FEN || nextPuzzle.FEN.split("/").length !== 8) { - console.warn("Skipping puzzle with invalid FEN:", nextPuzzle); - return; + isPuzzleEndRef.current = false; + setHighlightSquares([]); + + const puzzleMoves: Move[] = moveListRef.current.map(moveStr => ({ + from: moveStr.substring(0, 2), + to: moveStr.substring(2, 4), + promotion: moveStr.length > 4 ? moveStr[4] : undefined + })); + + socket.setPuzzleMoves(puzzleMoves); + + // Send puzzle to server + socket.setGameStateWithColor(fen, playerColor, puzzle.Themes); + + if (chessBoardRef.current) { + chessBoardRef.current.loadPosition(fen); + } + + setTimeout(() => { + // Computer plays first move + playComputerMove(); + }, 500); + }; + + const getNextPuzzle = () => { + if (!puzzleArray || puzzleArray.length === 0) { + console.error("Puzzle array is empty"); + return; + } + + console.log("Getting new puzzle..."); + + const newDbIndex = (dbIndex + 1) % puzzleArray.length; + setDbIndex(newDbIndex); + + const nextPuzzle = puzzleArray[newDbIndex]; + if (!nextPuzzle.Moves) { + console.error("Selected puzzle has no moves"); + return; + } + + currentPuzzleRef.current = nextPuzzle; + isPuzzleEndRef.current = false; + setHighlightSquares([]); + + setThemeList(nextPuzzle.Themes.split(" ")); + + if (!nextPuzzle?.FEN || nextPuzzle.FEN.split("/").length !== 8) { + console.warn("Skipping puzzle with invalid FEN:", nextPuzzle); + return; + } + + setStateAsActive(nextPuzzle); + updateInfoBox(nextPuzzle.Themes.split(" ")); + }; + + // ============================================================================ + // COMPUTER MOVE AUTOMATION + // ============================================================================ + + const playComputerMove = () => { + if (moveListRef.current.length === 0) return; + + const computerMove = moveListRef.current.shift(); + if (!computerMove || computerMove.length < 4) return; + + const moveFrom = computerMove.substring(0, 2); + const moveTo = computerMove.substring(2, 4); + const promotion = computerMove.length > 4 ? computerMove[4] : undefined; + + console.log("Computer move:", moveFrom, "→", moveTo); + + setTimeout(() => { + // Make move on local board + try { + const moveResult = gameRef.current.move({ + from: moveFrom, + to: moveTo, + promotion: promotion || 'q' + }); + + if (!moveResult) { + console.error("Invalid computer move"); + return; } - setStateAsActive(nextPuzzle); // This will call startLesson - updateInfoBox(nextPuzzle.Themes.split(" ")); - }; - const isFEN = (data: string): boolean => { - return data.split("/").length === 8; - }; + const newFEN = gameRef.current.fen(); + setCurrentFEN(newFEN); - const shuffleArray = (array: any[]) => { - for (let i = array.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [array[i], array[j]] = [array[j], array[i]]; + if (chessBoardRef.current) { + chessBoardRef.current.loadPosition(newFEN); } - }; - const initPuzzleArray = async () => { - try { - const response = await fetch(`${environment.urls.middlewareURL}/puzzles/random?limit=20`); - if (response.ok) { - const jsonData = await response.json(); - setPuzzleArray(jsonData); - return jsonData; - } else { - throw new Error('Failed to fetch puzzles from backend'); - } - } catch (error) { - console.error('Error fetching puzzles:', error); - setPuzzleArray([]); - return []; + // Highlight computer's move + setHighlightSquares([moveFrom, moveTo]); + if (chessBoardRef.current) { + chessBoardRef.current.highlightMove(moveFrom, moveTo); } - }; - const prefetchPuzzles = async () => { - try { - const response = await fetch(`${environment.urls.middlewareURL}/puzzles/random?limit=20`); - if (response.ok) { - const jsonData = await response.json(); - setPuzzleArray(prev => [...prev, ...jsonData]); + // Send to server for multiplayer sync + socket.sendMove({ from: moveFrom, to: moveTo, promotion }); + socket.sendLastMove(moveFrom, moveTo); + + } catch (error) { + console.error("Invalid computer move:", error); + } + }, 300); + }; + + // ============================================================================ + // PLAYER MOVE HANDLER + // ============================================================================ + + const handlePlayerMove = (move: Move) => { + if (isPuzzleEndRef.current || !moveListRef.current || moveListRef.current.length === 0) { + console.log("Ignoring move - puzzle ended or no moves left"); + return; + } + + const playerAttemptedMove = `${move.from}${move.to}${move.promotion || ''}`; + const expectedPlayerMove = moveListRef.current[0]; + + console.log("Player attempted:", playerAttemptedMove, "Expected:", expectedPlayerMove); + + if (playerAttemptedMove === expectedPlayerMove || + playerAttemptedMove === expectedPlayerMove.substring(0, 4)) { + // Correct move + moveListRef.current.shift(); // Remove player's move + + // Highlight player's move + setHighlightSquares([move.from, move.to]); + + // Send to server for multiplayer sync + socket.sendMove(move); + socket.sendLastMove(move.from, move.to); + + if (moveListRef.current.length === 0) { + // Puzzle completed! + isPuzzleEndRef.current = true; + setTimeout(() => { + Swal.fire('Puzzle completed', 'Good Job', 'success').then((result) => { + if (result.isConfirmed) { + socket.sendMessage("next puzzle"); } - } catch (error) { - console.error('Error prefetching puzzles:', error); + }); + }, 200); + socket.sendMessage("puzzle completed"); + } else { + // Computer's turn next + setTimeout(() => { + playComputerMove(); + }, 500); + } + } else { + // Incorrect move + console.log("Wrong move!"); + Swal.fire('Incorrect move', 'Try again!', 'error').then(() => { + // Reset puzzle + if (currentPuzzleRef.current) { + startLesson(currentPuzzleRef.current); } - }; + }); + } + }; - const updateInfoBox = (themes?: string[]) => { - const currentThemes = themes || themeList; - if (!currentThemes || currentThemes.length === 0) return; + const handleInvalidMove = () => { + console.log("Invalid move attempted"); + }; - const colorDisplay = playerColor === 'w' ? 'White' : 'Black'; - const rating = currentPuzzle?.Rating || 'N/A'; + // ============================================================================ + // HINT SYSTEM + // ============================================================================ - let hints = `
Puzzle Rating: ${rating}
`; + const updateInfoBox = (themes?: string[]) => { + const currentThemes = themes || themeList; + if (!currentThemes || currentThemes.length === 0) return; - for (let i = 0; i < currentThemes.length; i++) { - const key = currentThemes[i]; - const name = themesName[key] || key; - const desc = themesDescription[key]; + const rating = currentPuzzleRef.current?.Rating || 'N/A'; - if (!desc || desc === "No description available") continue; + let hints = `
Puzzle Rating: ${rating}
`; - hints += `
${name}: ${desc}
`; - } + for (let i = 0; i < currentThemes.length; i++) { + const key = currentThemes[i]; + const name = themesName[key] || key; + const desc = themesDescription[key]; - // notify other players to also update their hints - postToBoard({command: "message", message: hints}) + if (!desc || desc === "No description available") continue; - const hintText = document.getElementById("hint-text"); - if (hintText) { - hintText.innerHTML = hints; - hintText.style.display = "none"; // Still hidden until Show Hint clicked - } - }; + hints += `
${name}: ${desc}
`; + } - const openDialog = () => { - const hintText = document.getElementById('hint-text'); - if (hintText) { - hintText.style.display = hintText.style.display === "block" ? "none" : "block"; - } - }; + // Notify other players + socket.sendMessage(hints); - // initialize component, fetch puzzles & initiate first puzzle - const initializeComponent = async () => { - const puzzles = await initPuzzleArray(); - if (puzzles && puzzles.length > 0) { - setPuzzleArray(puzzles); - // Initialize first puzzle - const firstPuzzle = puzzles[0]; - currentPuzzle = firstPuzzle; - moveList = firstPuzzle?.Moves?.split(" ") || []; - if (moveList.length === 0) { - console.warn("No valid moves in initial puzzle:", firstPuzzle); - return; - } + const hintText = document.getElementById("hint-text"); + if (hintText) { + hintText.innerHTML = hints; + hintText.style.display = "none"; + } + }; - setThemeList(firstPuzzle.Themes.split(" ")); - setStateAsActive(firstPuzzle); - updateInfoBox(firstPuzzle.Themes.split(" ")); - } - }; + const openDialog = () => { + const hintText = document.getElementById('hint-text'); + if (hintText) { + hintText.style.display = hintText.style.display === "block" ? "none" : "block"; + } + }; - // try joining puzzle as guest / creating puzzle as host - const joinOrCreatePuzzle = () => { - if(!student) student = uuidv4(); // generate random username for navBar puzzles & unlogged-in users - if(!mentor) mentor = uuidv4(); - postToBoard({ // send student & mentor info before server creates a game - command: "userinfo", - student: student, - mentor: mentor, - role: role - }); - // try creating / joining, server will then notify whether user is a guest or host - postToBoard({command: "newPuzzle"}); + // ============================================================================ + // TIME TRACKING + // ============================================================================ + + async function startRecording() { + const uInfo = await SetPermissionLevel(cookies); + if (uInfo?.error) return; + + setUsername(uInfo?.username); + + const response = await fetch( + `${environment.urls.middlewareURL}/timeTracking/start?username=${uInfo.username}&eventType=puzzle`, + { + method: 'POST', + headers: { 'Authorization': `Bearer ${cookies.login}` } + } + ); + + if (response.status !== 200) { + console.log("Time tracking error:", response); + return; } - // start recording when users started browsing website - async function startRecording() { - const uInfo = await SetPermissionLevel(cookies); // get logged-in user info + const data = await response.json(); + setEventID(data.eventId); + setStartTime(data.startTime); + } + + handleUnloadRef.current = async () => { + if (!startTime || !username || !eventID) return; - // do nothing if the user is not logged in - if(uInfo.error) return; - setUsername(uInfo.username); // else record username + try { + const startDate = new Date(startTime); + const endDate = new Date(); + const diffInSeconds = Math.floor((endDate.getTime() - startDate.getTime()) / 1000); - // start recording user's time spent browsing the website - const response = await fetch( - `${environment.urls.middlewareURL}/timeTracking/start?username=${uInfo.username}&eventType=puzzle`, + const response = await fetch( + `${environment.urls.middlewareURL}/timeTracking/update?username=${username}&eventType=puzzle&eventId=${eventID}&totalTime=${diffInSeconds}`, { - method: 'POST', - headers: { 'Authorization': `Bearer ${cookies.login}` } + method: 'PUT', + headers: { 'Authorization': `Bearer ${cookies.login}` } } - ); - if(response.status != 200) console.log(response) // error handling + ); - // if data is fetched, record for later updates - const data = await response.json(); - setEventID(data.eventId); - setStartTime(data.startTime); + if (response.status !== 200) console.log("Time tracking update error:", response); + console.log("Time spent on puzzles:", diffInSeconds); + } catch (err) { + console.log("Time tracking error:", err); } + }; - // handler called when user exist the website, complete recording time - handleUnloadRef.current = async () => { - try { - const startDate = new Date(startTime) - const endDate = new Date(); - const diffInMs = endDate.getTime() - startDate.getTime(); // time elapsed in milliseconds - const diffInSeconds = Math.floor(diffInMs / 1000); // time elapsed in seconds - - // update the time users spent browsing website - const response = await fetch( - `${environment.urls.middlewareURL}/timeTracking/update?username=${username}&eventType=puzzle&eventId=${eventID}&totalTime=${diffInSeconds}`, - { - method: 'PUT', - headers: { 'Authorization': `Bearer ${cookies.login}` } - } - ); - if(response.status != 200) console.log(response) // error handling - - console.log("time spent on puzzles:", diffInSeconds); - } catch (err) { - console.log(err) - } + // ============================================================================ + // LIFECYCLE + // ============================================================================ + + useEffect(() => { + startRecording(); + window.addEventListener('beforeunload', handleUnloadRef.current); + + return () => { + window.removeEventListener('beforeunload', handleUnloadRef.current); + handleUnloadRef.current(); }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); - useEffect(() => { - startRecording(); - window.addEventListener('beforeunload', handleUnloadRef.current); + useEffect(() => { + if (socket.connected && status === "" && !isInitialized) { + // Try joining/creating puzzle + socket.startNewPuzzle(); + } + }, [socket.connected, status, isInitialized, socket]); - return () => { - window.removeEventListener('beforeunload', handleUnloadRef.current); // remove listener when unloading - handleUnloadRef.current(); // when navigating away, stop recording time spent - } - }, []) - - useEffect(() => { - const eventMethod = window.addEventListener ? 'addEventListener' : 'attachEvent'; - const eventer = (window as any)[eventMethod]; - const messageEvent = eventMethod === 'attachEvent' ? 'onmessage' : 'message'; - - const messageHandler = (e: MessageEvent) => { - let info = e.data; - if (typeof info === 'string' && info[0] === "{") { - try { - let jsonInfo = JSON.parse(info); - if ( - "from" in jsonInfo && "to" in jsonInfo && - typeof jsonInfo.from === 'string' && typeof jsonInfo.to === 'string' && - jsonInfo.from.length === 2 && jsonInfo.to.length === 2 - ) { - const playerAttemptedMove = `${jsonInfo.from}${jsonInfo.to}` - // Only allow if it's the player's turn and moveList[0] is the expected move - if (isPuzzleEnd || !moveList || moveList.length === 0) return; - - const expectedPlayerMove = moveList[0]; - // Now, moveList[0] is always the player's move - - if (playerAttemptedMove === expectedPlayerMove) { - // Correct move - moveList.shift(); // Remove player's move - - setPrevFen(currentFen); - - if (moveList.length === 0) { - isPuzzleEnd = true; - setTimeout(() => { - Swal.fire('Puzzle completed', 'Good Job', 'success').then((result) => { - if(result.isConfirmed) postToBoard({command: "message", message: "next puzzle"}); // notify other players to move on to the next puzzle - }); - }, 200); - postToBoard({command: "message", message: "puzzle completed"}) // notify other players of the completed puzzle - } else { - // Now it's computer's turn, play the next move automatically - playComputerMove(); - } - } else { - // Incorrect move, reload the puzzle - Swal.fire('Incorrect move', 'Try again!', 'error').then(() => { - startLesson({ - theme: currentPuzzle.Themes, - fen: currentPuzzle.FEN, - event: '' - }); - }); - } - } - } catch (error) { - console.log("Error parsing JSON from iframe:", error); - } - } else if (info && typeof info === 'string' && isFEN(info)) { - // FEN update from iframe (after a move) - setCurrentFen(info); // Update current FEN based on board's state - // Highlighting logic for computer's response (if prevMove is set) - if (prevMove[0] && prevMove[1]) { - const chessBoard = chessboard.current; - if (chessBoard && chessBoard.contentWindow) { - chessBoard.contentWindow.postMessage( - JSON.stringify({ - highlightFrom: prevMove[0], - highlightTo: prevMove[1] - }), - chessClientURL - ); - setPrevMove(["", ""]); // Reset after highlighting - } - } - } else if (typeof info == "string" && info == "host"){ // user has created a new puzzle in server - setStatus("host"); // change status - initializeComponent(); - if (styleType === "profile") { - if (status){ - if (role == "student") Swal.fire('Your mentor has left!', 'Creating a new puzzle for you', 'success'); - else Swal.fire('Your student has left!', 'Creating a new puzzle for you', 'success'); - } else { - if (role == "student") Swal.fire('You hosted a new puzzle!', 'Your mentor might join later', 'success'); - else Swal.fire('You hosted a new puzzle!', 'Your student might join later', 'success'); - } - } - } else if (typeof info == "string" && info == "guest"){ // user has joined an existing puzzle in server - if (status == "host") { - if (role == "student") Swal.fire('Your mentor has joined you!', 'You can now also see their moves,', 'success'); - else Swal.fire('Your student has joined you!', 'You can now also see their moves,', 'success'); - } else { - setStatus("guest"); - if (role == "student") Swal.fire('You joined your mentor\'s puzzle!', 'Have fun collaborating.', 'success'); - else Swal.fire('You joined your student\'s puzzle!', 'Have fun collaborating.', 'success'); - } - // no need to fetch lessons, guest's chessboard is dependent on host's for simplicity - } else if (typeof info == "string" && info == "puzzle completed" ) { // puzzle completed - if (status == "guest") { // host would already have fired alert - Swal.fire('Puzzle completed', 'Good Job', 'success').then((result) => { - if(result.isConfirmed) postToBoard({command: "message", message: "next puzzle"}); // notify other players to move on to the next puzzle - }); - } - } else if (typeof info == "string" && info == "next puzzle") { // player / other users want to move to the next puzzle - Swal.close(); - if(status == "guest"){ - Swal.fire({ - title: 'Loading next lesson', - text: 'Please wait...', - allowOutsideClick: false, - allowEscapeKey: false, - showConfirmButton: false, - didOpen: () => { - Swal.showLoading(); - swalRef.current = "loading"; - }, - willClose: () => { - swalRef.current = ""; - } - }); - } - getNextPuzzle(); - } else if (typeof info == "string" && info.startsWith("