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
JavaScript
;
/*
*
* ©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 };