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

86 lines (68 loc) 2.79 kB
'use strict'; /* * * ©2016-2017 EdgeVerve Systems Limited (a fully owned Infosys subsidiary), * Bangalore, India. All Rights Reserved. * */ /* Decision Model and Notation, v1.1 Page : 112 - 113 value and valueInverse functions for each of the time, date, date_and_time and duration types. These functions are not exposed as a part of in-built function suite. These are used for performing calculations and conversions. */ var moment = require('moment-timezone'); var _require = require('../built-in-functions'), time = _require.time, dateAndTime = _require['date and time'], duration = _require.duration; var _require2 = require('./meta'), date_ISO_8601 = _require2.date_ISO_8601, time_ISO_8601 = _require2.time_ISO_8601, epoch = _require2.epoch; var prepareTime = function prepareTime(value, offset) { var remainingTime = value; var hour = Math.floor(remainingTime / 3600); remainingTime = value % 3600; var minute = Math.floor(remainingTime / 60); remainingTime = value % 60; var second = remainingTime; return moment.parseZone('' + moment({ hour: hour, minute: minute, second: second }).format('THH:mm:ss') + offset, time_ISO_8601).format(time_ISO_8601); }; var valueT = function valueT(obj) { var duration = moment.duration('PT' + obj.hour + 'H' + obj.minute + 'M' + obj.second + 'S'); return duration.asSeconds(); }; var valueInverseT = function valueInverseT(value) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Z'; if (value >= 0 && value <= 86400) { return time(prepareTime(value, offset)); } var secondsFromMidnight = value - Math.floor(value / 86400) * 86400; var timeStr = prepareTime(secondsFromMidnight, offset); return time('' + timeStr); }; var valueDT = function valueDT(obj) { var e = moment.parseZone(epoch, date_ISO_8601); var duration = moment.duration(obj.diff(e)); return duration.asSeconds(); }; var valueInverseDT = function valueInverseDT(value) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Z'; var e = moment.parseZone(epoch, date_ISO_8601); return dateAndTime(e.add(value, 'seconds').utcOffset(offset).format()); }; var valueDTD = function valueDTD(obj) { return obj.asSeconds(); }; var valueInverseDTD = function valueInverseDTD(value) { return duration('PT' + Math.floor(value) + 'S'); }; var valueYMD = function valueYMD(obj) { return obj.asMonths(); }; var valueInverseYMD = function valueInverseYMD(value) { return duration('P' + Math.floor(value) + 'M'); }; module.exports = { valueT: valueT, valueInverseT: valueInverseT, valueDT: valueDT, valueInverseDT: valueInverseDT, valueDTD: valueDTD, valueInverseDTD: valueInverseDTD, valueYMD: valueYMD, valueInverseYMD: valueInverseYMD };