1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
let all_types = [
'text',
'uri',
'binary',
'float',
'integer',
'date-time',
'date',
'duration',
'period',
'utc-offset',
'cal-address',
'recur',
'boolean',
]
let valid_fields = {
'VCALENDAR': ['PRODID', 'VERSION', 'CALSCALE', 'METHOD'],
'VEVENT': ['DTSTAMP', 'UID', 'DTSTART', 'CLASS', 'CREATED',
'DESCRIPTION', 'GEO', 'LAST-MODIFIED', 'LOCATION',
'ORGANIZER', 'PRIORITY', 'SEQUENCE', 'STATUS',
'SUMMARY', 'TRANSP', 'URL', 'RECURRENCE-ID',
'RRULE', 'DTEND', 'DURATION', 'ATTACH', 'ATTENDEE',
'CATEGORIES', 'COMMENT', 'CONTACT', 'EXDATE',
'REQUEST-STATUS', 'RELATED-TO', 'RESOURCES', 'RDATE'],
'VTODO': ['DTSTAMP', 'UID', 'CLASS', 'COMPLETED', 'CREATED',
'DESCRIPTION', 'DTSTART', 'GEO', 'LAST-MODIFIED',
'LOCATION', 'ORGANIZER', 'PERCENT-COMPLETE', 'PRIORITY',
'RECURRENCE-ID', 'SEQUENCE', 'STATUS', 'SUMMARY', 'URL',
'RRULE', 'DUE', 'DURATION', 'ATTACH', 'ATTENDEE', 'CATEGORIES',
'COMMENT', 'CONTACT', 'EXDATE', 'REQUEST-STATUS', 'RELATED-TO',
'RESOURCES', 'RDATE',],
'VJOURNAL': ['DTSTAMP', 'UID', 'CLASS', 'CREATED', 'DTSTART', 'LAST-MODIFIED',
'ORGANIZER', 'RECURRENCE-ID', 'SEQUENCE', 'STATUS', 'SUMMARY',
'URL', 'RRULE', 'ATTACH', 'ATTENDEE', 'CATEGORIES', 'COMMENT',
'CONTACT', 'DESCRIPTION', 'EXDATE', 'RELATED-TO', 'RDATE',
'REQUEST-STATUS'],
'VFREEBUSY': ['DTSTAMP', 'UID', 'CONTACT', 'DTSTART', 'DTEND',
'ORGANIZER', 'URL', 'ATTENDEE', 'COMMENT', 'FREEBUSY',
'REQUEST-STATUS'],
'VTIMEZONE': ['TZID', 'LAST-MODIFIED', 'TZURL'],
'VALARM': ['ACTION', 'TRIGGER', 'DURATION', 'REPEAT', 'ATTACH',
'DESCRIPTION', 'SUMMARY', 'ATTENDEE'],
'STANDARD': ['DTSTART', 'TZOFFSETFROM', 'TZOFFSETTO', 'RRULE',
'COMMENT', 'RDATE', 'TZNAME'],
};
valid_fields['DAYLIGHT'] = valid_fields['STANDARD'];
let valid_input_types = {
'ACTION': ['text'], // AUDIO|DISPLAY|EMAIL|*other*
'ATTACH': ['uri', 'binary'],
'ATTENDEE': ['cal-address'],
'CALSCALE': ['text'],
'CATEGORIES': [['text']],
'CLASS': ['text'], // PUBLIC|PRIVATE|CONFIDENTIAL|*other*
'COMMENT': ['text'],
'COMPLETED': ['date-time'],
'CONTACT': ['text'],
'CREATED': ['date-time'],
'DESCRIPTION': ['text'],
'DTEND': ['date', 'date-time'],
'DTSTAMP': ['date-time'],
'DTSTART': ['date', 'date-time'],
'DUE': ['date', 'date-time'],
'DURATION': ['duration'],
'EXDATE': [['date', 'date-time']],
'FREEBUSY': [['period']],
'GEO': ['float'], // pair of floats
'LAST-MODIFIED': ['date-time'],
'LOCATION': ['text'],
'METHOD': ['text'],
'ORGANIZER': ['cal-address'],
'PERCENT-COMPLETE': ['integer'], // 0-100
'PRIORITY': ['integer'], // 0-9
'PRODID': ['text'],
'RDATE': [['date', 'date-time', 'period']],
'RECURRENCE-ID': ['date', 'date-time'],
'RELATED-TO': ['text'],
'REPEAT': ['integer'],
'REQUEST-STATUS': ['text'],
'RESOURCES': [['text']],
'RRULE': ['recur'],
'SEQUENCE': ['integer'],
'STATUS': ['text'], // see 3.8.1.11
'SUMMARY': ['text'],
'TRANSP': ['text'], // OPAQUE|TRANSPARENT
'TRIGGER': ['duration', 'date-time'],
'TZID': ['text'],
'TZNAME': ['text'],
'TZOFFSETFROM': ['utc-offset'],
'TZOFFSETTO': ['utc-offset'],
'TZURL': ['uri'],
'URL': ['uri'],
'VERSION': ['text'],
}
|