fentastic
Version:
Validate and parse Forsyth-Edwards Notation (FEN) used to describe a chess game board position.
37 lines (36 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFields = exports.validateFields = void 0;
const ParseError_js_1 = require("./ParseError.js");
const createTokenGroups_js_1 = require("./createTokenGroups.js");
const whiteSpaceUtils_js_1 = require("./whiteSpaceUtils.js");
const parsePieceField_js_1 = require("./parsePieceField.js");
const parseActiveColor_js_1 = require("./parseActiveColor.js");
const parseCastlingAvailability_js_1 = require("./parseCastlingAvailability.js");
const parseEnPassantTargetSquare_js_1 = require("./parseEnPassantTargetSquare.js");
const parseClocks_js_1 = require("./parseClocks.js");
const validateFields = (fields) => {
(0, parsePieceField_js_1.validatePieceField)(fields[0]);
(0, parseActiveColor_js_1.validateActiveColor)(fields[1]);
(0, parseCastlingAvailability_js_1.validateCastlingAvailability)(fields[2]);
(0, parseEnPassantTargetSquare_js_1.validateEnPassantTargetSquare)(fields[3]);
(0, parseClocks_js_1.validateHalfMoveClock)(fields[4]);
(0, parseClocks_js_1.validateFullMoveNumber)(fields[5]);
const errors = fields
.filter((f) => f.error instanceof ParseError_js_1.ParseError)
.map((f) => f.error);
if (errors.length) {
throw new ParseError_js_1.ParseErrors(errors);
}
return fields;
};
exports.validateFields = validateFields;
const createFields = (tokens) => {
const tokenGroups = (0, createTokenGroups_js_1.createTokenGroups)(whiteSpaceUtils_js_1.isWhiteSpace, tokens);
if (tokenGroups.length !== 6) {
const last = tokens[tokens.length - 1];
throw new ParseError_js_1.ParseError('Fields', tokenGroups.length, last.index, '6', 'field count to be', 'count');
}
return tokenGroups;
};
exports.createFields = createFields;