fentastic
Version:
Validate and parse Forsyth-Edwards Notation (FEN) used to describe a chess game board position.
32 lines (31 loc) • 1.35 kB
JavaScript
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;
};