chess-easy
Version:
Chess engine that makes writing chessgame easier than writing a calculator
48 lines • 2.04 kB
JavaScript
;
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