dmn-eval-js-es5
Version:
Evaluation of DMN 1.1 decision tables, limited to S-FEEL (Simple Friendly Enough Expression Language), es5 browser compatible
187 lines (164 loc) • 6.86 kB
JavaScript
;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
/*
*
* ©2016-2017 EdgeVerve Systems Limited (a fully owned Infosys subsidiary),
* Bangalore, India. All Rights Reserved.
*
*/
/*
Decision Model and Notation, v1.1
Page : 131-132
*/
/*
Format : time(from) // from - time string
Description : time string convert "from" to time
e.g. : time("23:59:00z") + duration("PT2M") = time("00:01:00@Etc/UTC")
*/
/*
Format : time(from) // from - time, date_and_time
Description : time, date and time convert "from" to time (ignoring date components)
e.g. : time(date and time("2012-12-25T11:00:00Z")) = time("11:00:00Z")
*/
/*
Format : time(hour, minute, second, offset)
Description : hour, minute, second, are numbers, offset is a days and time duration, or null creates a time from the given component values
e.g. : time(“T23:59:00z") = time(23, 59, 0, duration(“PT0H”))
*/
var moment = require('moment-timezone');
var addProperties = require('./add-properties');
var _require = require('../../helper/meta'),
time_ISO_8601 = _require.time_ISO_8601,
time_IANA_tz = _require.time_IANA_tz,
types = _require.types,
properties = _require.properties;
var _require2 = require('./duration'),
duration = _require2.duration;
var hour = properties.hour,
minute = properties.minute,
second = properties.second,
time_offset = properties['time offset'],
timezone = properties.timezone;
var props = Object.assign({}, { hour: hour, minute: minute, second: second, 'time offset': time_offset, timezone: timezone, type: types.time, isTime: true });
var isNumber = function isNumber(args) {
return args.reduce(function (prev, next) {
return prev && typeof next === 'number';
}, true);
};
var parseTime = function parseTime(str) {
try {
var t = moment.parseZone(str, time_ISO_8601);
if (t.isValid()) {
return t;
}
throw new Error('Invalid ISO_8601 format time. This is usually caused by an inappropriate format. Please check the input format.');
} catch (err) {
throw err;
}
};
var dtdToOffset = function dtdToOffset(dtd) {
var msPerDay = 86400000;
var msPerHour = 3600000;
var msPerMinute = 60000;
var d = dtd;
if (typeof dtd === 'number') {
var ms = Math.abs(dtd);
var remaining = ms % msPerDay;
var hours = remaining / msPerHour;
remaining %= msPerHour;
var minutes = remaining / msPerMinute;
d = duration('PT' + hours + 'H' + minutes + 'M');
}
if (d.isDtd) {
var _d = d,
_hours = _d.hours,
_minutes = _d.minutes;
_hours = _hours < 10 ? '0' + _hours : '' + _hours;
_minutes = _minutes < 10 ? '0' + _minutes : '' + _minutes;
return _hours + ':' + _minutes;
}
throw new Error('Invalid Type');
};
var parseIANATz = function parseIANATz(str) {
var match = str.match(time_IANA_tz);
if (match) {
var _match$slice = match.slice(1),
_match$slice2 = _slicedToArray(_match$slice, 4),
_hour = _match$slice2[0],
_minute = _match$slice2[1],
_second = _match$slice2[2],
tz = _match$slice2[3];
if (_hour && _minute && _second && tz) {
try {
var t = moment.tz({ hour: _hour, minute: _minute, second: _second }, tz);
if (t.isValid()) {
return t;
}
throw new Error('Invalid IANA format time. This is usually caused by an inappropriate format. Please check the input format.');
} catch (err) {
throw err;
}
}
throw new Error('Error parsing IANA format input. One or more parts are missing - hour : ' + _hour + ' minute : ' + _minute + ' second : ' + _second + ' timezone : ' + tz);
}
return match;
};
var time = function time() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var t = void 0;
var result = void 0;
if (args.length === 1) {
var arg = args[0];
if (arg !== null && arg !== undefined) {
if (typeof arg === 'string') {
try {
t = arg === '' ? moment() : parseIANATz(arg) || parseTime(arg);
} catch (err) {
throw err;
}
} else if ((typeof arg === 'undefined' ? 'undefined' : _typeof(arg)) === 'object') {
if (arg instanceof Date) {
t = moment.parseZone(arg.toISOString);
} else if (arg.isDateTime) {
var str = arg.format(time_ISO_8601);
t = moment.parseZone(str, time_ISO_8601);
}
if (!t.isValid()) {
throw new Error('Invalid time. Parsing error while attempting to extract time from date and time.');
}
} else {
throw new Error('Invalid format encountered. Please specify time in one of these formats :\n- "23:59:00z"\n- "00:01:00@Etc/UTC"\n- date_and_time object');
}
}
} else if (args.length >= 3 && isNumber(args.slice(0, 3))) {
var _args$slice = args.slice(0, 3),
_args$slice2 = _slicedToArray(_args$slice, 3),
_hour2 = _args$slice2[0],
_minute2 = _args$slice2[1],
_second2 = _args$slice2[2];
t = moment({ hour: _hour2, minute: _minute2, second: _second2 });
var dtd = args[3];
if (dtd) {
try {
var sign = Math.sign(dtd) < 0 ? '-' : '+';
var offset = '' + sign + dtdToOffset(dtd);
t = moment.parseZone('' + moment({ hour: _hour2, minute: _minute2, second: _second2 }).format('THH:mm:ss') + offset, time_ISO_8601);
} catch (err) {
throw new Error(err.message + ' - the fourth argument in "time" in-built function is expected to be of type "days and time duration"');
}
}
if (!t.isValid()) {
throw new Error('Invalid time. Parsing error while attempting to create time from parts');
}
} else {
throw new Error('Invalid number of arguments specified with "time" in-built function');
}
if (t !== undefined) {
result = addProperties(t, props);
}
return result;
};
module.exports = { time: time };