chessground-haichess
Version:
lichess.org Chess UI
79 lines • 7.3 kB
JavaScript
;
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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2Zlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBMkM7QUFDM0MsOEJBQThCO0FBRWpCLFFBQUEsT0FBTyxHQUFXLDZDQUE2QyxDQUFDO0FBRTdFLE1BQU0sS0FBSyxHQUFrQztJQUMzQyxDQUFDLEVBQUUsTUFBTTtJQUNULENBQUMsRUFBRSxNQUFNO0lBQ1QsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsUUFBUTtJQUNYLENBQUMsRUFBRSxPQUFPO0lBQ1YsQ0FBQyxFQUFFLE1BQU07Q0FDVixDQUFDO0FBRUYsTUFBTSxPQUFPLEdBQUc7SUFDZCxJQUFJLEVBQUUsR0FBRztJQUNULElBQUksRUFBRSxHQUFHO0lBQ1QsTUFBTSxFQUFFLEdBQUc7SUFDWCxNQUFNLEVBQUUsR0FBRztJQUNYLEtBQUssRUFBRSxHQUFHO0lBQ1YsSUFBSSxFQUFFLEdBQUc7Q0FDVixDQUFDO0FBRUYsU0FBZ0IsSUFBSSxDQUFDLEdBQVc7SUFDOUIsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLEdBQUcsR0FBRyxlQUFPLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQWMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQ1QsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNWLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ25CLFFBQVEsQ0FBQyxFQUFFO1lBQ1QsS0FBSyxHQUFHO2dCQUNOLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssR0FBRztnQkFDTixFQUFFLEdBQUcsQ0FBQztnQkFDTixJQUFJLEdBQUcsR0FBRyxDQUFDO29CQUFFLE9BQU8sTUFBTSxDQUFDO2dCQUMzQixHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxLQUFLO29CQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxNQUFNO2FBQ1A7WUFDRCxPQUFPLENBQUMsQ0FBQztnQkFDUCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO3FCQUN2QjtvQkFDSCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQzlCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUNqQixLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO3FCQUN0QyxDQUFDLENBQUM7b0JBQ0gsRUFBRSxHQUFHLENBQUM7aUJBQ1A7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBbENELG9CQWtDQztBQUVELFNBQWdCLEtBQUssQ0FBQyxNQUFpQjtJQUNyQyxPQUFPLGVBQVE7U0FDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDUCxFQUFFLENBQUMsS0FBSztTQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNQLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFXLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDaEU7O1lBQU0sT0FBTyxHQUFHLENBQUM7SUFDcEIsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNaO1NBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNULE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQWZELHNCQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcG9zMmtleSwgaW52UmFua3MgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0ICogYXMgY2cgZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsOiBjZy5GRU4gPSAncm5icWtibnIvcHBwcHBwcHAvOC84LzgvOC9QUFBQUFBQUC9STkJRS0JOUic7XG5cbmNvbnN0IHJvbGVzOiB7IFtsZXR0ZXI6IHN0cmluZ106IGNnLlJvbGUgfSA9IHtcbiAgcDogJ3Bhd24nLFxuICByOiAncm9vaycsXG4gIG46ICdrbmlnaHQnLFxuICBiOiAnYmlzaG9wJyxcbiAgcTogJ3F1ZWVuJyxcbiAgazogJ2tpbmcnLFxufTtcblxuY29uc3QgbGV0dGVycyA9IHtcbiAgcGF3bjogJ3AnLFxuICByb29rOiAncicsXG4gIGtuaWdodDogJ24nLFxuICBiaXNob3A6ICdiJyxcbiAgcXVlZW46ICdxJyxcbiAga2luZzogJ2snLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWQoZmVuOiBjZy5GRU4pOiBjZy5QaWVjZXMge1xuICBpZiAoZmVuID09PSAnc3RhcnQnKSBmZW4gPSBpbml0aWFsO1xuICBjb25zdCBwaWVjZXM6IGNnLlBpZWNlcyA9IG5ldyBNYXAoKTtcbiAgbGV0IHJvdyA9IDcsXG4gICAgY29sID0gMDtcbiAgZm9yIChjb25zdCBjIG9mIGZlbikge1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHJldHVybiBwaWVjZXM7XG4gICAgICBjYXNlICcvJzpcbiAgICAgICAgLS1yb3c7XG4gICAgICAgIGlmIChyb3cgPCAwKSByZXR1cm4gcGllY2VzO1xuICAgICAgICBjb2wgPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ34nOiB7XG4gICAgICAgIGNvbnN0IHBpZWNlID0gcGllY2VzLmdldChwb3Mya2V5KFtjb2wsIHJvd10pKTtcbiAgICAgICAgaWYgKHBpZWNlKSBwaWVjZS5wcm9tb3RlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBuYiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYgKG5iIDwgNTcpIGNvbCArPSBuYiAtIDQ4O1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCByb2xlID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHBpZWNlcy5zZXQocG9zMmtleShbY29sLCByb3ddKSwge1xuICAgICAgICAgICAgcm9sZTogcm9sZXNbcm9sZV0sXG4gICAgICAgICAgICBjb2xvcjogYyA9PT0gcm9sZSA/ICdibGFjaycgOiAnd2hpdGUnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgICsrY29sO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwaWVjZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZShwaWVjZXM6IGNnLlBpZWNlcyk6IGNnLkZFTiB7XG4gIHJldHVybiBpbnZSYW5rc1xuICAgIC5tYXAoeSA9PlxuICAgICAgY2cuZmlsZXNcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgICBjb25zdCBwaWVjZSA9IHBpZWNlcy5nZXQoKHggKyB5KSBhcyBjZy5LZXkpO1xuICAgICAgICAgIGlmIChwaWVjZSkge1xuICAgICAgICAgICAgY29uc3QgbGV0dGVyID0gbGV0dGVyc1twaWVjZS5yb2xlXTtcbiAgICAgICAgICAgIHJldHVybiBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IGxldHRlci50b1VwcGVyQ2FzZSgpIDogbGV0dGVyO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gJzEnO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignJylcbiAgICApXG4gICAgLmpvaW4oJy8nKVxuICAgIC5yZXBsYWNlKC8xezIsfS9nLCBzID0+IHMubGVuZ3RoLnRvU3RyaW5nKCkpO1xufVxuIl19