UNPKG

vtodogenerator

Version:

A library to generate VTODO compatible with RFC5545

128 lines 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateTriggerLine = exports.parseVAlarmArray = void 0; var general_1 = require("../RFCHelpers/general"); var helpers_1 = require("../helpers"); var allowedVAlarmActions = ["email", "display", "audio"]; function parseVAlarmArray(valarms) { if (!valarms) return ""; if (valarms.length == 0) return ""; var fullOutput = ""; for (var i in valarms) { var toReturn = ""; /** * Set Alarm's ACTION field. */ if (!valarms[i].action) { throw new Error("Alarm doesn't have mandatory field 'action'. It will be ignored."); } if (!allowedVAlarmActions.includes(valarms[i].action.toLowerCase())) { throw new Error("Invalid value '".concat(valarms[i].action, "' for action in alarm. It can only be 'audio', 'display', or 'email.'")); } toReturn += "ACTION:".concat(valarms[i].action.toUpperCase(), "\n"); /** * DESCRIPTION is mandatory if action is either 'display' or 'email.' */ if (!valarms[i].description) { if (valarms[i].action.toLowerCase() == "display" || valarms[i].action.toLowerCase() == "email") throw new Error("Alarm doesn't have mandatory field 'description.'"); } else { toReturn += "DESCRIPTION:".concat(valarms[i].description, "\n"); } var advancedTriggerMode = false; if ("advancedTriggerMode" in valarms[i]) { advancedTriggerMode = valarms[i].advancedTriggerMode; } var trigger = generateTriggerLine(valarms[i].trigger, advancedTriggerMode); if (!trigger) { throw new Error("Invalid value '".concat(valarms[i].trigger, "' for trigger in alarm.")); } toReturn += "".concat(trigger, "\n"); /** * SUMMARY is required if the action is email. */ if (valarms[i].action.toLowerCase() == "email") { if (!valarms[i].summary) { throw new Error("Summary is mandatory if the action is 'email.'"); } } if (valarms[i].summary) { toReturn += "SUMMARY:".concat(valarms[i].summary, "\n"); } /** * ATTENDEE is required if trigger is email. */ if (valarms[i].action.toLowerCase() == "email") { if (!valarms[i].attendees) { throw new Error("Attendee array is required if the action is 'email.'"); } if (!Array.isArray(valarms[i].attendees)) { throw new Error("Attendees field must be an array."); } if (valarms[i].attendees.length == 0) { throw new Error("Attendees array must be atleast one entry."); } for (var j in valarms[i].attendees) { if (!valarms[i].attendees[j]["email"] || !valarms[i].attendees[j]["commonName"]) { throw new Error("Attendee must have a commonName and an email. Offending input: " + JSON.stringify(valarms[i].attendees[j])); } toReturn += (0, general_1.generateAttendeeLine)(valarms[i].attendees[j]) + "\n"; } } // console.log("toReturn", toReturn) if (toReturn) { toReturn = "BEGIN:VALARM\n".concat(toReturn, "END:VALARM\n"); } fullOutput += toReturn; } return fullOutput; } exports.parseVAlarmArray = parseVAlarmArray; function generateTriggerLine(trigger, advancedTriggerMode) { if (!trigger) { throw new Error("Invalid value 'null' for trigger in alarm."); } if (!trigger.value && trigger.value.toString() != "0" && trigger.value.toString() != "-0") { throw new Error("Invalid value 'null' for value in alarm. 'value' must be a number in minutes."); } var toReturn = ""; var valueInMinutes = parseInt(trigger.value.toString()); var valueString = "PT".concat(Math.abs(valueInMinutes), "M"); if (valueInMinutes < 0) { valueString = "-".concat(valueString); } if (!advancedTriggerMode) { if (trigger.isRelated) { return "TRIGGER:".concat(valueString); } } if (trigger.isRelated) { //Trigger is of related type. //If it has a relatedto field, it must be either 'start' or 'end'. // console.log("trigger.relatedTo", trigger.relatedTo, "HERE") if (trigger.relatedTo.toLowerCase() != "end" && trigger.relatedTo.toLowerCase() != "start") { throw new Error("Invalid value '".concat(trigger.relatedTo, "' for relatedTo in alarm's trigger. It can be either 'start' or 'end'.")); } if (trigger.relatedTo) { toReturn = "TRIGGER;RELATED=".concat(trigger.relatedTo.toUpperCase(), ":"); } else { toReturn = 'TRIGGER:'; } toReturn += "".concat(valueString); } else { // Trigger is of DateTime Type. toReturn = "TRIGGER:VALUE=DATE-TIME:".concat((0, helpers_1.getISO8601Date)(trigger.value)); } return toReturn; } exports.generateTriggerLine = generateTriggerLine; function generateTimeTrigger(trigger) { var toReturn = ""; return toReturn; } //# sourceMappingURL=index.js.map