daniel-san
Version:
a node-based budget-projection engine that helps your routines and finances find balance. The program features aggregates, terminal and file-based reporting output, multi-currency conversion capability and multi-frequency accounting triggers, including: o
267 lines (246 loc) • 11 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var DATE_DELIMITER = '-';
var TIME_DELIMITER = ':';
var DATE_TIME_DELIMITER = 'T';
var MIN_INT_DIGITS_DEFAULT = 1;
var MIN_DECIMAL_DIGITS_DEFAULT = 2;
var MAX_DECIMAL_DIGITS_DEFAULT = 2;
var LOCALE_DEFAULT = 'en-US';
var STYLE_DEFAULT = 'currency';
var CURRENCY_DEFAULT = 'USD';
var SUNDAY = 0;
var MONDAY = 1;
var TUESDAY = 2;
var WEDNESDAY = 3;
var THURSDAY = 4;
var FRIDAY = 5;
var SATURDAY = 6;
var appConstants = {
APP_NAME: 'daniel-san',
AMOUNT: 'amount',
BALANCE_ENDING: 'balanceEnding',
DEFAULT_ERROR_MESSAGE: 'something bad happened and a lot of robots died',
DATE_DELIMITER: DATE_DELIMITER,
TIME_DELIMITER: TIME_DELIMITER,
DATE_TIME_DELIMITER: DATE_TIME_DELIMITER,
DATE_FORMAT_STRING: "YYYY".concat(DATE_DELIMITER, "MM").concat(DATE_DELIMITER, "DD"),
TIME_FORMAT_STRING: "hh".concat(TIME_DELIMITER, "mmA"),
UTC: 'UTC',
LOCAL: 'LOCAL',
AM: 'am',
PM: 'pm',
EVENT_SOURCE: 'EVENT_SOURCE',
OBSERVER_SOURCE: 'OBSERVER_SOURCE',
BOTH: 'BOTH',
ANY: 'ANY',
UNION: 'UNION',
INTERSECTION: 'INTERSECTION',
POSITIVE: 'POSITIVE',
NEGATIVE: 'NEGATIVE',
STANDARD_EVENT: 'STANDARD_EVENT',
STANDARD_EVENT_ROUTINE: 'STANDARD_EVENT_ROUTINE',
STANDARD_EVENT_REMINDER: 'STANDARD_EVENT_ROUTINE_REMINDER',
NTH_WEEKDAYS_OF_MONTH: 'NTH_WEEKDAYS_OF_MONTH',
NTH_WEEKDAYS_OF_MONTH_ROUTINE: 'NTH_WEEKDAYS_OF_MONTH_ROUTINE',
NTH_WEEKDAYS_OF_MONTH_REMINDER: 'NTH_WEEKDAYS_OF_MONTH_REMINDER',
WEEKDAY_ON_DATE: 'WEEKDAY_ON_DATE',
WEEKDAY_ON_DATE_ROUTINE: 'WEEKDAY_ON_DATE_ROUTINE',
WEEKDAY_ON_DATE_REMINDER: 'WEEKDAY_ON_DATE_REMINDER',
MOVE_THIS_PROCESS_DATE_BEFORE_THESE_WEEKDAYS: 'MOVE_THIS_PROCESS_DATE_BEFORE_THESE_WEEKDAYS',
MOVE_THIS_PROCESS_DATE_BEFORE_THESE_DATES: 'MOVE_THIS_PROCESS_DATE_BEFORE_THESE_DATES',
PRE_PAY: 'PRE_PAY',
MOVE_THIS_PROCESS_DATE_AFTER_THESE_WEEKDAYS: 'MOVE_THIS_PROCESS_DATE_AFTER_THESE_WEEKDAYS',
MOVE_THIS_PROCESS_DATE_AFTER_THESE_DATES: 'MOVE_THIS_PROCESS_DATE_AFTER_THESE_DATES',
POST_PAY: 'POST_PAY',
ADJUST_AMOUNT_ON_THESE_DATES: 'ADJUST_AMOUNT_ON_THESE_DATES',
ADJUST_AMOUNT: 'ADJUST_AMOUNT',
ANNUALLY: 'ANNUALLY',
MONTHLY: 'MONTHLY',
WEEKLY: 'WEEKLY',
DAILY: 'DAILY',
ONCE: 'ONCE',
SUNDAY: SUNDAY,
MONDAY: MONDAY,
TUESDAY: TUESDAY,
WEDNESDAY: WEDNESDAY,
THURSDAY: THURSDAY,
FRIDAY: FRIDAY,
SATURDAY: SATURDAY,
WEEKENDS: [6, 0],
DISCOVERING_EVENT_TYPE: 'DISCOVERING_EVENT_TYPE',
EVALUATING_RULE_INSERTION: 'EVALUATING_RULE_INSERTION',
EXECUTING_RULE_INSERTION: 'EXECUTING_RULE_INSERTION',
EXECUTING_RULE_ADJUSTMENT: 'EXECUTING_RULE_ADJUSTMENT',
EXECUTION_REJECTED: 'EXECUTION_REJECTED',
MODIFIED: 'MODIFIED',
RETIRING_RULES: 'RETIRING_RULES',
STANDARD_OUTPUT: 'STANDARD_OUTPUT',
VERBOSE: 'VERBOSE',
CONCISE: 'CONCISE',
SHY: 'SHY',
EVENTS_BY_GROUP: 'EVENTS_BY_GROUP',
EVENTS_BY_GROUPS: 'EVENTS_BY_GROUPS',
EVENTS_BY_NAME: 'EVENTS_BY_NAME',
EVENTS_BY_NAMES: 'EVENTS_BY_NAMES',
EVENTS_BY_TYPE: 'EVENTS_BY_TYPE',
EVENTS_BY_TYPES: 'EVENTS_BY_TYPES',
EVENTS_BY_KEYS_AND_VALUES: 'EVENTS_BY_KEYS_AND_VALUES',
EVENTS: 'EVENTS',
CRITICAL_SNAPSHOTS: 'CRITICAL_SNAPSHOTS',
DISCARDED_EVENTS: 'DISCARDED_EVENTS',
IMPORTANT_EVENTS: 'IMPORTANT_EVENTS',
TIME_EVENTS: 'TIME_EVENTS',
ROUTINE: 'ROUTINE',
REMINDER: 'REMINDER',
ROUTINE_EVENTS: 'ROUTINE_EVENTS',
REMINDER_EVENTS: 'REMINDER_EVENTS',
ROUTINE_AND_REMINDER_EVENTS: 'ROUTINE_AND_REMINDER_EVENTS',
RULES_TO_RETIRE: 'RULES_TO_RETIRE',
IRRELEVANT_RULES: 'IRRELEVANT_RULES',
SUM_OF_ALL_POSITIVE_EVENT_FLOWS: 'SUM_OF_ALL_POSITIVE_EVENT_FLOWS',
SUM_OF_ALL_POSITIVE_EVENT_AMOUNTS: 'SUM_OF_ALL_POSITIVE_EVENT_AMOUNTS',
SUM_OF_ALL_NEGATIVE_EVENT_FLOWS: 'SUM_OF_ALL_NEGATIVE_EVENT_FLOWS',
SUM_OF_ALL_NEGATIVE_EVENT_AMOUNTS: 'SUM_OF_ALL_NEGATIVE_EVENT_AMOUNTS',
EVENT_FLOWS_GREATER_THAN_TARGET: 'EVENT_FLOWS_GREATER_THAN_TARGET',
EVENT_FLOWS_LESS_THAN_TARGET: 'EVENT_FLOWS_LESS_THAN_TARGET',
NEGATIVE_EVENT_FLOWS_GREATER_THAN_TARGET: 'NEGATIVE_EVENT_FLOWS_GREATER_THAN_TARGET',
NEGATIVE_EVENT_FLOWS_LESS_THAN_TARGET: 'NEGATIVE_EVENT_FLOWS_LESS_THAN_TARGET',
POSITIVE_EVENT_FLOWS_GREATER_THAN_TARGET: 'POSITIVE_EVENT_FLOWS_GREATER_THAN_TARGET',
POSITIVE_EVENT_FLOWS_LESS_THAN_TARGET: 'POSITIVE_EVENT_FLOWS_LESS_THAN_TARGET',
BALANCE_ENDING_SNAPSHOTS_GREATER_THAN_TARGET: 'BALANCE_ENDING_SNAPSHOTS_GREATER_THAN_TARGET',
BALANCE_ENDING_SNAPSHOTS_LESS_THAN_TARGET: 'BALANCE_ENDING_SNAPSHOTS_LESS_THAN_TARGET',
GREATEST_BALANCE_ENDING_SNAPSHOTS: 'GREATEST_BALANCE_ENDING_SNAPSHOTS',
LEAST_BALANCE_ENDING_SNAPSHOTS: 'LEAST_BALANCE_ENDING_SNAPSHOTS',
GREATEST_EVENT_FLOWS: 'GREATEST_EVENT_FLOWS',
LEAST_EVENT_FLOWS: 'LEAST_EVENT_FLOWS',
GREATEST_POSITIVE_EVENT_FLOWS: 'GREATEST_POSITIVE_EVENT_FLOWS',
LEAST_POSITIVE_EVENT_FLOWS: 'LEAST_POSITIVE_EVENT_FLOWS',
GREATEST_NEGATIVE_EVENT_FLOWS: 'GREATEST_NEGATIVE_EVENT_FLOWS',
LEAST_NEGATIVE_EVENT_FLOWS: 'LEAST_NEGATIVE_EVENT_FLOWS',
EVENT_FLOWS_WITHIN_X_PERCENT_OF_TARGET: 'EVENT_FLOWS_WITHIN_X_PERCENT_OF_TARGET',
NEGATIVE_EVENT_FLOWS_WITHIN_X_PERCENT_OF_TARGET: 'NEGATIVE_EVENT_FLOWS_WITHIN_X_PERCENT_OF_TARGET',
POSITIVE_EVENT_FLOWS_WITHIN_X_PERCENT_OF_TARGET: 'POSITIVE_EVENT_FLOWS_WITHIN_X_PERCENT_OF_TARGET',
BALANCE_ENDING_SNAPSHOTS_WITHIN_X_PERCENT_OF_TARGET: 'BALANCE_ENDING_SNAPSHOTS_WITHIN_X_PERCENT_OF_TARGET',
AGGREGATES: 'AGGREGATES',
DAY_CYCLES: 'DAY_CYCLES',
DATE_SETS: 'DATE_SETS',
SUMS_AND_AVERAGES: 'SUMS_AND_AVERAGES',
MEDIANS_AND_MODES: 'MEDIANS_AND_MODES',
MINIMUMS_AND_MAXIMUMS: 'MINIMUMS_AND_MAXIMUMS',
GREATEST_VALUES: 'GREATEST_VALUES',
LEAST_VALUES: 'LEAST_VALUES',
DEFAULT: 'DEFAULT',
ASCENDING: 'ASCENDING',
DESCENDING: 'DESCENDING',
SUM: 'SUM',
AVERAGE: 'AVERAGE',
MEDIANS: 'MEDIANS',
MODES: 'MODES',
MIN: 'MIN',
MAX: 'MAX',
MIN_INT_DIGITS_DEFAULT: MIN_INT_DIGITS_DEFAULT,
MIN_DECIMAL_DIGITS_DEFAULT: MIN_DECIMAL_DIGITS_DEFAULT,
MAX_DECIMAL_DIGITS_DEFAULT: MAX_DECIMAL_DIGITS_DEFAULT,
LOCALE_DEFAULT: LOCALE_DEFAULT,
STYLE_DEFAULT: STYLE_DEFAULT,
CURRENCY_DEFAULT: CURRENCY_DEFAULT,
RULE: 'RULE',
EVENT: 'EVENT',
REPORT: 'REPORT',
AGGREGATE: 'AGGREGATE',
AGGREGATE_GROUP: 'AGGREGATE_GROUP',
DEFAULT_JSON_SPACING: 4,
DEFAULT_SELECTION_LIMIT: 7
};
var decimalFormatterStandard = function decimalFormatterStandard(number, _ref) {
var _ref$minIntegerDigits = _ref.minIntegerDigits,
minIntegerDigits = _ref$minIntegerDigits === void 0 ? MIN_INT_DIGITS_DEFAULT : _ref$minIntegerDigits,
_ref$minDecimalDigits = _ref.minDecimalDigits,
minDecimalDigits = _ref$minDecimalDigits === void 0 ? MIN_DECIMAL_DIGITS_DEFAULT : _ref$minDecimalDigits,
_ref$maxDecimalDigits = _ref.maxDecimalDigits,
maxDecimalDigits = _ref$maxDecimalDigits === void 0 ? MAX_DECIMAL_DIGITS_DEFAULT : _ref$maxDecimalDigits,
_ref$locale = _ref.locale,
locale = _ref$locale === void 0 ? LOCALE_DEFAULT : _ref$locale,
_ref$style = _ref.style,
style = _ref$style === void 0 ? STYLE_DEFAULT : _ref$style,
_ref$currency = _ref.currency,
currency = _ref$currency === void 0 ? CURRENCY_DEFAULT : _ref$currency;
var value = null;
if (currency) {
value = number.toLocaleString(locale, {
minimumIntegerDigits: minIntegerDigits,
minimumFractionDigits: minDecimalDigits,
maximumFractionDigits: maxDecimalDigits,
style: style,
currency: currency
});
} else {
value = number.toLocaleString(locale, {
minimumIntegerDigits: minIntegerDigits,
minimumFractionDigits: minDecimalDigits,
maximumFractionDigits: maxDecimalDigits,
style: style
});
}
return value;
};
var formattingFunctionDefault = decimalFormatterStandard;
var getDefaultParamsForDecimalFormatter = function getDefaultParamsForDecimalFormatter(formatting) {
var formattingOptions = formatting || {};
var formattingFunction = formattingOptions && formattingOptions.formattingFunction ? formattingOptions.formattingFunction : formattingFunctionDefault;
var minIntegerDigits = formattingOptions && formattingOptions.minIntegerDigits ? formattingOptions.minIntegerDigits : MIN_INT_DIGITS_DEFAULT;
var minDecimalDigits = formattingOptions && formattingOptions.minDecimalDigits ? formattingOptions.minDecimalDigits : MIN_DECIMAL_DIGITS_DEFAULT;
var maxDecimalDigits = formattingOptions && formattingOptions.maxDecimalDigits ? formattingOptions.maxDecimalDigits : MAX_DECIMAL_DIGITS_DEFAULT;
var locale = formattingOptions && formattingOptions.locale ? formattingOptions.locale : LOCALE_DEFAULT;
var style = formattingOptions && formattingOptions.style ? formattingOptions.style : STYLE_DEFAULT;
var currency = formattingOptions && formattingOptions.currency ? formattingOptions.currency : CURRENCY_DEFAULT;
return {
formattingFunction: formattingFunction,
minIntegerDigits: minIntegerDigits,
minDecimalDigits: minDecimalDigits,
maxDecimalDigits: maxDecimalDigits,
locale: locale,
style: style,
currency: currency
};
};
var getWeekdayString = function getWeekdayString(weekdayNum) {
var weekdayString;
switch (weekdayNum) {
case MONDAY:
weekdayString = 'monday';
break;
case TUESDAY:
weekdayString = 'tuesday';
break;
case WEDNESDAY:
weekdayString = 'wednesday';
break;
case THURSDAY:
weekdayString = 'thursday';
break;
case FRIDAY:
weekdayString = 'friday';
break;
case SATURDAY:
weekdayString = 'saturday';
break;
case SUNDAY:
weekdayString = 'sunday';
break;
default:
weekdayString = 'some day';
break;
}
return weekdayString;
};
module.exports = _objectSpread({}, appConstants, {
decimalFormatterStandard: decimalFormatterStandard,
formattingFunctionDefault: formattingFunctionDefault,
getDefaultParamsForDecimalFormatter: getDefaultParamsForDecimalFormatter,
getWeekdayString: getWeekdayString
});