Numeric Production Mechanism
Miss any of our Open RFC calls?Watch the recordings here! »

ikalendar

1.0.1 • Public • Published

iKalendar

NPM

Build Status

IMPORTANT: This is an early stage release and project structure can change greatly!

Parser and builder for iCalendar (RFC 5545) data format

Table of Contents

Install

npm instal ikalendar

Usage

Builder

import { Builder, Calendar } from 'ikalendar'
 
const calendar: Calendar = {
    version: '2.0',
    prodId: 'Awesome project prodId',
    events: [
        {
            start: '20101231T083000Z',
            uid: 'uid1@example.com'
        }
    ]
}
 
const builder = new Builder(calendar)
builder.build()
 
// Returns:
// 
// BEGIN:VCALENDAR
// VERSION:2.0
// PRODID:Awesome project prodId
// BEGIN:VEVENT
// DTSTAMP:20101231T083000Z
// UID:uid1@example.com
// END:VEVENT
// END:VCALENDAR

Parser

import { Parser } from 'ikalendar'
 
const str = `BEGIN:VCALENDAR
VERSION:2.0
PRODID:Awesome project prodId
BEGIN:VEVENT
DTSTAMP:20101231T083000Z
UID:uid1@example.com
END:VEVENT
END:VCALENDAR
`
 
const parser = new Parser(str)
parser.parse()
 
// Returns:
// 
// {
//     version: '2.0',
//     prodId: 'Awesome project prodId',
//     events: [
//         {
//             start: '20101231T083000Z',
//             uid: 'uid1@example.com'
//         }
//     ]
// }

Types

Date

iCal format supports multiple different Date/Date-Time formats, iKalendar (for now) expects you to to supply it with valid iCalendar format. It won't take care of any kind of parsing or formatting.

I'll use DTSTART property for this example. You can create this property multiple ways:

  1. Plain string:
    start:'19980118T230000'
    // DTSTART:19980118T230000
  2. Object (ComplexDate) with following attributes:
    type ComplexDate = {
        type?: 'DATE-TIME' | 'DATE'
        tzId?: string
        value: string
    }
    • Passing tzId
    start:{value: '19980118T025436', tzId: 'America/Los_Angeles'}
    // DTSTART;TZID=America/Los_Angeles:20200217T025436
    • You can also specify type: 'DATE'
    start:{value: '19980118', type: 'DATE'}
    // DTSTART:19980118
    • Or use all three attributes:
    start:{value: '19980301T090000', type: 'DATE-TIME', tzId: 'Europe/Bratislava'}
    // DTSTART;VALUE=DATE-TIME;TZID=Europe/Bratislava:19980301T090000

Credits

This library uses regex used in iCalendar Ruby library.

License

This project is licensed under the ISC License - see the LICENSE.md file for details

Install

npm i ikalendar

DownloadsWeekly Downloads

33

Version

1.0.1

License

ISC

Unpacked Size

55.3 kB

Total Files

72

Last publish

Collaborators

  • avatar