UNPKG

fentastic

Version:

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

65 lines (64 loc) 2.34 kB
"use strict"; 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;