A powerful TypeScript/JavaScript library for managing chess PGN (Portable Game Notation) files with support for variations and game traversal.
- Parse PGN strings into manageable objects
- Navigate through main lines and variations
- Access FEN positions for any move
- Handle game headers
- Traverse moves forward and backward
- Full TypeScript support
npm install pgn-manager
import PGNManager from 'pgn-manager';
// Initialize with a PGN string
const pgn = `1. e4 e5 2. Nf3 Nc6 (2... d6 3. d4) 3. Bb5 *`;
const manager = new PGNManager(pgn);
// Get the first move
const firstMove = manager.getFirstMove();
// Navigate through moves
const nextMove = manager.nextMove(firstMove);
const prevMove = manager.previousMove(nextMove);
// Get FEN position for a move
const fen = manager.getMoveFen(firstMove);
// Access game headers
const headers = manager.headers;
new PGNManager(pgn: string)
: Creates a new PGN manager instance
pgn
: Get the raw PGN stringparsedPGN
: Get the parsed PGN objectheaders
: Get game headers array
getMove(moveNumber: number)
: Get move by numbergetMoveNumber(moveOrMoveId: Move | number)
: Get number for a movenextMove(moveOrMoveId: Move | number)
: Get next move in the sequencepreviousMove(moveOrMoveId: Move | number)
: Get previous movehasNextMove(moveOrMoveId: Move | number)
: Check if move has a next movegetFirstMove()
: Get the first move of the gamegetLastMove()
: Get the last move of the gamegetMoveFen(moveOrMoveId: Move | number)
: Get FEN position after movegetParentRav(moveOrMoveId: Move | number)
: Get parent variation for movegetMoveColor(moveOrMoveId: Move | number)
: Gets the color of the player who made the move ("w" for white or "b" for black)
const manager = new PGNManager("1. e4 e5 2. Nf3 Nc6 3. Bb5 *");
let move = manager.getFirstMove();
while (manager.hasNextMove(move)) {
console.log(move.move);
move = manager.nextMove(move);
}
const manager = new PGNManager("1. e4 e5 2. Nf3 Nc6 (2... d6 3. d4) 3. Bb5 *");
const move = manager.getMove(2); // Get second move
const variation = manager.getParentRav(move);
if (variation) {
console.log("Move is part of a variation!");
}
Contributions are welcome! Feel free to submit issues and pull requests.
MIT License - feel free to use this in your projects!