chess-fen
v1.0.2
Published
chess-fen is a library which includes tools for working with Forsyth–Edwards Notation (FEN) in an immutable manner.
Downloads
4,761
Readme
chess-fen
chess-fen is a library which includes tools for working with Forsyth–Edwards Notation (FEN) in an immutable manner.
Installation
npm install chess-fen
Version 1.0.0+
Since 1.0.0 chess-fen is no longer also a standard notation parser and instead focuses on being a
simple data structure with basic primitives for working with FEN notation. This means the previous
Fen.move()
method has been removed along with associated classes, types and functions for working
with parsing chess moves.
There have also been some significant changes to the types ( https://github.com/cymantex/chess-fen/blob/master/src/module/types.ts).
Example usage
const emptyPosition = new Fen(Fen.emptyPosition);
//Each update() creates a new Fen instance.
const smotheredMate = emptyPosition
.update("h8", PIECES.k)
.update("h7", PIECES.p)
.update("g7", PIECES.p)
.update("e8", PIECES.r)
.update("a8", PIECES.q)
.update("g5", PIECES.N)
.update("c4", PIECES.Q)
.update("h2", PIECES.K);
smotheredMate.printBoard();
// -------------------
// | q . . . r . . k |
// | . . . . . . p p |
// | . . . . . . . . |
// | . . . . . . N . |
// | . . Q . . . . . |
// | . . . . . . . . |
// | . . . . . . . K |
// | . . . . . . . . |
// -------------------
// The original Fen will not be mutated
emptyPosition.printBoard();
// -------------------
// | . . . . . . . . |
// | . . . . . . . . |
// | . . . . . . . . |
// | . . . . . . . . |
// | . . . . . . . . |
// | . . . . . . . . |
// | . . . . . . . . |
// | . . . . . . . . |
// -------------------
API
Constructor: Fen(fenOrArgs?: string | FenArgs)
The constructor takes an optional parameter which specifies the FEN board position.
const startingPosition = new Fen();
console.log(startingPosition.toString());
// rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
console.log(new Fen("rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2").toString());
// rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2
console.log(new Fen(Fen.emptyPosition).toString());
// 8/8/8/8/8/8/8/8 w KQkq - 0 1
get(Coordinate|Position)
Gets the content of the specified position.
const startingPosition = new Fen();
console.log(startingPosition.get("e1"));
// K
console.log(startingPosition.get("e4"));
// empty
console.log(startingPosition.get("k9"));
// null
// You can also send the x and y as a Position.
console.log(startingPosition.get(new Position(4, 7)));
// white king
clear(Coordinate|Position)
Removes the content on the specified position if there is any.
console.log(new Fen().clear("e1").toString());
// "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQ1BNR w KQkq - 0 1"
update(Coordinate|Position, BoardContent)
Replaces the content of the specified position.
console.log(new Fen().update("e1", BoardContent.BlackBishop).toString());
// rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQbBNR w KQkq - 0 1
isOccupied(Coordinate|Position)
const startingPosition = new Fen();
console.log(startingPosition.isOccupied("e2"));
// true
console.log(startingPosition.isOccupied("e4"));
// false
isEmpty(Coordinate|Position)
const startingPosition = new Fen();
console.log(startingPosition.isEmpty("e2"));
// false
console.log(startingPosition.isEmpty("e4"));
// true
Properties
console.log(new Fen(Fen.startingPosition));
// Fen {
// rows: 8,
// columns: 8,
// board: [
// ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'],
// ['p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'],
// [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
// [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
// [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
// [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
// ['P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'],
// ['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R']
// ],
// toMove: 'white',
// castlingRights: {
// white: { queenside: true, kingside: true },
// black: { queenside: true, kingside: true }
// },
// enPassantSquare: '-',
// halfMoves: 0,
// fullMoves: 1
// }