UNPKG

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
'use strict'; 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 };