fentastic
Version:
Validate and parse Forsyth-Edwards Notation (FEN) used to describe a chess game board position.
65 lines (64 loc) • 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseFullMoveNumber = exports.validateFullMoveNumber = exports.parseHalfMoveClock = exports.validateHalfMoveClock = void 0;
const token_js_1 = require("./token.js");
const ParseError_js_1 = require("./ParseError.js");
const isPositive = (0, token_js_1.tokenIs)(/[1-9]/);
const isNonNegative = (0, token_js_1.tokenIs)(/[\d]/);
const validate = (tokens, fieldName) => {
for (const token of tokens) {
if (!isNonNegative(token)) {
throw new ParseError_js_1.ParseError(fieldName, token.value, token.index, '0-9');
}
}
return tokens;
};
const halfMoveName = 'Halfmove clock';
const validateHalfMoveClock = (field) => {
try {
if (!field.tokens.length) {
throw new ParseError_js_1.ParseError(halfMoveName, '', field.delimiter.index, '0-9');
}
const tokens = validate(field.tokens, halfMoveName);
const fieldValue = Number(field.value);
if (fieldValue > 100) {
throw new ParseError_js_1.ParseError(halfMoveName, field.value, tokens[0].index, '100', 'field to not exceed');
}
}
catch (e) {
if (e instanceof ParseError_js_1.ParseError) {
field.error = e;
}
else {
throw e;
}
}
return field;
};
exports.validateHalfMoveClock = validateHalfMoveClock;
const parseHalfMoveClock = (field) => Number(field.value);
exports.parseHalfMoveClock = parseHalfMoveClock;
const fullMoveName = 'Fullmove number';
const validateFullMoveNumber = (field) => {
try {
if (!field.tokens.length) {
throw new ParseError_js_1.ParseError(fullMoveName, '', field.delimiter.index, '1-9');
}
if (!isPositive(field.tokens[0])) {
throw new ParseError_js_1.ParseError(fullMoveName, field.tokens[0].value, field.tokens[0].index, '1-9');
}
validate(field.tokens.slice(1), fullMoveName);
}
catch (e) {
if (e instanceof ParseError_js_1.ParseError) {
field.error = e;
}
else {
throw e;
}
}
return field;
};
exports.validateFullMoveNumber = validateFullMoveNumber;
const parseFullMoveNumber = (field) => Number(field.value);
exports.parseFullMoveNumber = parseFullMoveNumber;