iamcal 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +47 -11
  2. package/lib/component.d.ts +46 -9
  3. package/lib/component.d.ts.map +1 -1
  4. package/lib/component.js +105 -17
  5. package/lib/components/Calendar.d.ts +35 -14
  6. package/lib/components/Calendar.d.ts.map +1 -1
  7. package/lib/components/Calendar.js +43 -15
  8. package/lib/components/CalendarEvent.d.ts +84 -22
  9. package/lib/components/CalendarEvent.d.ts.map +1 -1
  10. package/lib/components/CalendarEvent.js +142 -67
  11. package/lib/components/TimeZone.d.ts +62 -39
  12. package/lib/components/TimeZone.d.ts.map +1 -1
  13. package/lib/components/TimeZone.js +81 -86
  14. package/lib/components/TimeZoneOffset.d.ts +103 -0
  15. package/lib/components/TimeZoneOffset.d.ts.map +1 -0
  16. package/lib/components/TimeZoneOffset.js +148 -0
  17. package/lib/components/index.d.ts +1 -0
  18. package/lib/components/index.d.ts.map +1 -1
  19. package/lib/components/index.js +2 -1
  20. package/lib/date.d.ts +165 -0
  21. package/lib/date.d.ts.map +1 -0
  22. package/lib/date.js +373 -0
  23. package/lib/index.d.ts +3 -1
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +4 -2
  26. package/lib/io.d.ts +9 -7
  27. package/lib/io.d.ts.map +1 -1
  28. package/lib/io.js +16 -11
  29. package/lib/parse.d.ts +32 -15
  30. package/lib/parse.d.ts.map +1 -1
  31. package/lib/parse.js +55 -53
  32. package/lib/patterns.d.ts +36 -0
  33. package/lib/patterns.d.ts.map +1 -0
  34. package/lib/patterns.js +50 -0
  35. package/lib/property.d.ts +149 -0
  36. package/lib/property.d.ts.map +1 -0
  37. package/lib/property.js +450 -0
  38. package/package.json +50 -38
  39. package/src/component.ts +132 -23
  40. package/src/components/Calendar.ts +58 -20
  41. package/src/components/CalendarEvent.ts +170 -66
  42. package/src/components/TimeZone.ts +86 -96
  43. package/src/components/TimeZoneOffset.ts +187 -0
  44. package/src/components/index.ts +2 -1
  45. package/src/date.ts +395 -0
  46. package/src/index.ts +3 -1
  47. package/src/io.ts +16 -11
  48. package/src/parse.ts +71 -51
  49. package/src/patterns.ts +69 -0
  50. package/src/property.ts +492 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # iamcal [![build status](https://img.shields.io/github/actions/workflow/status/olillin/iamcal/npm-test.yml?style=flat-square)](https://github.com/olillin/iamcal/actions/workflows/npm-test.yml) [![npm badge](<https://img.shields.io/npm/v/iamcal?style=flat-square&color=red>)](https://www.npmjs.com/package/iamcal)
1
+ # iamcal [![build status](https://img.shields.io/github/actions/workflow/status/olillin/iamcal/npm-test.yml?style=flat-square)](https://github.com/olillin/iamcal/actions/workflows/npm-test.yml) [![npm badge](https://img.shields.io/npm/v/iamcal?style=flat-square&color=red)](https://www.npmjs.com/package/iamcal)
2
2
 
