vtodogenerator
Version:
A library to generate VTODO compatible with RFC5545
128 lines • 5.34 kB
JavaScript
;
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