@jbouduin/holidays-lib
Version:
Get World-Wide Holidays
213 lines (212 loc) • 8.59 kB
JavaScript
"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;