3
- A library for reading, modifying and writing [ICalendar](https://en.wikipedia.org/wiki/ICalendar) files.
3
+ A library for reading, modifying and writing [iCalendar](https://en.wikipedia.org/wiki/ICalendar) files.
4
4
 
5
5
  ## Installation
6
6
 
@@ -14,12 +14,10 @@ npm install iamcal
14
14
 
15
15
  ### Parsing and editing a calendar
16
16
 
17
- This code:
17
+ Below is an example of editing a calendar file.
18
18
 
19
19
  ```typescript
20
- import { Calendar } from 'iamcal'
21
- import { dump } from 'iamcal/io'
22
- import { parseCalendar } from 'iamcal/parse'
20
+ import { Calendar, dump, parseCalendar } from 'iamcal'
23
21
 
24
22
  const calendar: Calendar = await parseCalendar(`
25
23
  BEGIN:VCALENDAR
@@ -36,16 +34,16 @@ END:VEVENT
36
34
  END:VCALENDAR
37
35
  `)
38
36
 
39
- calendar.events().forEach(event => {
40
- if (event.summary() === "🎉iamcal release party") {
41
- event.setLocation("My house (budget cuts sorry)")
37
+ calendar.getEvents().forEach(event => {
38
+ if (event.getSummary() === '🎉iamcal release party') {
39
+ event.setLocation('My house (budget cuts sorry)')
42
40
  }
43
41
  })
44
42
 
45
- await dump(calendar, "./new_calendar.ics")
43
+ await dump(calendar, './new_calendar.ics')
46
44
  ```
47
45
 
48
- produces the file `new_calendar.ics`:
46
+ Running the code will produce the file `new_calendar.ics`:
49
47
 
50
48
  ```icalendar
51
49
  BEGIN:VCALENDAR
@@ -63,3 +61,41 @@ END:VCALENDAR
63
61
  ```
64
62
 
65
63
  ### Creating a new calendar
64
+
65
+ Below is an example of creating a new calendar from scratch.
66
+
67
+ ```typescript
68
+ const calendar = new Calendar('example')
69
+
70
+ const uid = '6c9fabd0-cc8f-4900-b795-40e3d125b233'
71
+ const stamp = new CalendarDateTime('2025-07-06T12:00:00')
72
+ const start = new CalendarDateTime('2025-07-08T17:00:00')
73
+ const end = new CalendarDateTime('2025-07-08T20:00:00')
74
+
75
+ const event = new CalendarEvent(uid, stamp, start)
76
+ .setEnd(end)
77
+ .setSummary('Celebrating my new calendar!')
78
+ .setDescription('I made it with iamcal')
79
+
80
+ calendar.addComponent(event)
81
+
82
+ const calendarText = calendar.serialize()
83
+ console.log(calendarText)
84
+ ```
85
+
86
+ Running the code above will produce the following output:
87
+
88
+ ```icalendar
89
+ BEGIN:VCALENDAR
90
+ PRODID:example
91
+ VERSION:2.0
92
+ BEGIN:VEVENT
93
+ UID:6c9fabd0-cc8f-4900-b795-40e3d125b233
94
+ DTSTAMP:20250706T120000
95
+ DTSTART:20250708T170000
96
+ DTEND:20250708T200000
97
+ SUMMARY:Celebrating my new calendar!
98
+ DESCRIPTION:I made it with iamcal
99
+ END:VEVENT
100
+ END:VCALENDAR
101
+ ```
@@ -1,7 +1,8 @@
1
- export interface Property {
2
- name: string;
3
- params: string[];
4
- value: string;
1
+ import { CalendarDateOrTime } from './date';
2
+ import { AllowedPropertyName, Property } from './property';
3
+ /** Represents an error which occurs while validating a calendar component. */
4
+ export declare class ComponentValidationError extends Error {
5
+ constructor(message: string);
5
6
  }
6
7
  export declare class Component {
7
8
  name: string;
@@ -10,16 +11,52 @@ export declare class Component {
10
11
  constructor(name: string, properties?: Property[], components?: Component[]);
11
12
  serialize(): string;
12
13
  getProperty(name: string): Property | null;
13
- setProperty(name: string, value: string): this;
14
- removePropertiesWithName(name: string): this | undefined;
14
+ setProperty(name: string, value: string | CalendarDateOrTime): this;
15
+ hasProperty(name: string, value?: string): boolean;
16
+ removePropertiesWithName(name: string): void;
15
17
  getPropertyParams(name: string): string[] | null;
16
18
  setPropertyParams(name: string, params: string[]): this;
17
19
  addComponent(component: Component): this;
20
+ addComponents(components: Component[]): this;
18
21
  /**
19
- * Remove a component from this component
20
- * @returns `true` if the component was removed. `false` if the component was not present
22
+ * Remove a component from this component.
23
+ * @param component The component to remove.
24
+ * @returns `true` if the component was removed. `false` if the component was not present.
21
25
  */
22
26
  removeComponent(component: Component): boolean;
23
- getComponents(name: string): Component[];
27
+ getComponentsWithName(name: string): Component[];
28
+ /**
29
+ * Validate the component according to the rules of the iCalendar
30
+ * specification.
31
+ *
32
+ * This method should be overridden by subclasses to
33
+ * implement specific validation logic. The methods
34
+ * {@link validateRequiredProperty} and {@link validateOptionalProperty} may
35
+ * help with this.
36
+ * @throws {ComponentValidationError} If the component is invalid.
37
+ */
38
+ validate(): void;
39
+ /**
40
+ * Validate that a property exists and is valid using {@link validateProperty}.
41
+ * @param propertyName The name of the property to validate.
42
+ * @throws {MissingPropertyError} If the property doesn't exist on this component.
43
+ * @throws {PropertyValidationError} If the property exists but is invalid.
44
+ */
45
+ validateRequiredProperty(propertyName: AllowedPropertyName): void;
46
+ /**
47
+ * Validate that a property is valid using {@link validateProperty} if it exists.
48
+ * @param propertyName The name of the property to validate.
49
+ * @throws {PropertyValidationError} If the property exists and is invalid.
50
+ */
51
+ validateOptionalProperty(propertyName: AllowedPropertyName): void;
52
+ /**
53
+ * Validate all properties on this component.
54
+ *
55
+ * If a property is in `requiredProperties` it is
56
+ * validated with {@link validateRequiredProperty}, otherwise it is
57
+ * validated with {@link validateOptionalProperty}.
58
+ * @param requiredProperties A list of property names which are required on this component.
59
+ */
60
+ validateAllProperties(requiredProperties?: AllowedPropertyName[]): void;
24
61
  }
25
62
  //# sourceMappingURL=component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,SAAS;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,UAAU,EAAE,SAAS,EAAE,CAAA;gBAEX,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE;IAc3E,SAAS,IAAI,MAAM;IA+BnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAS1C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAe9C,wBAAwB,CAAC,IAAI,EAAE,MAAM;IAOrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAShD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IASvD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKxC;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAU9C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;CAW3C"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EACH,mBAAmB,EAGnB,QAAQ,EAGX,MAAM,YAAY,CAAA;AAEnB,8EAA8E;AAC9E,qBAAa,wBAAyB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI9B;AAKD,qBAAa,SAAS;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,UAAU,EAAE,SAAS,EAAE,CAAA;gBAGnB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,QAAQ,EAAE,EACvB,UAAU,CAAC,EAAE,SAAS,EAAE;IAe5B,SAAS,IAAI,MAAM;IA+BnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAS1C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAyBnE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAYlD,wBAAwB,CAAC,IAAI,EAAE,MAAM;IAOrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAShD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IASvD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKxC,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAK5C;;;;OAIG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAU9C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAYhD;;;;;;;;;OASG;IACH,QAAQ,IAAI,IAAI;IAEhB;;;;;OAKG;IACH,wBAAwB,CAAC,YAAY,EAAE,mBAAmB;IAS1D;;;;OAIG;IACH,wBAAwB,CAAC,YAAY,EAAE,mBAAmB;IAK1D;;;;;;;OAOG;IACH,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,mBAAmB,EAAE;CAmBnE"}
package/lib/component.js CHANGED
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Component = void 0;
3
+ exports.Component = exports.ComponentValidationError = void 0;
4
+ const property_1 = require("./property");
5
+ /** Represents an error which occurs while validating a calendar component. */
6
+ class ComponentValidationError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'ComponentValidationError';
10
+ }
11
+ }
12
+ exports.ComponentValidationError = ComponentValidationError;
4
13
  // Max line length as defined by RFC 5545 3.1.
5
14
  const MAX_LINE_LENGTH = 75;
6
15
  class Component {
@@ -13,19 +22,19 @@ class Component {
13
22
  this.properties = properties;
14
23
  }
15
24
  else {
16
- this.properties = new Array();
25
+ this.properties = [];
17
26
  }
18
27
  if (components) {
19
28
  this.components = components;
20
29
  }
21
30
  else {
22
- this.components = new Array();
31
+ this.components = [];
23
32
  }
24
33
  }
25
34
  serialize() {
26
35
  // Create lines
27
36
  const lines = [`BEGIN:${this.name}`];
28
- for (let property of this.properties) {
37
+ for (const property of this.properties) {
29
38
  let line = property['name'] + //
30
39
  property.params.map(p => ';' + p).join('') +
31
40
  ':' +
@@ -37,7 +46,7 @@ class Component {
37
46
  }
38
47
  lines.push(line);
39
48
  }
40
- for (let component of this.components) {
49
+ for (const component of this.components) {
41
50
  lines.push(component.serialize());
42
51
  }
43
52
  lines.push(`END:${this.name}`);
@@ -56,21 +65,39 @@ class Component {
56
65
  setProperty(name, value) {
57
66
  for (const property of this.properties) {
58
67
  if (property.name === name) {
59
- property.value = value;
68
+ if (typeof value === 'string') {
69
+ property.value = value;
70
+ }
71
+ else {
72
+ const prop = value.toProperty(name);
73
+ property.params = prop.params;
74
+ property.value = prop.value;
75
+ }
60
76
  return this;
61
77
  }
62
78
  }
63
- this.properties.push({
64
- name: name,
65
- params: [],
66
- value: value,
67
- });
79
+ this.properties.push(typeof value === 'string'
80
+ ? {
81
+ name: name,
82
+ params: [],
83
+ value: value,
84
+ }
85
+ : value.toProperty(name));
68
86
  return this;
69
87
  }
88
+ hasProperty(name, value) {
89
+ for (const property of this.properties) {
90
+ if (property.name === name &&
91
+ (value === undefined || property.value === value)) {
92
+ return true;
93
+ }
94
+ }
95
+ return false;
96
+ }
70
97
  removePropertiesWithName(name) {
71
98
  const index = this.properties.findIndex(p => p.name === name);
72
99
  if (index === -1)
73
- return this;
100
+ return;
74
101
  // Remove property at index
75
102
  this.properties.splice(index, 1);
76
103
  }
@@ -94,9 +121,14 @@ class Component {
94
121
  this.components.push(component);
95
122
  return this;
96
123
  }
124
+ addComponents(components) {
125
+ this.components.push(...components);
126
+ return this;
127
+ }
97
128
  /**
98
- * Remove a component from this component
99
- * @returns `true` if the component was removed. `false` if the component was not present
129
+ * Remove a component from this component.
130
+ * @param component The component to remove.
131
+ * @returns `true` if the component was removed. `false` if the component was not present.
100
132
  */
101
133
  removeComponent(component) {
102
134
  const index = this.components.indexOf(component);
@@ -106,15 +138,71 @@ class Component {
106
138
  this.components.splice(index, 1);
107
139
  return true;
108
140
  }
109
- getComponents(name) {
141
+ getComponentsWithName(name) {
110
142
  const components = [];
111
- for (let component of this.components) {
143
+ for (const component of this.components) {
112
144
  if (component.name === name) {
113
145
  components.push(component);
114
146
  }
115
147
  }
116
148
  return components;
117
149
  }
150
+ /**
151
+ * Validate the component according to the rules of the iCalendar
152
+ * specification.
153
+ *
154
+ * This method should be overridden by subclasses to
155
+ * implement specific validation logic. The methods
156
+ * {@link validateRequiredProperty} and {@link validateOptionalProperty} may
157
+ * help with this.
158
+ * @throws {ComponentValidationError} If the component is invalid.
159
+ */
160
+ validate() { }
161
+ /**
162
+ * Validate that a property exists and is valid using {@link validateProperty}.
163
+ * @param propertyName The name of the property to validate.
164
+ * @throws {MissingPropertyError} If the property doesn't exist on this component.
165
+ * @throws {PropertyValidationError} If the property exists but is invalid.
166
+ */
167
+ validateRequiredProperty(propertyName) {
168
+ const property = this.getProperty(propertyName);
169
+ if (property == null)
170
+ throw new property_1.MissingPropertyError(`Missing required property ${propertyName}`);
171
+ (0, property_1.validateProperty)(property);
172
+ }
173
+ /**
174
+ * Validate that a property is valid using {@link validateProperty} if it exists.
175
+ * @param propertyName The name of the property to validate.
176
+ * @throws {PropertyValidationError} If the property exists and is invalid.
177
+ */
178
+ validateOptionalProperty(propertyName) {
179
+ const property = this.getProperty(propertyName);
180
+ if (property != null)
181
+ (0, property_1.validateProperty)(property);
182
+ }
183
+ /**
184
+ * Validate all properties on this component.
185
+ *
186
+ * If a property is in `requiredProperties` it is
187
+ * validated with {@link validateRequiredProperty}, otherwise it is
188
+ * validated with {@link validateOptionalProperty}.
189
+ * @param requiredProperties A list of property names which are required on this component.
190
+ */
191
+ validateAllProperties(requiredProperties) {
192
+ requiredProperties?.forEach(propertyName => {
193
+ if (!this.hasProperty(propertyName)) {
194
+ throw new property_1.MissingPropertyError(`Missing required property ${propertyName}`);
195
+ }
196
+ });
197
+ this.properties.forEach(property => {
198
+ if (requiredProperties?.includes(property.name)) {
199
+ this.validateRequiredProperty(property.name);
200
+ }
201
+ else {
202
+ this.validateOptionalProperty(property.name);
203
+ }
204
+ });
205
+ }
118
206
  }
119
207
  exports.Component = Component;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBOEM7QUFDOUMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO0FBUTFCLE1BQWEsU0FBUztJQUNsQixJQUFJLENBQVE7SUFDWixVQUFVLENBQVk7SUFDdEIsVUFBVSxDQUFhO0lBRXZCLFlBQVksSUFBWSxFQUFFLFVBQXVCLEVBQUUsVUFBd0I7UUFDdkUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO1FBQ2pDLENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ0wsZUFBZTtRQUNmLE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUVwQyxLQUFLLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksR0FDSixRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDckIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsR0FBRztnQkFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLENB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
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FPbUI7QUFFbkIsOEVBQThFO0FBQzlFLE1BQWEsd0JBQXlCLFNBQVEsS0FBSztJQUMvQyxZQUFZLE9BQWU7UUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRywwQkFBMEIsQ0FBQTtJQUMxQyxDQUFDO0NBQ0o7QUFMRCw0REFLQztBQUVELDhDQUE4QztBQUM5QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7QUFFMUIsTUFBYSxTQUFTO0lBQ2xCLElBQUksQ0FBUTtJQUNaLFVBQVUsQ0FBWTtJQUN0QixVQUFVLENBQWE7SUFFdkIsWUFDSSxJQUFZLEVBQ1osVUFBdUIsRUFDdkIsVUFBd0I7UUFFeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUE7UUFDeEIsQ0FBQztRQUNELElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLGVBQWU7UUFDZixNQUFNLEtBQUssR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7UUFFcEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLEdBQ0osUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLEdBQUc7Z0JBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBRXJCLGFBQWE7WUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxFQUFFLENBQUM7Z0JBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQTtnQkFDOUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ2hELENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BCLENBQUM7UUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7UUFFOUIsYUFBYTtRQUNiLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbkMsT0FBTyxVQUFVLENBQUE7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxRQUFRLENBQUE7WUFDbkIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWSxFQUFFLEtBQWtDO1FBQ3hELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7Z0JBQzFCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNuQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7b0JBQzdCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtnQkFDL0IsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQTtZQUNmLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2hCLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDckIsQ0FBQyxDQUFDO2dCQUNJLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxFQUFFO2dCQUNWLEtBQUssRUFBRSxLQUFLO2FBQ2Y7WUFDSCxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDL0IsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZLEVBQUUsS0FBYztRQUNwQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUNJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDdEIsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQ25ELENBQUM7Z0JBQ0MsT0FBTyxJQUFJLENBQUE7WUFDZixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFZO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQTtRQUM3RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFNO1FBQ3hCLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVk7UUFDMUIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN6QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUE7WUFDMUIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsTUFBZ0I7UUFDNUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN6QixRQUFRLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtZQUM1QixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMvQixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBdUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQTtRQUNuQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLFNBQW9CO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ2hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRTlCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFaEMsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBWTtRQUM5QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFBO1FBRWxDLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUM5QixDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFBO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxRQUFRLEtBQVUsQ0FBQztJQUVuQjs7Ozs7T0FLRztJQUNILHdCQUF3QixDQUFDLFlBQWlDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDL0MsSUFBSSxRQUFRLElBQUksSUFBSTtZQUNoQixNQUFNLElBQUksK0JBQW9CLENBQzFCLDZCQUE2QixZQUFZLEVBQUUsQ0FDOUMsQ0FBQTtRQUNMLElBQUEsMkJBQWdCLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3QkFBd0IsQ0FBQyxZQUFpQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQy9DLElBQUksUUFBUSxJQUFJLElBQUk7WUFBRSxJQUFBLDJCQUFnQixFQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gscUJBQXFCLENBQUMsa0JBQTBDO1FBQzVELGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksK0JBQW9CLENBQzFCLDZCQUE2QixZQUFZLEVBQUUsQ0FDOUMsQ0FBQTtZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLElBQ0ksa0JBQWtCLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUF5QixDQUFDLEVBQ2xFLENBQUM7Z0JBQ0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNoRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0NBQ0o7QUFsT0QsOEJBa09DIn0=
@@ -7,39 +7,60 @@ export declare class Calendar extends Component {
7
7
  name: string;
8
8
  /**
9
9
  * @param prodid A unique identifier of the program creating the calendar.
10
- *
11
- * Example: `-//Google Inc//Google Calendar 70.9054//EN`
10
+ * @example
11
+ * new Calendar('-//Google Inc//Google Calendar 70.9054//EN')
12
12
  */
13
13
  constructor(prodid: string);
14
14
  /**
15
15
  * @param prodid A unique identifier of the program creating the calendar.
16
- *
17
- * Example: `-//Google Inc//Google Calendar 70.9054//EN`
18
16
  * @param version The version of the iCalendar specification that this calendar uses.
17
+ * @example
18
+ * new Calendar('-//Google Inc//Google Calendar 70.9054//EN')
19
19
  */
20
20
  constructor(prodid: string, version: string);
21
21
  /**
22
22
  * @param component A VCALENDAR component.
23
23
  */
24
24
  constructor(component: Component);
25
- events(): CalendarEvent[];
25
+ validate(): void;
26
+ getEvents(): CalendarEvent[];
26
27
  removeEvent(event: CalendarEvent): boolean;
27
28
  removeEvent(uid: string): boolean;
28
- prodId(): string;
29
- setProdId(value: string): this;
30
- version(): string;
29
+ getProductId(): string;
30
+ setProductId(value: string): this;
31
+ getVersion(): string;
31
32
  setVersion(value: string): this;
32
- calScale(): string | undefined;
33
- setCalScale(value: string): this;
34
- removeCalScale(): void;
35
- method(): string | undefined;
33
+ getCalendarScale(): string | undefined;
34
+ setCalendarScale(value: string): this;
35
+ removeCalendarScale(): void;
36
+ getMethod(): string | undefined;
36
37
  setMethod(value: string): this;
37
38
  removeMethod(): void;
38
- calendarName(): string | undefined;
39
+ getCalendarName(): string | undefined;
39
40
  setCalendarName(value: string): this;
40
41
  removeCalendarName(): void;
41
- calendarDescription(): string | undefined;
42
+ getCalendarDescription(): string | undefined;
42
43
  setCalendarDescription(value: string): this;
43
44
  removeCalendarDescription(): void;
45
+ /** @deprecated use {@link getEvents} instead */
46
+ events: () => CalendarEvent[];
47
+ /** @deprecated use {@link getProductId} instead */
48
+ prodId: () => string;
49
+ /** @deprecated use {@link setProductId} instead */
50
+ setProdId: (value: string) => this;
51
+ /** @deprecated use {@link getVersion} instead */
52
+ version: () => string;
53
+ /** @deprecated use {@link getCalendarScale} instead */
54
+ calScale: () => string | undefined;
55
+ /** @deprecated use {@link setCalendarScale} instead */
56
+ setCalScale: (value: string) => this;
57
+ /** @deprecated use {@link removeCalendarScale} instead */
58
+ removeCalScale: () => void;
59
+ /** @deprecated use {@link getMethod} instead */
60
+ method: () => string | undefined;
61
+ /** @deprecated use {@link getCalendarName} instead */
62
+ calendarName: () => string | undefined;
63
+ /** @deprecated use {@link getCalendarDescription} instead */
64
+ calendarDescription: () => string | undefined;
44
65
  }
45
66
  //# sourceMappingURL=Calendar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/components/Calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C;;GAEG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACnC,IAAI,SAAe;IAEnB;;;;OAIG;gBACS,MAAM,EAAE,MAAM;IAC1B;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAC3C;;OAEG;gBACS,SAAS,EAAE,SAAS;IAehC,MAAM,IAAI,aAAa,EAAE;IAIzB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAC1C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAejC,MAAM,IAAI,MAAM;IAIhB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,IAAI,MAAM;IAIjB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,cAAc;IAId,MAAM,IAAI,MAAM,GAAG,SAAS;IAI5B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY;IAIZ,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC,kBAAkB;IAIlB,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,yBAAyB;CAG5B"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/components/Calendar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA4B,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C;;GAEG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACnC,IAAI,SAAc;IAElB;;;;OAIG;gBACS,MAAM,EAAE,MAAM;IAE1B;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAE3C;;OAEG;gBACS,SAAS,EAAE,SAAS;IAgBhC,QAAQ;IASR,SAAS,IAAI,aAAa,EAAE;IAM5B,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAC1C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAejC,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,UAAU,IAAI,MAAM;IAIpB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAItC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,mBAAmB;IAInB,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY;IAIZ,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC,kBAAkB;IAIlB,sBAAsB,IAAI,MAAM,GAAG,SAAS;IAI5C,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,yBAAyB;IAMzB,gDAAgD;IAChD,MAAM,QAzFO,aAAa,EAAE,CAyFL;IACvB,mDAAmD;IACnD,MAAM,QArEU,MAAM,CAqEI;IAC1B,mDAAmD;IACnD,SAAS,UAnEW,MAAM,KAAG,IAAI,CAmEJ;IAC7B,iDAAiD;IACjD,OAAO,QAjEO,MAAM,CAiEK;IACzB,uDAAuD;IACvD,QAAQ,QA3DY,MAAM,GAAG,SAAS,CA2DN;IAChC,uDAAuD;IACvD,WAAW,UAzDa,MAAM,KAAG,IAAI,CAyDF;IACnC,0DAA0D;IAC1D,cAAc,aAA2B;IACzC,gDAAgD;IAChD,MAAM,QArDO,MAAM,GAAG,SAAS,CAqDR;IACvB,sDAAsD;IACtD,YAAY,QA3CO,MAAM,GAAG,SAAS,CA2CF;IACnC,6DAA6D;IAC7D,mBAAmB,QAjCO,MAAM,GAAG,SAAS,CAiCK;CACpD"}
@@ -9,9 +9,10 @@ const CalendarEvent_1 = require("./CalendarEvent");
9
9
  class Calendar extends component_1.Component {
10
10
  name = 'VCALENDAR';
11
11
  constructor(a, b) {
12
- var component;
12
+ let component;
13
13
  if (a instanceof component_1.Component) {
14
14
  component = a;
15
+ Calendar.prototype.validate.call(component);
15
16
  }
16
17
  else {
17
18
  const prodid = a;
@@ -22,8 +23,14 @@ class Calendar extends component_1.Component {
22
23
  }
23
24
  super(component.name, component.properties, component.components);
24
25
  }
25
- events() {
26
- return this.getComponents('VEVENT').map(c => new CalendarEvent_1.CalendarEvent(c));
26
+ validate() {
27
+ if (this.name !== 'VCALENDAR')
28
+ throw new component_1.ComponentValidationError('Component name must be VCALENDAR');
29
+ const requiredProperties = ['PRODID', 'VERSION'];
30
+ this.validateAllProperties(requiredProperties);
31
+ }
32
+ getEvents() {
33
+ return this.getComponentsWithName('VEVENT').map(c => new CalendarEvent_1.CalendarEvent(c));
27
34
  }
28
35
  removeEvent(a) {
29
36
  if (a instanceof CalendarEvent_1.CalendarEvent) {
@@ -32,36 +39,36 @@ class Calendar extends component_1.Component {
32
39
  }
33
40
  else {
34
41
  const uid = a;
35
- for (const event of this.events()) {
36
- if (event.uid() !== uid)
42
+ for (const event of this.getEvents()) {
43
+ if (event.getUid() !== uid)
37
44
  continue;
38
45
  return this.removeComponent(event);
39
46
  }
40
47
  }
41
48
  return false;
42
49
  }
43
- prodId() {
50
+ getProductId() {
44
51
  return this.getProperty('PRODID').value;
45
52
  }
46
- setProdId(value) {
53
+ setProductId(value) {
47
54
  return this.setProperty('PRODID', value);
48
55
  }
49
- version() {
56
+ getVersion() {
50
57
  return this.getProperty('VERSION').value;
51
58
  }
52
59
  setVersion(value) {
53
60
  return this.setProperty('VERSION', value);
54
61
  }
55
- calScale() {
62
+ getCalendarScale() {
56
63
  return this.getProperty('CALSCALE')?.value;
57
64
  }
58
- setCalScale(value) {
65
+ setCalendarScale(value) {
59
66
  return this.setProperty('CALSCALE', value);
60
67
  }
61
- removeCalScale() {
68
+ removeCalendarScale() {
62
69
  this.removePropertiesWithName('CALSCALE');
63
70
  }
64
- method() {
71
+ getMethod() {
65
72
  return this.getProperty('METHOD')?.value;
66
73
  }
67
74
  setMethod(value) {
@@ -70,7 +77,7 @@ class Calendar extends component_1.Component {
70
77
  removeMethod() {
71
78
  this.removePropertiesWithName('METHOD');
72
79
  }
73
- calendarName() {
80
+ getCalendarName() {
74
81
  return this.getProperty('X-WR-CALNAME')?.value;
75
82
  }
76
83
  setCalendarName(value) {
@@ -79,7 +86,7 @@ class Calendar extends component_1.Component {
79
86
  removeCalendarName() {
80
87
  this.removePropertiesWithName('X-WR-CALNAME');
81
88
  }
82
- calendarDescription() {
89
+ getCalendarDescription() {
83
90
  return this.getProperty('X-WR-CALDESC')?.value;
84
91
  }
85
92
  setCalendarDescription(value) {
@@ -88,6 +95,27 @@ class Calendar extends component_1.Component {
88
95
  removeCalendarDescription() {
89
96
  this.removePropertiesWithName('X-WR-CALDESC');
90
97
  }
98
+ /* eslint-disable */
99
+ /** @deprecated use {@link getEvents} instead */
100
+ events = this.getEvents;
101
+ /** @deprecated use {@link getProductId} instead */
102
+ prodId = this.getProductId;
103
+ /** @deprecated use {@link setProductId} instead */
104
+ setProdId = this.setProductId;
105
+ /** @deprecated use {@link getVersion} instead */
106
+ version = this.getVersion;
107
+ /** @deprecated use {@link getCalendarScale} instead */
108
+ calScale = this.getCalendarScale;
109
+ /** @deprecated use {@link setCalendarScale} instead */
110
+ setCalScale = this.setCalendarScale;
111
+ /** @deprecated use {@link removeCalendarScale} instead */
112
+ removeCalScale = this.removeCalendarScale;
113
+ /** @deprecated use {@link getMethod} instead */
114
+ method = this.getMethod;
115
+ /** @deprecated use {@link getCalendarName} instead */
116
+ calendarName = this.getCalendarName;
117
+ /** @deprecated use {@link getCalendarDescription} instead */
118
+ calendarDescription = this.getCalendarDescription;
91
119
  }
92
120
  exports.Calendar = Calendar;
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBd0M7QUFDeEMsbURBQStDO0FBRS9DOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQVM7SUFDbkMsSUFBSSxHQUFHLFdBQVcsQ0FBQztJQW1CbkIsWUFBWSxDQUFzQixFQUFFLENBQVU7UUFDMUMsSUFBSSxTQUFvQixDQUFBO1FBQ3hCLElBQUksQ0FBQyxZQUFZLHFCQUFTLEVBQUUsQ0FBQztZQUN6QixTQUFTLEdBQUcsQ0FBYyxDQUFBO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxNQUFNLEdBQUcsQ0FBVyxDQUFBO1lBQzFCLE1BQU0sT0FBTyxHQUFJLENBQVksSUFBSSxLQUFLLENBQUE7WUFDdEMsU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUN0QyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUN2QyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBQ0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE1BQU07UUFDRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSw2QkFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUlELFdBQVcsQ0FBQyxDQUF5QjtRQUNqQyxJQUFJLENBQUMsWUFBWSw2QkFBYSxFQUFFLENBQUM7WUFDN0IsTUFBTSxLQUFLLEdBQUcsQ0FBa0IsQ0FBQTtZQUNoQyxPQUFP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
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw0Q0FBa0U7QUFDbEUsbURBQStDO0FBRS9DOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQVM7SUFDbkMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtJQXFCbEIsWUFBWSxDQUFzQixFQUFFLENBQVU7UUFDMUMsSUFBSSxTQUFvQixDQUFBO1FBQ3hCLElBQUksQ0FBQyxZQUFZLHFCQUFTLEVBQUUsQ0FBQztZQUN6QixTQUFTLEdBQUcsQ0FBYyxDQUFBO1lBQzFCLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sTUFBTSxHQUFHLENBQVcsQ0FBQTtZQUMxQixNQUFNLE9BQU8sR0FBSSxDQUFZLElBQUksS0FBSyxDQUFBO1lBQ3RDLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDdEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDdkMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFDekIsTUFBTSxJQUFJLG9DQUF3QixDQUM5QixrQ0FBa0MsQ0FDckMsQ0FBQTtRQUNMLE1BQU0sa0JBQWtCLEdBQXdCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3JFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxTQUFTO1FBQ0wsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksNkJBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsQ0FBQTtJQUNMLENBQUM7SUFJRCxXQUFXLENBQUMsQ0FBeUI7UUFDakMsSUFBSSxDQUFDLFlBQVksNkJBQWEsRUFBRSxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLENBQWtCLENBQUE7WUFDaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxHQUFHLEdBQUcsQ0FBVyxDQUFBO1lBQ3ZCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUc7b0JBQUUsU0FBUTtnQkFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3RDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFFLENBQUMsS0FBSyxDQUFBO0lBQzVDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBRSxDQUFDLEtBQUssQ0FBQTtJQUM3QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQTtJQUM5QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYTtRQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFBO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQTtJQUNsRCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQTtJQUNsRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBYTtRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCx5QkFBeUI7UUFDckIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxvQkFBb0I7SUFFcEIsZ0RBQWdEO0lBQ2hELE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLG1EQUFtRDtJQUNuRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUMxQixtREFBbUQ7SUFDbkQsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDN0IsaURBQWlEO0lBQ2pELE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3pCLHVEQUF1RDtJQUN2RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO0lBQ2hDLHVEQUF1RDtJQUN2RCxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO0lBQ25DLDBEQUEwRDtJQUMxRCxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO0lBQ3pDLGdEQUFnRDtJQUNoRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN2QixzREFBc0Q7SUFDdEQsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUE7SUFDbkMsNkRBQTZEO0lBQzdELG1CQUFtQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtDQUNwRDtBQTFKRCw0QkEwSkMifQ==