UNPKG

fentastic

Version:

Validate and parse Forsyth-Edwards Notation (FEN) used to describe a chess game board position.

37 lines (36 loc) 1.81 kB
"use strict"; 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;