UNPKG

@mychess/openings

Version:
46 lines (45 loc) 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var fen_1 = require("./fen"); var ECO = /** @class */ (function () { function ECO(pgn) { this.fen = new fen_1.Fen(pgn.trim().replace(/\r?\n|\r/g, ' ')); } ECO.prototype.opening = function () { var openings = this.fen.getOpenings(); var hits = []; if (!openings.length) return null; if (openings.length == 1) return openings[0]; for (var i = 0; i < openings.length; i++) { var opening = openings[i]; var hit = { hits: 0, opening: opening }; var fen = new fen_1.Fen(opening.pgn); var opening_moves = fen.getMoves(false); var game_moves = this.fen.getMoves(false).slice(0, opening_moves.length); if (opening_moves.length > this.fen.getMoves().length) continue; for (var i2 = 0; i2 < opening_moves.length; i2++) { var move = opening_moves[i2]; if (game_moves.indexOf(move) !== -1) { hit.hits++; } } hits.push(hit); } var closest = this.closestOpening(hits); return typeof closest != 'undefined' && closest !== null ? closest.opening : null; }; ECO.prototype.closestOpening = function (openings) { var closest = 0; for (var i = 0; i < openings.length; i++) { if (openings[i].hits >= closest) { closest = openings[i].hits; } } return openings.find(function (e) { return e.hits == closest; }); }; return ECO; }()); exports.ECO = ECO;