@timebutt/ics-js
v1.0.0
Published
Create ICS files in ES6
Downloads
76
Readme
ics-js
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.
Status
Installation
npm install --save ics-js
Documentation
Quick Guide
Import the module:
import * as ICS from 'ics-js';
Or import just what is needed:
import { VCALENDAR, VEVENT } from 'ics-js';
Create a component
const cal = new ICS.VCALENDAR();
The following components are implenented:
VCALENDAR
VEVENT
VALARM
VTODO
Add properties to a component
/**
* 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.
Nest a component
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:[email protected]'
})
cal.addComponent(event);
Each component contains a list of valid nested components. Only valid components can be nested according to the RFC 5545 spec.
Generate ICS data
cal.toString(); // Returns a string
cal.toBlob(); // Returns a Blob (or throws IncompatiblePlatform if Blob is undefined)
cal.toBase64(); // Returns a base64 encoded string