UNPKG

chess-legal-moves

Version:

Analyses a given chess game position in Fen notation to return legal moves and provides the next game position after a given move

52 lines (51 loc) 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapPositionToBoardIndex = exports.parseMove = void 0; var regex_1 = require("../helpers/regex"); // Document parseMove function function parseMove(moveString) { // @TODO extract functions to improve readability // @TODO test everything var from = moveString.substring(0, 2); var to = moveString.substring(2, 4); var parsedMove = { move: [mapPositionToBoardIndex(from), mapPositionToBoardIndex(to)], }; var isPromotionMove = moveString.match(regex_1.default.promotionMove); if (isPromotionMove) parsedMove.promotionPiece = moveString.substring(4); var isCastlingMove = moveString.match(regex_1.default.castlingMove); var castlingMap = { e1g1: { moveIndexes: [7, 5], castlingLetter: 'K' }, e1c1: { moveIndexes: [0, 3], castlingLetter: 'Q' }, e8g8: { moveIndexes: [63, 61], castlingLetter: 'k' }, e8c8: { moveIndexes: [56, 59], castlingLetter: 'q' }, }; if (isCastlingMove) parsedMove.castling = { rookMove: castlingMap[moveString].moveIndexes, letter: castlingMap[moveString].castlingLetter, }; var isPawnDoubleMove = moveString.match(regex_1.default.pawnDoubleMove); if (isPawnDoubleMove) { var from_1 = moveString.substring(0, 2); parsedMove.enPassantTarget = from_1; parsedMove.enPassantTarget = parsedMove.enPassantTarget.replace('2', '3'); parsedMove.enPassantTarget = parsedMove.enPassantTarget.replace('7', '6'); } return parsedMove; } exports.parseMove = parseMove; function mapPositionToBoardIndex(position) { var filesLetter = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; var indexMap = {}; var counter = 0; for (var rank = 1; rank <= 8; rank++) { for (var fileIndex = 0; fileIndex < filesLetter.length; fileIndex++) { indexMap[filesLetter[fileIndex] + rank.toString()] = counter; counter++; } } return indexMap[position]; } exports.mapPositionToBoardIndex = mapPositionToBoardIndex;