@mychess/openings
Version:
Chess openings.
46 lines (45 loc) • 1.69 kB
JavaScript
;
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;