UNPKG

chessground

Version:
77 lines 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.write = exports.read = exports.initial = void 0; const util_1 = require("./util"); const cg = require("./types"); exports.initial = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR'; const roles = { p: 'pawn', r: 'rook', n: 'knight', b: 'bishop', q: 'queen', k: 'king', }; const letters = { pawn: 'p', rook: 'r', knight: 'n', bishop: 'b', queen: 'q', king: 'k', }; function read(fen) { if (fen === 'start') fen = exports.initial; const pieces = new Map(); let row = 7, col = 0; for (const c of fen) { switch (c) { case ' ': return pieces; case '/': --row; if (row < 0) return pieces; col = 0; break; case '~': const piece = pieces.get(util_1.pos2key([col, row])); if (piece) piece.promoted = true; break; default: const nb = c.charCodeAt(0); if (nb < 57) col += nb - 48; else { const role = c.toLowerCase(); pieces.set(util_1.pos2key([col, row]), { role: roles[role], color: c === role ? 'black' : 'white', }); ++col; } } } return pieces; } exports.read = read; function write(pieces) { return util_1.invRanks .map(y => cg.files .map(x => { const piece = pieces.get((x + y)); if (piece) { const letter = letters[piece.role]; return piece.color === 'white' ? letter.toUpperCase() : letter; } else return '1'; }) .join('')) .join('/') .replace(/1{2,}/g, s => s.length.toString()); } exports.write = write; //# sourceMappingURL=fen.js.map