#ICal Toolkit NodeJS
ICal generator/updater/parser with Timezone/DST, Alams, Organizers, Events, etc. support.
100% JavaScript implementation.
Ical generator supports the following:
-
VTIMEZONE - TIMEZONE/DST info. We have inbuilt timezone database, you just specify TimeZone ID and rest module will take care.
-
Alarms
-
Attendees info and state per event.
-
Organizers
-
Multiple events
-
Full day and repeating events
-
URL property
-
Simple intuitive interface.
##Install
> npm install ical-toolkit
##Builder
Quick documentation, but covers all and will get you going quick!
####Values to use:
Here are the constants you can use:
#####Attendee Role
"REQ-PARTICIPANT"; Indicates a participant whose
; participation is required
"OPT-PARTICIPANT" ; Indicates a participant whose
; participation is optional
"NON-PARTICIPANT" ; Indicates a participant who is
; copied for information purposes only
#####Attendee Status
"NEEDS-ACTION" ; Event needs action
"ACCEPTED" ; Event accepted
"DECLINED" ; Event declined
"TENTATIVE" ; Event tentatively accepted
"DELEGATED" ; Event delegated
#####Methods
'PUBLISH',
'REQUEST',
'REPLY',
'ADD',
'CANCEL',
'REFRESH',
'COUNTER',
'DECLINECOUNTER'
#####Repeating Freq for event
'SECONDLY',
'MINUTELY',
'HOURLY',
'DAILY',
'WEEKLY',
'MONTHLY',
'YEARLY'
#####Statuses for event
'CONFIRMED',
'TENTATIVE',
'CANCELLED'
###Demo code, shows all.
var icalToolkit = require('ical-toolkit');
var builder = icalToolkit.createIcsFileBuilder();
builder.spacers = true;
builder.NEWLINE_CHAR = '\r\n';
builder.throwError = false;
builder.ignoreTZIDMismatch = true;
builder.calname = 'Yo Cal';
builder.timezone = 'america/new_york';
builder.tzid = 'america/new_york';
builder.method = 'REQUEST';
builder.events.push({
start: new Date(),
end: new Date(),
transp: 'OPAQUE',
summary: 'Test Event',
alarms: [15, 10, 5],
additionalTags: {
'SOMETAG': 'SOME VALUE'
},
uid: null,
sequence: null,
repeating: {
freq: 'DAILY',
count: 10,
interval: 10,
until: new Date()
},
allDay: true,
stamp: new Date(),
floating: false,
location: 'Home',
description: 'Testing it!',
organizer: {
name: 'Kushal Likhi',
email: 'test@mail',
sentBy: 'person_acting_on_behalf_of_organizer@email.com'
},
attendees: [
{
name: 'A1',
email: 'a1@email.com',
status: 'TENTATIVE',
role: 'REQ-PARTICIPANT',
rsvp: true
},
{
name: 'A2',
email: 'a2@email.com'
}
]
method: 'PUBLISH',
status: 'CONFIRMED',
url: 'http://google.com'
});
builder.additionalTags = {
'SOMETAG': 'SOME VALUE'
};
var icsFileContent = builder.toString();
if (icsFileContent instanceof Error) {
console.log('Returned Error, you can also configure to throw errors!');
}
console.log(icsFileContent);
####Output####
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME:Yo Cal
METHOD:REQUEST
PRODID:node-ical-toolkit
X-WR-TIMEZONE:asia/kalcutta
BEGIN:VTIMEZONE
TZID:America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:f0e532a3
DTSTAMP:20150707T070727Z
TRANSP:OPAQUE
DTSTART;VALUE=DATE:20150707
DTEND;VALUE=DATE:20150707
SUMMARY:Test Event
SEQUENCE:0
LOCATION:Home
DESCRIPTION:Testing it!
URL;VALUE=URI:http://google.com
STATUS:CONFIRMED
ORGANIZER;SENT-BY="MAILTO:hello@test.com":CN="Kushal Likhi":mailto:test@mail
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;RSVP=TRUE;CN=A1:MAILTO:a1@email.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=A2:MAILTO:a2@email.com
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
END:VALARM
BEGIN:VALARM
TRIGGER:-PT10M
ACTION:DISPLAY
END:VALARM
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
END:VALARM
RRULE:FREQ=DAILY;COUNT=10;INTERVAL=10;UNTIL=20150707T070727Z
SOMETAG:SOME VALUE
END:VEVENT
SOMETAG:SOME VALUE
END:VCALENDAR
##Parser##
Parse the ics files to JSON structures
it('should parse the content sync', function (done) {
var json = icalToolkit.parseToJSON(icsContent);
assert(json);
assert(!(json instanceof Error));
assert(json.VCALENDAR);
done();
});
it('should parse the content async', function (done) {
icalToolkit.parseToJSON(icsContent, function (err, json) {
if (err) throw err;
assert(json);
assert(!(json instanceof Error));
assert(json.VCALENDAR);
done();
});
});
it('should parse the file', function (done) {
icalToolkit.parseFileToJSON(sampleFilePAth, function (err, json) {
if (err) throw err;
assert(json);
assert(!(json instanceof Error));
assert(json.VCALENDAR);
done();
});
});
it('should parse the file sync', function (done) {
var json = icalToolkit.parseFileToJSONSync(sampleFilePAth);
assert(json);
assert(!(json instanceof Error));
assert(json.VCALENDAR);
done();
});