dmn-eval-js-es5
Version:
Evaluation of DMN 1.1 decision tables, limited to S-FEEL (Simple Friendly Enough Expression Language), es5 browser compatible
127 lines (111 loc) • 4.79 kB
JavaScript
;
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
*/
/*
Format : date_and_time(date, time)
Description : date is a date or date time; time is a time creates a date time from the given date (ignoring any time component) and the given time
e.g. : date_and_time("2012-12-24T23:59:00") = date_and_time(date("2012-12-24”), time(“T23:59:00"))
*/
/*
Format : date and time(from) // from - date time string
Description : date time string convert "from" to a date and time
e.g. : date and time("2012-12-24T23:59:00") + duration("PT1M") = date and time("2012-12-25T00:00:00")
*/
var moment = require('moment-timezone');
var addProperties = require('./add-properties');
var _require = require('../../helper/meta'),
time_ISO_8601 = _require.time_ISO_8601,
date_ISO_8601 = _require.date_ISO_8601,
date_time_IANA_tz = _require.date_time_IANA_tz,
types = _require.types,
properties = _require.properties;
var year = properties.year,
month = properties.month,
day = properties.day,
hour = properties.hour,
minute = properties.minute,
second = properties.second,
time_offset = properties['time offset'],
timezone = properties.timezone;
var props = Object.assign({}, { year: year, month: month, day: day, hour: hour, minute: minute, second: second, 'time offset': time_offset, timezone: timezone, type: types.date_and_time, isDateTime: true });
var parseIANATz = function parseIANATz(str) {
var match = str.match(date_time_IANA_tz);
if (match) {
var _match$slice = match.slice(1),
_match$slice2 = _slicedToArray(_match$slice, 2),
dateTime = _match$slice2[0],
timeZone = _match$slice2[1];
if (dateTime && timeZone) {
try {
var dt = moment(dateTime).tz(timeZone);
if (dt.isValid()) {
return dt;
}
throw new Error('Invalid date and time in IANA tz format. Please check the input format');
} catch (err) {
throw err;
}
}
throw new Error('Error parsing IANA format input. One or more parts are missing. DateTimePart : ' + dateTime + ' TimeZonePart : ' + timeZone);
}
return match;
};
var dateAndTime = function dateAndTime() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var dt = void 0;
var result = void 0;
if (args.length === 1) {
var arg = args[0];
if (arg !== null && arg !== undefined) {
var str = void 0;
if (arg instanceof Date) {
str = arg.toISOString();
} else if (arg.isDateTime || moment.isMoment(arg)) {
str = arg.toISOString();
} else if (typeof arg === 'string') {
str = arg;
} else {
throw new Error('Invalid argument for date_and_time function: ' + arg);
}
try {
dt = str === '' ? moment() : parseIANATz(str) || moment.parseZone(str);
} catch (err) {
throw err;
}
if (!dt || !dt.isValid()) {
throw new Error('Invalid date_and_time. This is usually caused by an invalid format. Please check the input format');
}
}
} else if (args.length === 2) {
var date = args[0],
time = args[1];
if (date && date.isDate && time && time.isTime) {
var datePart = date.format(date_ISO_8601);
var timePart = time.format(time_ISO_8601);
dt = moment.parseZone('' + datePart + timePart);
if (!dt.isValid()) {
throw new Error('Invalid date and time. This is usually caused by input type mismatch.');
}
} else {
throw new Error('Type Mismatch - args specified with date_and_time are expected to be of type date and time respectively. Please check the arguments order or type');
}
} else {
throw new Error('Invalid number of arguments specified with "date_and_time" in-built function');
}
if (dt !== undefined) {
result = addProperties(dt, props);
}
return result;
};
module.exports = { 'date and time': dateAndTime };