UNPKG

@jbouduin/holidays-lib

Version:
213 lines (212 loc) 8.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataExtractor = void 0; var errors_1 = require("../errors"); var types_1 = require("../types"); var types_2 = require("../types"); var types_3 = require("../types"); var types_4 = require("../types"); var types_5 = require("../types"); var types_6 = require("../types"); var DataExtractor = /** @class */ (function () { //#endregion //#region Constructor & C° function DataExtractor(errorHandlerCallBack) { this.errorHandlerCallBack = errorHandlerCallBack; } //#endregion //#region IDataExtractor interface methods DataExtractor.prototype.extractFixedDate = function (obj) { var result = { day: Number(obj.day), month: types_2.Month[obj.month] }; if (!result.day && result.day !== 0) { if (!obj.day) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_DAY_MISSING); } else { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_DAY_INVALID, obj.day); } } if (result.month === undefined) { if (!obj.month || obj.month === '') { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_MONTH_MISSING); } else { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_MONTH_INVALID, obj.day); } } else if (result.day || result.day === 0) { if (result.day > 0) { switch (result.month) { case types_2.Month.APRIL: case types_2.Month.JUNE: case types_2.Month.SEPTEMBER: case types_2.Month.NOVEMBER: { if (result.day > 30) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_DAY_OUT_OF_RANGE, result.day, types_2.Month[result.month]); } break; } case types_2.Month.FEBRUARY: { if (result.day > 29) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_DAY_OUT_OF_RANGE, result.day, types_2.Month[result.month]); } break; } default: { if (result.day > 31) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_DAY_OUT_OF_RANGE, result.day, types_2.Month[result.month]); } } } } else { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_DATE_DAY_OUT_OF_RANGE, result.day); } } return result; }; DataExtractor.prototype.extractFixedWeekday = function (obj) { var result = { month: types_2.Month[obj.month], weekday: types_4.Weekday[obj.weekday], which: types_6.Which[obj.which] }; if (result.month === undefined) { if (obj.month) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_WEEKDAY_MONTH_INVALID, obj.month); } else { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_WEEKDAY_MONTH_MISSING); } } if (result.weekday === undefined) { if (obj.weekday) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_WEEKDAY_WEEKDAY_INVALID, obj.weekday); } else { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_WEEKDAY_WEEKDAY_MISSING); } } if (result.which === undefined) { if (obj.which) { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_WEEKDAY_WHICH_INVALID, obj.which); } else { this.errorHandlerCallBack(errors_1.ErrorKey.FIXED_WEEKDAY_WHICH_MISSING); } } return result; }; DataExtractor.prototype.extractMoves = function (obj) { var _this = this; var result = new Array(); if (obj.moves) { obj.moves.forEach(function (move) { if (!move.condition && !move.moveTo && !move.weekday) { _this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_EMPTY); } else { result.push(_this.extractMove(move)); } }); } var saturday = result.map(function (move) { return move.condition === types_1.Condition.IS_SATURDAY ? types_1.Condition.IS_WEEKEND : move.condition; }); if (new Set(saturday).size !== result.length) { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_DUPLICATE_CONDITIONS, obj.moves); } else { var sunday = result.map(function (move) { return move.condition === types_1.Condition.IS_SUNDAY ? types_1.Condition.IS_WEEKEND : move.condition; }); if (new Set(sunday).size !== result.length) { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_DUPLICATE_CONDITIONS, obj.moves); } } return result; }; DataExtractor.prototype.extractStringKey = function (obj) { var result = obj.key; if (!result) { this.errorHandlerCallBack(errors_1.ErrorKey.KEY_MISSING); } return result; }; DataExtractor.prototype.extractWhichWeekdayWhen = function (obj) { var which = types_6.Which.FIRST; if (obj.which !== undefined) { which = types_6.Which[obj.which]; if (which === undefined) { if (!obj.which) { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WHICH_MISSING); } else { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WHICH_INVALID, obj.which); } } else if (which === types_6.Which.LAST) { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WHICH_INVALID, obj.which); } } var weekday = types_4.Weekday[obj.weekday]; if (weekday === undefined) { if (obj.weekday) { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WEEKDAY_INVALID, obj.weekday); } else { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WEEKDAY_MISSING); } } var when = types_5.When[obj.when]; if (when === undefined) { if (obj.when) { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WHEN_INVALID, obj.when); } else { this.errorHandlerCallBack(errors_1.ErrorKey.RELATION_WHEN_MISSING); } } var result = { which: which, weekday: weekday, when: when }; return result; }; //#endregion //#region Private methos DataExtractor.prototype.extractMove = function (obj) { var result = { condition: types_1.Condition[obj.condition], moveTo: types_3.MoveTo[obj.moveTo], weekday: types_4.Weekday[obj.weekday] }; if (result.condition === undefined) { if (obj.condition) { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_CONDITION_INVALID, obj.condition); } else { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_CONDITION_MISSING); } } if (result.moveTo === undefined) { if (obj.moveTo) { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_MOVE_TO_INVALID, obj.moveTo); } else { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_MOVE_TO_MISSING); } } if (result.weekday === undefined) { if (obj.weekday) { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_WEEKDAY_INVALID, obj.weekday); } else { this.errorHandlerCallBack(errors_1.ErrorKey.MOVE_WEEKDAY_MISSING); } } return result; }; return DataExtractor; }()); exports.DataExtractor = DataExtractor;