Create ICS files in ES6. Works in Node.js or in the browser.
NOTE: Please check out immutable-ics
for a better JavaScript ICS solution.
npm install --save ics-js
Import the module:
import * as ICS from 'ics-js';
Or import just what is needed:
import { VCALENDAR, VEVENT } from 'ics-js';
const cal = new ICS.VCALENDAR();
The following components are implenented:
VCALENDAR
VEVENT
VALARM
VTODO
/**
* Component#addProp(name, value, props = {}, skipTransformer = false)
*
* @param {string} name - Name of the property (e.g. DTSTAMP).
* @param {*} [value] - Value of the property.
* @param {Object} [props={}] - Object of properties for the property. Object keys and values are directly injected.
* @param {boolean} [skipTransformer=false] - Explicitly determine if the property's value is transformed.
*/
cal.addProp('VERSION', 2) // Number(2) is converted to '2.0'
cal.addProp('PRODID', 'XYZ Corp');
Each component contains a list of property validations. Only valid properties can be added according to the RFC 5545 spec.
The following properties are implemented:
Name | Input | Output |
---|---|---|
CATEGORIES |
Array<String> |
Array items separated by , |
CREATED |
Date |
Formatted date to spec |
DTEND |
Date |
Formatted date to spec |
DTSTAMP |
Date |
Formatted date to spec |
DTSTART |
Date |
Formatted date to spec |
DUE |
Date |
Formatted date to spec |
EXDATE |
Array<Date> |
Array items separated by , formatted to spec |
GEO |
Array<Float> |
Array items separated by ; (should be [x, y] ) |
LAST-MODIFIED |
Date |
Formatted date to spec |
RDATE |
Date |
Formatted date to spec |
TRANSP |
Boolean |
TRANSPARENT if true, OPAQUE if false |
UID |
String or none |
If no input is provided, generates a random GUID |
VERSION |
Number |
Float with 1 decimal to spec |
All other properties (e.g. SUMMARY
, LOCATION
) are stored as-is without
transformations.
const event = new ICS.VEVENT();
event.addProp('UID');
event.addProp('DTSTAMP', new Date('2015-07-18 10:00:00'), { VALUE: 'DATE-TIME' });
event.addProp('ATTENDEE', null, {
CN: 'Sample Company',
RSVP: 'FALSE:mailto:foo@example.com'
})
cal.addComponent(event);
Each component contains a list of valid nested components. Only valid components can be nested according to the RFC 5545 spec.
cal.toString(); // Returns a string
cal.toBlob(); // Returns a Blob (or throws IncompatiblePlatform if Blob is undefined)
cal.toBase64(); // Returns a base64 encoded string