fentastic
Version:
Validate and parse Forsyth-Edwards Notation (FEN) used to describe a chess game board position.
39 lines (38 loc) • 1.26 kB
JavaScript
import { ParseError } from './ParseError.js';
const rankPattern = /[a-h]/gi;
const enPassantFilePattern = /3|6/g;
const fieldName = 'En passant target square';
export const validateEnPassantTargetSquare = (field) => {
try {
if (!field.tokens.length) {
throw new ParseError(fieldName, '', field.delimiter.index, '-|a-h');
}
if (field.value === '-') {
return field;
}
if (field.tokens.length !== 2) {
throw new ParseError(fieldName, field.tokens.length, field.tokens[0].index, '2', 'field length to be', 'count');
}
if (!field.tokens[0].value.match(rankPattern)) {
throw new ParseError(fieldName, field.tokens[0].value, field.tokens[0].index, 'a-h');
}
if (!field.tokens[1].value.match(enPassantFilePattern)) {
throw new ParseError(fieldName, field.tokens[1].value, field.tokens[1].index, '3|6');
}
}
catch (e) {
if (e instanceof ParseError) {
field.error = e;
}
else {
throw e;
}
}
return field;
};
export const parseEnPassantTargetSquare = (field) => {
if (field.value === '-') {
return undefined;
}
return field.value;
};