UNPKG

fentastic

Version:

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

32 lines (31 loc) 1.35 kB
import { ParseError, ParseErrors } from './ParseError.js'; import { createTokenGroups } from './createTokenGroups.js'; import { isWhiteSpace } from './whiteSpaceUtils.js'; import { validatePieceField } from './parsePieceField.js'; import { validateActiveColor } from './parseActiveColor.js'; import { validateCastlingAvailability } from './parseCastlingAvailability.js'; import { validateEnPassantTargetSquare } from './parseEnPassantTargetSquare.js'; import { validateHalfMoveClock, validateFullMoveNumber } from './parseClocks.js'; export const validateFields = (fields) => { validatePieceField(fields[0]); validateActiveColor(fields[1]); validateCastlingAvailability(fields[2]); validateEnPassantTargetSquare(fields[3]); validateHalfMoveClock(fields[4]); validateFullMoveNumber(fields[5]); const errors = fields .filter((f) => f.error instanceof ParseError) .map((f) => f.error); if (errors.length) { throw new ParseErrors(errors); } return fields; }; export const createFields = (tokens) => { const tokenGroups = createTokenGroups(isWhiteSpace, tokens); if (tokenGroups.length !== 6) { const last = tokens[tokens.length - 1]; throw new ParseError('Fields', tokenGroups.length, last.index, '6', 'field count to be', 'count'); } return tokenGroups; };