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/lib/parse.js CHANGED
@@ -4,37 +4,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DeserializationError = void 0;
7
+ exports.deserializeComponent = deserializeComponent;
7
8
  exports.deserialize = deserialize;
9
+ exports.deserializeComponentString = deserializeComponentString;
8
10
  exports.deserializeString = deserializeString;
9
11
  exports.parseCalendar = parseCalendar;
10
12
  exports.parseEvent = parseEvent;
11
- exports.parseDate = parseDate;
12
- exports.toTimeString = toTimeString;
13
- exports.toDateString = toDateString;
14
- exports.toDateTimeString = toDateTimeString;
15
- const component_1 = require("./component");
16
13
  const readline_1 = __importDefault(require("readline"));
17
14
  const stream_1 = require("stream");
15
+ const component_1 = require("./component");
18
16
  const components_1 = require("./components");
17
+ /** Represents an error that occurs when deserializing a calendar component. */
19
18
  class DeserializationError extends Error {
20
19
  name = 'DeserializationError';
21
20
  }
22
21
  exports.DeserializationError = DeserializationError;
23
22
  /**
24
- * Deserialize a calendar component
25
- * @param lines the serialized component as a readline interface
23
+ * Deserialize a calendar component.
24
+ * @param lines The serialized component as a **readline** interface.
25
+ * @returns The deserialized calendar component object.
26
+ * @throws {DeserializationError} If the component is invalid.
26
27
  */
