UNPKG

chess-easy

Version:

Chess engine that makes writing chessgame easier than writing a calculator

48 lines 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class FenValidator { static validateFen(fen) { const fenArray = fen.split(" "); if (fenArray.length !== 6) return false; const [gameState, movesNext, castlingAvailability, enPassantPossibility, halfMoveClock, fullMoveCounter,] = fenArray; return (this.validateGameState(gameState) && this.validateMovesNext(movesNext) && this.validateCastlingAvaliability(castlingAvailability) && this.validateEnPassantPossibility(enPassantPossibility) && this.validateMovesCount(halfMoveClock) && this.validateMovesCount(fullMoveCounter)); } } FenValidator.validateGameRow = (row) => { const hasMultiDigitNumbers = /\d{2}/.test(row); const symbols = row.split(""); const areAllSymbolsValid = symbols.every(symbol => /[pkqbnrPKQBNR]|[1-8]/.test(symbol)); const sumOfFields = symbols.reduce((acc, curr) => { const parsed = parseInt(curr, 10); return Number.isInteger(parsed) ? acc + parsed : acc + 1; }, 0); const isSumOfFieldsCorrect = sumOfFields === 8; return !hasMultiDigitNumbers && areAllSymbolsValid && isSumOfFieldsCorrect; }; FenValidator.validateGameState = (gameState) => { const rows = gameState.split("/"); if (rows.length !== 8) return false; return rows.every(FenValidator.validateGameRow); }; FenValidator.validateMovesNext = (movesNext) => { return /^(w|b)$/.test(movesNext); }; FenValidator.validateCastlingAvaliability = (castlingAvailability) => { return /^(q|KQ?k?q?|kq?|Qk?q?)$|^-$/.test(castlingAvailability); }; FenValidator.validateEnPassantPossibility = (enPassantPossibility) => { return /^([a-h][36])$|^-$/.test(enPassantPossibility); }; FenValidator.validateMovesCount = (movesCount) => { const movesValue = parseInt(movesCount, 10); return !isNaN(movesValue) && movesValue >= 0; }; exports.default = FenValidator; //# sourceMappingURL=FenValidator.js.map