fentastic
Version:
Validate and parse Forsyth-Edwards Notation (FEN) used to describe a chess game board position.
44 lines (43 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseEnPassantTargetSquare = exports.validateEnPassantTargetSquare = void 0;
const ParseError_js_1 = require("./ParseError.js");
const rankPattern = /[a-h]/gi;
const enPassantFilePattern = /3|6/g;
const fieldName = 'En passant target square';
const validateEnPassantTargetSquare = (field) => {
try {
if (!field.tokens.length) {
throw new ParseError_js_1.ParseError(fieldName, '', field.delimiter.index, '-|a-h');
}
if (field.value === '-') {
return field;
}
if (field.tokens.length !== 2) {
throw new ParseError_js_1.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_js_1.ParseError(fieldName, field.tokens[0].value, field.tokens[0].index, 'a-h');
}
if (!field.tokens[1].value.match(enPassantFilePattern)) {
throw new ParseError_js_1.ParseError(fieldName, field.tokens[1].value, field.tokens[1].index, '3|6');
}
}
catch (e) {
if (e instanceof ParseError_js_1.ParseError) {
field.error = e;
}
else {
throw e;
}
}
return field;
};
exports.validateEnPassantTargetSquare = validateEnPassantTargetSquare;
const parseEnPassantTargetSquare = (field) => {
if (field.value === '-') {
return undefined;
}
return field.value;
};
exports.parseEnPassantTargetSquare = parseEnPassantTargetSquare;