27
- async function deserialize(lines) {
28
+ async function deserializeComponent(lines) {
28
29
  const component = new component_1.Component('');
29
30
  let done = false;
30
31
  // We use a stack to keep track of nested components
31
32
  const stack = new Array();
32
33
  const subcomponentLines = new Array();
33
- async function processLine(line) {
34
+ const processLine = async (line) => {
34
35
  if (line.trim() === '')
35
36
  return;
36
37
  if (done) {
37
- throw new DeserializationError('Trailing data after component end');
38
+ throw new DeserializationError('Found trailing data after component end');
38
39
  }
39
40
  if (line.startsWith('BEGIN:')) {
40
41
  // Begin component
@@ -50,7 +51,7 @@ async function deserialize(lines) {
50
51
  else if (line.startsWith('END:')) {
51
52
  // End component
52
53
  if (stack.length == 0) {
53
- throw new DeserializationError('Component end before begin');
54
+ throw new DeserializationError('Unexpected component end outside of components');
54
55
  }
55
56
  const stackName = stack.pop();
56
57
  const name = line.slice(line.indexOf(':') + 1);
@@ -60,7 +61,7 @@ async function deserialize(lines) {
60
61
  // Check the length of the stack after being popped
61
62
  if (stack.length == 1) {
62
63
  subcomponentLines.push(line);
63
- const subcomponent = await deserializeString(subcomponentLines.join('\r\n'));
64
+ const subcomponent = await deserializeComponentString(subcomponentLines.join('\r\n'));
64
65
  subcomponentLines.length = 0;
65
66
  component.components.push(subcomponent);
66
67
  }
@@ -73,7 +74,7 @@ async function deserialize(lines) {
73
74
  }
74
75
  else {
75
76
  if (stack.length == 0)
76
- throw new DeserializationError('Property outside of components');
77
+ throw new DeserializationError('Found stray property outside of components');
77
78
  if (stack.length > 1) {
78
79
  // Line of subcomponent
79
80
  subcomponentLines.push(line);
@@ -95,7 +96,7 @@ async function deserialize(lines) {
95
96
  component.properties.push(property);
96
97
  }
97
98
  }
98
- }
99
+ };
99
100
  /*
100
101
  The following code unfolds lines and passes them to be processed above.
101
102
 
@@ -132,59 +133,60 @@ async function deserialize(lines) {
132
133
  await processLine(unfoldedLine);
133
134
  // Check that component has been closed
134
135
  if (!done) {
135
- throw new DeserializationError('No component end');
136
+ throw new DeserializationError('Component has no end');
136
137
  }
137
138
  return component;
138
139
  }
139
140
  /**
140
- * Deserialize a calendar component
141
- * @param text the serialized component
141
+ * Deserialize a calendar component.
142
+ * @param lines The serialized component as a **readline** interface.
143
+ * @returns The deserialized calendar component object.
144
+ * @throws {DeserializationError} If the component is invalid.
145
+ * @deprecated Use {@link deserializeComponent} instead.
142
146
  */
143
- async function deserializeString(text) {
147
+ async function deserialize(lines) {
148
+ return deserializeComponent(lines);
149
+ }
150
+ /**
151
+ * Deserialize a calendar component string.
152
+ * @param text The serialized component.
153
+ * @returns The deserialized component object.
154
+ * @throws {DeserializationError} If the component is invalid.
155
+ */
156
+ async function deserializeComponentString(text) {
144
157
  const stream = stream_1.Readable.from(text);
145
- const lines = readline_1.default.createInterface({ input: stream, crlfDelay: Infinity });
146
- return deserialize(lines);
158
+ const lines = readline_1.default.createInterface({
159
+ input: stream,
160
+ crlfDelay: Infinity,
161
+ });
162
+ return deserializeComponent(lines);
147
163
  }
148
164
  /**
149
- * Parse a calendar in ICalendar format
150
- * @param text the serialized calendar
151
- * @returns the parsed calendar
165
+ * Deserialize a calendar component string.
166
+ * @param text The serialized component.
167
+ * @returns The deserialized component object.
168
+ * @throws {DeserializationError} If the component is invalid.
169
+ * @deprecated Use {@link deserializeComponentString} instead.
170
+ */
171
+ async function deserializeString(text) {
172
+ return deserializeComponentString(text);
173
+ }
174
+ /**
175
+ * Parse a serialized calendar.
176
+ * @param text A serialized calendar as you would see in an iCalendar file.
177
+ * @returns The parsed calendar object.
152
178
  */
153
179
  async function parseCalendar(text) {
154
- const component = await deserializeString(text);
155
- if (component.name !== "VCALENDAR")
156
- throw new DeserializationError("Not a calendar");
180
+ const component = await deserializeComponentString(text);
157
181
  return new components_1.Calendar(component);
158
182
  }
159
183
  /**
160
- * Parse an event in ICalendar format
161
- * @param text the serialized event
162
- * @returns the parsed event
184
+ * Parse a serialized calendar event.
185
+ * @param text A serialized event as you would see in an iCalendar file.
186
+ * @returns The parsed event object.
163
187
  */
164
188
  async function parseEvent(text) {
165
- const component = await deserializeString(text);
166
- if (component.name !== "VEVENT")
167
- throw new DeserializationError("Not an event");
189
+ const component = await deserializeComponentString(text);
168
190
  return new components_1.CalendarEvent(component);
169
191
  }
170
- function parseDate(dateProperty) {
171
- const value = dateProperty.value.trim();
172
- if (dateProperty.params.includes('VALUE=DATE')) {
173
- // Parse date only
174
- return new Date(`${value.substring(0, 4)}-${value.substring(4, 6)}-${value.substring(6, 8)}`);
175
- }
176
- else {
177
- // Parse date and time
178
- return new Date(`${value.substring(0, 4)}-${value.substring(4, 6)}-${value.substring(6, 8)} ${value.substring(9, 11)}:${value.substring(11, 13)}:${value.substring(13, 15)}`);
179
- }
180
- }
181
- function toTimeString(date) {
182
- return `${date.getHours().toString().padStart(2, '0')}${date.getMinutes().toString().padStart(2, '0')}${date.getSeconds().toString().padStart(2, '0')}`;
183
- }
184
- function toDateString(date) {
185
- return `${date.getFullYear().toString().padStart(4, '0')}${date.getMonth().toString().padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`;
186
- }
187
- function toDateTimeString(date) {
188
- return `${toDateString(date)}T${toTimeString(date)}`;
189
- }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBYUEsa0NBc0hDO0FBTUQsOENBSUM7QUFPRCxzQ0FLQztBQU9ELGdDQUtDO0FBRUQsOEJBU0M7QUFFRCxvQ0FFQztBQUVELG9DQUVDO0FBRUQsNENBRUM7QUE1TEQsMkNBQWlEO0FBQ2pELHdEQUErQjtBQUMvQixtQ0FBaUM7QUFDakMsNkNBQXNEO0FBRXRELE1BQWEsb0JBQXFCLFNBQVEsS0FBSztJQUMzQyxJQUFJLEdBQUcsc0JBQXNCLENBQUE7Q0FDaEM7QUFGRCxvREFFQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBeUI7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQTtJQUVoQixvREFBb0Q7SUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQTtJQUVqQyxNQUFNLGlCQUFpQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUE7SUFFN0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUFZO1FBQ25DLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFNO1FBRTlCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksb0JBQW9CLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUIsa0JBQWtCO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFB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
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZ0JBLG9EQW1JQztBQVNELGtDQUlDO0FBUUQsZ0VBU0M7QUFTRCw4Q0FFQztBQU9ELHNDQUdDO0FBT0QsZ0NBR0M7QUFoTkQsd0RBQStCO0FBQy9CLG1DQUFpQztBQUNqQywyQ0FBdUM7QUFDdkMsNkNBQXNEO0FBRXRELCtFQUErRTtBQUMvRSxNQUFhLG9CQUFxQixTQUFRLEtBQUs7SUFDM0MsSUFBSSxHQUFHLHNCQUFzQixDQUFBO0NBQ2hDO0FBRkQsb0RBRUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxvQkFBb0IsQ0FDdEMsS0FBeUI7SUFFekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQTtJQUVoQixvREFBb0Q7SUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQTtJQUVqQyxNQUFNLGlCQUFpQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUE7SUFFN0MsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFO1FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFNO1FBRTlCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksb0JBQW9CLENBQzFCLHlDQUF5QyxDQUM1QyxDQUFBO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVCLGtCQUFrQjtZQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJ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
@@ -0,0 +1,36 @@
1
+ export declare const CONTROL: RegExp;
2
+ export declare const NON_US_ASCII: RegExp;
3
+ export declare const VALUE_CHAR: RegExp;
4
+ export declare const SAFE_CHAR: RegExp;
5
+ export declare const QSAFE_CHAR: RegExp;
6
+ export declare const quotedString: RegExp;
7
+ export declare const value: RegExp;
8
+ export declare const paramtext: RegExp;
9
+ export declare const paramValue: RegExp;
10
+ export declare const vendorId: RegExp;
11
+ export declare const xName: RegExp;
12
+ export declare const ianaToken: RegExp;
13
+ export declare const paramName: RegExp;
14
+ export declare const param: RegExp;
15
+ export declare const name: RegExp;
16
+ export declare const contentline: RegExp;
17
+ export declare const TSAFE_CHAR: RegExp;
18
+ export declare const valueTypeBinary: RegExp;
19
+ export declare const valueTypeBoolean: RegExp;
20
+ export declare const valueTypeDate: RegExp;
21
+ export declare const valueTypeDateTime: RegExp;
22
+ export declare const valueTypeDuration: RegExp;
23
+ export declare const valueTypeFloat: RegExp;
24
+ export declare const valueTypeInteger: RegExp;
25
+ export declare const valueTypePeriod: RegExp;
26
+ export declare const valueTypeText: RegExp;
27
+ export declare const valueTypeTime: RegExp;
28
+ export declare const valueTypeUtcOffset: RegExp;
29
+ /**
30
+ * Check if a string matches a pattern for the whole string.
31
+ * @param pattern The RegExp pattern to match against.
32
+ * @param text The text to check.
33
+ * @returns Whether or not the string matches.
34
+ */
35
+ export declare function matchesWholeString(pattern: RegExp, text: string): boolean;
36
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,QAA8B,CAAA;AAClD,eAAO,MAAM,YAAY,QAAkB,CAAA;AAC3C,eAAO,MAAM,UAAU,QAEtB,CAAA;AACD,eAAO,MAAM,SAAS,QAIrB,CAAA;AACD,eAAO,MAAM,UAAU,QAEtB,CAAA;AACD,eAAO,MAAM,YAAY,QAA+C,CAAA;AACxE,eAAO,MAAM,KAAK,QAA6C,CAAA;AAC/D,eAAO,MAAM,SAAS,QAA4C,CAAA;AAClE,eAAO,MAAM,UAAU,QAEtB,CAAA;AACD,eAAO,MAAM,QAAQ,QAAmB,CAAA;AACxC,eAAO,MAAM,KAAK,QAA0D,CAAA;AAC5E,eAAO,MAAM,SAAS,QAAiB,CAAA;AACvC,eAAO,MAAM,SAAS,QAAoD,CAAA;AAC1E,eAAO,MAAM,KAAK,QAEjB,CAAA;AACD,eAAO,MAAM,IAAI,QAAoD,CAAA;AACrE,eAAO,MAAM,WAAW,QAEvB,CAAA;AAED,eAAO,MAAM,UAAU,QAItB,CAAA;AAGD,eAAO,MAAM,eAAe,QACgC,CAAA;AAC5D,eAAO,MAAM,gBAAgB,QAAiB,CAAA;AAC9C,eAAO,MAAM,aAAa,QAAa,CAAA;AACvC,eAAO,MAAM,iBAAiB,QAAwB,CAAA;AACtD,eAAO,MAAM,iBAAiB,QACqH,CAAA;AACnJ,eAAO,MAAM,cAAc,QAA8B,CAAA;AACzD,eAAO,MAAM,gBAAgB,QAAmB,CAAA;AAChD,eAAO,MAAM,eAAe,QAE3B,CAAA;AACD,eAAO,MAAM,aAAa,QAEzB,CAAA;AACD,eAAO,MAAM,aAAa,QAAe,CAAA;AACzC,eAAO,MAAM,kBAAkB,QAAwB,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzE"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /* eslint-disable no-control-regex */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.valueTypeUtcOffset = exports.valueTypeTime = exports.valueTypeText = exports.valueTypePeriod = exports.valueTypeInteger = exports.valueTypeFloat = exports.valueTypeDuration = exports.valueTypeDateTime = exports.valueTypeDate = exports.valueTypeBoolean = exports.valueTypeBinary = exports.TSAFE_CHAR = exports.contentline = exports.name = exports.param = exports.paramName = exports.ianaToken = exports.xName = exports.vendorId = exports.paramValue = exports.paramtext = exports.value = exports.quotedString = exports.QSAFE_CHAR = exports.SAFE_CHAR = exports.VALUE_CHAR = exports.NON_US_ASCII = exports.CONTROL = void 0;
5
+ exports.matchesWholeString = matchesWholeString;
6
+ // ABNF patterns from RFC5545
7
+ exports.CONTROL = /[\x00-\x08\x0A-\x1F\x7F]/g;
8
+ exports.NON_US_ASCII = /[^\x00-\x7F]/g;
9
+ exports.VALUE_CHAR = new RegExp(/[\x09\x20\x21-\x7E]/.source + '|' + exports.NON_US_ASCII.source);
10
+ exports.SAFE_CHAR = new RegExp(/[\x09\x20\x21\x23-\x2B\x2D-\x39\x3C-\x7E]/.source +
11
+ '|' +
12
+ exports.NON_US_ASCII.source);
13
+ exports.QSAFE_CHAR = new RegExp(/[\x09\x20\x21\x23-\x7E]/.source + '|(' + exports.NON_US_ASCII.source + ')');
14
+ exports.quotedString = new RegExp('"(' + exports.QSAFE_CHAR.source + ')*"');
15
+ exports.value = new RegExp('(' + exports.VALUE_CHAR.source + ')*');
16
+ exports.paramtext = new RegExp('(' + exports.SAFE_CHAR.source + ')*');
17
+ exports.paramValue = new RegExp('(' + exports.paramtext.source + ')|(' + exports.quotedString.source + ')');
18
+ exports.vendorId = /[0-9a-zA-Z]{3}/;
19
+ exports.xName = new RegExp('X-(' + exports.vendorId.source + '-)?[0-9a-zA-Z-]');
20
+ exports.ianaToken = /[0-9a-zA-Z-]/;
21
+ exports.paramName = new RegExp(exports.ianaToken.source + '|' + exports.xName.source);
22
+ exports.param = new RegExp(exports.paramName.source + '=' + exports.paramValue.source + '(,' + exports.paramValue.source + ')*');
23
+ exports.name = new RegExp(exports.ianaToken.source + '|' + exports.xName.source);
24
+ exports.contentline = new RegExp(exports.name.source + '(;' + exports.param.source + ')*:' + exports.xName.source + '\r\n');
25
+ exports.TSAFE_CHAR = new RegExp(/[\x09\x20\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E]/.source +
26
+ '|' +
27
+ exports.NON_US_ASCII.source);
28
+ // Property value type patterns
29
+ exports.valueTypeBinary = /([0-9a-zA-Z+/]{4})*([0-9a-zA-Z]{2}==|[0-9a-zA-Z]{3}=)?/;
30
+ exports.valueTypeBoolean = /(TRUE|FALSE)/;
31
+ exports.valueTypeDate = /[0-9]{8}/;
32
+ exports.valueTypeDateTime = /[0-9]{8}T[0-9]{6}Z?/;
33
+ exports.valueTypeDuration = /(\+?|-)P([0-9]+D(T([0-9]+H([0-9]+M([0-9]+S)?)?|[0-9]+M([0-9]+S)?|[0-9]+S))?|T([0-9]+H([0-9]+M([0-9]+S)?)?|[0-9]+M([0-9]+S)?|[0-9]+S)|[0-9]+W)/;
34
+ exports.valueTypeFloat = /(\+?|-)?[0-9]+(\.[0-9]+)?/;
35
+ exports.valueTypeInteger = /(\+?|-)?[0-9]+/;
36
+ exports.valueTypePeriod = new RegExp(`${exports.valueTypeDateTime.source}/(${exports.valueTypeDateTime}|${exports.valueTypeDuration.source})`);
37
+ exports.valueTypeText = new RegExp('((' + exports.TSAFE_CHAR.source + ')|:|"|\\[\\;,Nn])*');
38
+ exports.valueTypeTime = /[0-9]{6}Z?/;
39
+ exports.valueTypeUtcOffset = /[+-]([0-9]{2}){2,3}/;
40
+ /**
41
+ * Check if a string matches a pattern for the whole string.
42
+ * @param pattern The RegExp pattern to match against.
43
+ * @param text The text to check.
44
+ * @returns Whether or not the string matches.
45
+ */
46
+ function matchesWholeString(pattern, text) {
47
+ const match = text.match(pattern);
48
+ return match !== null && match[0] === text;
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGF0dGVybnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFxQzs7O0FBaUVyQyxnREFHQztBQWxFRCw2QkFBNkI7QUFDaEIsUUFBQSxPQUFPLEdBQUcsMkJBQTJCLENBQUE7QUFDckMsUUFBQSxZQUFZLEdBQUcsZUFBZSxDQUFBO0FBQzlCLFFBQUEsVUFBVSxHQUFHLElBQUksTUFBTSxDQUNoQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLG9CQUFZLENBQUMsTUFBTSxDQUMzRCxDQUFBO0FBQ1ksUUFBQSxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQy9CLDJDQUEyQyxDQUFDLE1BQU07SUFDOUMsR0FBRztJQUNILG9CQUFZLENBQUMsTUFBTSxDQUMxQixDQUFBO0FBQ1ksUUFBQSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQ2hDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsb0JBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUN0RSxDQUFBO0FBQ1ksUUFBQSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLGtCQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFBO0FBQzNELFFBQUEsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxrQkFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQTtBQUNsRCxRQUFBLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsaUJBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUE7QUFDckQsUUFBQSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQ2hDLEdBQUcsR0FBRyxpQkFBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsb0JBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUM3RCxDQUFBO0FBQ1ksUUFBQSxRQUFRLEdBQUcsZ0JBQWdCLENBQUE7QUFDM0IsUUFBQSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLGdCQUFRLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUE7QUFDL0QsUUFBQSxTQUFTLEdBQUcsY0FBYyxDQUFBO0FBQzFCLFFBQUEsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDN0QsUUFBQSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQzNCLGlCQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxrQkFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsa0JBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUMvRSxDQUFBO0FBQ1ksUUFBQSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUN4RCxRQUFBLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FDakMsWUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsYUFBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQ3BFLENBQUE7QUFFWSxRQUFBLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FDaEMsb0RBQW9ELENBQUMsTUFBTTtJQUN2RCxHQUFHO0lBQ0gsb0JBQVksQ0FBQyxNQUFNLENBQzFCLENBQUE7QUFFRCwrQkFBK0I7QUFDbEIsUUFBQSxlQUFlLEdBQ3hCLHdEQUF3RCxDQUFBO0FBQy9DLFFBQUEsZ0JBQWdCLEdBQUcsY0FBYyxDQUFBO0FBQ2pDLFFBQUEsYUFBYSxHQUFHLFVBQVUsQ0FBQTtBQUMxQixRQUFBLGlCQUFpQixHQUFHLHFCQUFxQixDQUFBO0FBQ3pDLFFBQUEsaUJBQWlCLEdBQzFCLCtJQUErSSxDQUFBO0FBQ3RJLFFBQUEsY0FBYyxHQUFHLDJCQUEyQixDQUFBO0FBQzVDLFFBQUEsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUE7QUFDbkMsUUFBQSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQ3JDLEdBQUcseUJBQWlCLENBQUMsTUFBTSxLQUFLLHlCQUFpQixJQUFJLHlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUNuRixDQUFBO0FBQ1ksUUFBQSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQ25DLElBQUksR0FBRyxrQkFBVSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FDbEQsQ0FBQTtBQUNZLFFBQUEsYUFBYSxHQUFHLFlBQVksQ0FBQTtBQUM1QixRQUFBLGtCQUFrQixHQUFHLHFCQUFxQixDQUFBO0FBRXZEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBZSxFQUFFLElBQVk7SUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNqQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQTtBQUM5QyxDQUFDIn0=
@@ -0,0 +1,149 @@
1
+ export interface Property {
2
+ name: string;
3
+ params: string[];
4
+ value: string;
5
+ }
6
+ export declare const knownPropertyNames: readonly ["CALSCALE", "METHOD", "PRODID", "VERSION", "ATTACH", "CATEGORIES", "CLASS", "COMMENT", "DESCRIPTION", "GEO", "LOCATION", "PERCENT-COMPLETE", "PRIORITY", "RESOURCES", "STATUS", "SUMMARY", "COMPLETED", "DTEND", "DUE", "DTSTART", "DURATION", "FREEBUSY", "TRANSP", "TZID", "TZNAME", "TZOFFSETFROM", "TZOFFSETTO", "TZURL", "ATTENDEE", "CONTACT", "ORGANIZER", "RECURRENCE-ID", "RELATED-TO", "URL", "UID", "EXDATE", "RDATE", "RRULE", "ACTION", "REPEAT", "TRIGGER", "CREATED", "DTSTAMP", "LAST-MODIFIED", "SEQUENCE", "REQUEST-STATUS"];
7
+ export type KnownPropertyName = (typeof knownPropertyNames)[number];
8
+ export type AllowedPropertyName = KnownPropertyName | (`X-${string}` & {}) | (string & {});
9
+ export declare const knownValueTypes: readonly ["BINARY", "BOOLEAN", "CAL-ADDRESS", "DATE", "DATE-TIME", "DURATION", "FLOAT", "INTEGER", "PERIOD", "RECUR", "TEXT", "TIME", "URI", "UTC-OFFSET"];
10
+ export type KnownValueType = (typeof knownValueTypes)[number];
11
+ export type AllowedValueType = KnownValueType | (string & {});
12
+ /**
13
+ * The value types that each property supports as defined by the iCalendar
14
+ * specification. The first in the list is the default type.
15
+ */
16
+ export declare const supportedValueTypes: {
17
+ [name in KnownPropertyName]: KnownValueType[];
18
+ };
19
+ /**
20
+ * Get the value type of a property, as defined by the VALUE parameter.
21
+ * @param property The property to get the value type of.
22
+ * @returns The value type if present, else `undefined`.
23
+ * @throws If the parameter value is misformed.
24
+ */
25
+ export declare function getPropertyValueType(property: Property): AllowedValueType | undefined;
26
+ /**
27
+ * Get the value type of a property, as defined by the VALUE parameter.
28
+ * @param property The property to get the value type of.
29
+ * @param defaultValue The default value to return if the property VALUE parameter is not present.
30
+ * @returns The value type if present, else `defaultValue` or `undefined`.
31
+ * @throws If the parameter value is misformed.
32
+ */
33
+ export declare function getPropertyValueType(property: Property, defaultValue: AllowedValueType): AllowedValueType;
34
+ export declare function getPropertyValueType(property: Property, defaultValue: AllowedValueType | undefined): AllowedValueType | undefined;
35
+ /** Represents an error which occurs while validating a calendar property. */
36
+ export declare class PropertyValidationError extends Error {
37
+ constructor(message: string);
38
+ }
39
+ /** Represents an error which occurs if a required property is missing. */
40
+ export declare class MissingPropertyError extends Error {
41
+ constructor(message: string);
42
+ }
43
+ /**
44
+ * Validate if a property value is a valid binary string.
45
+ * @param value The property value to validate.
46
+ * @throws {PropertyValidationError} If the validation fails.
47
+ */
48
+ export declare function validateBinary(value: string): void;
49
+ /**
50
+ * Validate if a property value is a valid boolean.
51
+ * @param value The property value to validate.
52
+ * @throws {PropertyValidationError} If the validation fails.
53
+ */
54
+ export declare function validateBoolean(value: string): void;
55
+ /**
56
+ * Validate if a property value is a valid calendar user address.
57
+ * @param value The property value to validate.
58
+ * @throws {PropertyValidationError} If the validation fails.
59
+ */
60
+ export declare function validateCalendarUserAddress(value: string): void;
61
+ /**
62
+ * Validate if a property value is a valid date.
63
+ * @param value The property value to validate.
64
+ * @throws {PropertyValidationError} If the validation fails.
65
+ */
66
+ export declare function validateDate(value: string): void;
67
+ /**
68
+ * Validate if a property value is a valid date-time.
69
+ * @param value The property value to validate.
70
+ * @throws {PropertyValidationError} If the validation fails.
71
+ */
72
+ export declare function validateDateTime(value: string): void;
73
+ /**
74
+ * Validate if a property value is a valid duration.
75
+ * @param value The property value to validate.
76
+ * @throws {PropertyValidationError} If the validation fails.
77
+ */
78
+ export declare function validateDuration(value: string): void;
79
+ /**
80
+ * Validate if a property value is a valid float.
81
+ * @param value The property value to validate.
82
+ * @throws {PropertyValidationError} If the validation fails.
83
+ */
84
+ export declare function validateFloat(value: string): void;
85
+ /**
86
+ * Validate if a property value is a valid integer.
87
+ * @param value The property value to validate.
88
+ * @throws {PropertyValidationError} If the validation fails.
89
+ */
90
+ export declare function validateInteger(value: string): void;
91
+ /**
92
+ * Validate if a property value is a valid period.
93
+ * @param value The property value to validate.
94
+ * @throws {PropertyValidationError} If the validation fails.
95
+ */
96
+ export declare function validatePeriod(value: string): void;
97
+ /**
98
+ * Validate if a property value is a valid recurrence rule.
99
+ * @param value The property value to validate.
100
+ * @throws {PropertyValidationError} If the validation fails.
101
+ */
102
+ export declare function validateRecurrenceRule(value: string): void;
103
+ /**
104
+ * Validate if a property value is valid text.
105
+ * @param value The property value to validate.
106
+ * @throws {PropertyValidationError} If the validation fails.
107
+ */
108
+ export declare function validateText(value: string): void;
109
+ /**
110
+ * Validate if a property value is a valid time.
111
+ * @param value The property value to validate.
112
+ * @throws {PropertyValidationError} If the validation fails.
113
+ */
114
+ export declare function validateTime(value: string): void;
115
+ /**
116
+ * Validate if a property value is a valid URI.
117
+ * @param value The property value to validate.
118
+ * @throws {PropertyValidationError} If the validation fails.
119
+ */
120
+ export declare function validateUri(value: string): void;
121
+ /**
122
+ * Validate if a property value is a valid UTC offset.
123
+ * @param value The property value to validate.
124
+ * @throws {PropertyValidationError} If the validation fails.
125
+ */
126
+ export declare function validateUtcOffset(value: string): void;
127
+ /**
128
+ * Validate a property value for a set value type.
129
+ * @param value The property value to validate.
130
+ * @param type The property value type which `value` will be validated against.
131
+ * @throws {PropertyValidationError} If the validation fails.
132
+ */
133
+ export declare function validateValue(value: string, type: AllowedValueType): void;
134
+ /**
135
+ * Validate the value of a property based on it's value type.
136
+ *
137
+ * The validation will fail if the property:
138
+ *
139
+ * - has a value which is not valid for its value type.
140
+ * - has a value type which is not valid for that property.
141
+ * - has no known value type and is invalid TEXT. (see below)
142
+ *
143
+ * Unknown properties are validated as TEXT by if no value type is set, as
144
+ * defined by {@link https://datatracker.ietf.org/doc/html/rfc5545#section-3.8.8|RFC5545#3.8.8.}
145
+ * @param property The property to validate.
146
+ * @throws {PropertyValidationError} If the validation fails.
147
+ */
148
+ export declare function validateProperty(property: Property): void;
149
+ //# sourceMappingURL=property.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../src/property.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,kBAAkB,0hBA+CrB,CAAA;AACV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AACnE,MAAM,MAAM,mBAAmB,GACzB,iBAAiB,GACjB,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,CAAC,GACpB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEnB,eAAO,MAAM,eAAe,4JAelB,CAAA;AACV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAC7D,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAE7D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE;KAC7B,IAAI,IAAI,iBAAiB,GAAG,cAAc,EAAE;CAgDhD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,QAAQ,GACnB,gBAAgB,GAAG,SAAS,CAAA;AAE/B;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,gBAAgB,GAC/B,gBAAgB,CAAA;AACnB,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,gBAAgB,GAAG,SAAS,GAC3C,gBAAgB,GAAG,SAAS,CAAA;AAqB/B,6EAA6E;AAC7E,qBAAa,uBAAwB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI9B;AAED,0EAA0E;AAC1E,qBAAa,oBAAqB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI9B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,QAK3C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,QAK5C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,QAQxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,QAQzC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,QAQ7C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,QAK7C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,QAK1C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,QAK5C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,QAK3C;AAED;;;;GAIG;AAEH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,QAEnD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,QAKzC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,QAKzC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,QAQxC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,QAK9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,QAgDlE;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,QAuClD"}