Immutable iCalendar document creation
npm install immutable-icsImmutable iCalendar document creation using [typed-immutable][0] and
[Immutable.js][1].



``sh`
npm install --save immutable-ics
Import the modules:
`js`
import { Component, Property } from 'immutable-ics'
The following modules are available:
* Component: Typed Immutable Record to build an iCalendar ComponentProperty
* : Typed Immutable Record to build an iCalendar Property
Create a new component and add properties:
`js
let calendar
let event
const versionProperty = new Property({ name: 'VERSION', value: 2 })
const dtstartProperty = new Property({
name: 'DTSTART',
parameters: { VALUE: 'DATE' },
value: new Date('1991-07-11 7:00:00')
})
calendar = new Component({ name: 'VCALENDAR' })
calendar = calendar.pushProperty(versionProperty)
event = new Component({ name: 'VEVENT' })
event = event.pushProperty(dtstartProperty)
calendar = calendar.pushComponent(event)
`
Or instantiate everything at once:
`js`
const calendar = new Component({
name: 'VCALENDAR',
properties: [
new Property({ name: 'VERSION', value: 2 })
],
components: [
new Component({
name: 'VEVENT',
properties: [
new Property({
name: 'DTSTART',
parameters: { VALUE: 'DATE' },
value: new Date('1991-07-11 7:00:00')
})
]
})
]
})
Call #toString on the Component or Property to get a string representation
of the component according to the iCalendar specifications.
``
calendar.toString()
Generated data:
``
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART;VALUE=DATE:19910711
END:VEVENT
END:VCALENDAR
This string can then be saved to a file, sent to the user, etc.
An Immutable Record with the following properties:
* name: String: Name of the component (e.g. "VCALENDAR", "VEVENT")components: List
* : List of Component instancesproperties: List
* : List of Property instances
All methods return a new instance of the component due to its backing on
Immutable's Record.
#### Extended Methods
* Component.constructor({ name: String, components: (List
Instantiate a new Component with initial values. components andproperties
will be coerced to a List.
* Component.prototype.pushComponent(component: Component): Component
Push a Component to the list of components.
* Component.prototype.pushProperty(property: Property): Component
Push a Property to the list of properties.
* Component.prototype.clear(): Component
Clear all components and properties from the component.
* Component.prototype.clearComponents(): Component
Clear all components from the component.
* Component.prototype.clearProperties(): Component
Clear all properties from the component.
* Component.prototype.toString(): String
Get a string representation of the component according to the iCalendar
specifications.
An Immutable Record with the following properties:
* name: String: Name of the property (e.g. "DTSTART", "SUMMARY")parameters: Map
* : Property parameters (e.g. "VALUE")transform: Boolean = true
* : Explicit determiner if the value is transformedvalue: Any
* : Value of the property
All methods return a new instance of the property due to its backing on
Immutable's Record.
#### Extended Methods
* Property.constructor({ name: String, parameters: (Object | Map
Instantiate a new Property with initial values. parameters will be coercedMap
into a .
* Property.prototype.getTransformedValue(): String
Get the transformed value of the property's value. Transformations are
conveniences to generate valid iCalendar data from JavaScript objects.
For example, providing a Date object to a DTSTAMP property value will`
transform as such:
js`
const dtstampProperty = new Property({
name: 'DTSTAMP'
parameters: { VALUE: 'DATE' },
value: new Date('1991-07-11 7:00:00')
})
dtstampProperty.toString() // => DTSTAMP;VALUE=DATE:19910711
* Property.prototype.toString(): String`
Get a string representation of the property according to the iCalendar
specifications.
[0]: https://github.com/typed-immutable/typed-immutable/
[1]: https://github.com/facebook/immutable-js/