iamcal 2.1.1 → 3.0.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.
- package/lib/component.d.ts +25 -4
- package/lib/component.d.ts.map +1 -1
- package/lib/component.js +60 -51
- package/lib/components/Calendar.d.ts +0 -20
- package/lib/components/Calendar.d.ts.map +1 -1
- package/lib/components/Calendar.js +2 -24
- package/lib/components/CalendarEvent.d.ts +1 -25
- package/lib/components/CalendarEvent.d.ts.map +1 -1
- package/lib/components/CalendarEvent.js +4 -29
- package/lib/components/TimeZone.d.ts +0 -38
- package/lib/components/TimeZone.d.ts.map +1 -1
- package/lib/components/TimeZone.js +1 -40
- package/lib/components/TimeZoneOffset.d.ts +0 -28
- package/lib/components/TimeZoneOffset.d.ts.map +1 -1
- package/lib/components/TimeZoneOffset.js +1 -30
- package/lib/date.d.ts +2 -10
- package/lib/date.d.ts.map +1 -1
- package/lib/date.js +15 -20
- package/lib/parse.d.ts +9 -16
- package/lib/parse.d.ts.map +1 -1
- package/lib/parse.js +188 -35
- package/lib/patterns.d.ts +28 -0
- package/lib/patterns.d.ts.map +1 -1
- package/lib/patterns.js +56 -2
- package/lib/property/Property.d.ts +344 -0
- package/lib/property/Property.d.ts.map +1 -0
- package/lib/property/Property.js +508 -0
- package/lib/property/escape.d.ts +46 -0
- package/lib/property/escape.d.ts.map +1 -0
- package/lib/property/escape.js +101 -0
- package/lib/property/index.d.ts +7 -0
- package/lib/property/index.d.ts.map +1 -0
- package/lib/property/index.js +23 -0
- package/lib/property/names.d.ts +11 -0
- package/lib/property/names.d.ts.map +1 -0
- package/lib/property/names.js +62 -0
- package/lib/property/parameter.d.ts +10 -0
- package/lib/property/parameter.d.ts.map +1 -0
- package/lib/property/parameter.js +3 -0
- package/lib/{property.d.ts → property/validate.d.ts} +9 -35
- package/lib/property/validate.d.ts.map +1 -0
- package/lib/property/validate.js +317 -0
- package/lib/property/valueType.d.ts +18 -0
- package/lib/property/valueType.d.ts.map +1 -0
- package/lib/property/valueType.js +82 -0
- package/package.json +5 -3
- package/src/component.ts +58 -52
- package/src/components/Calendar.ts +6 -30
- package/src/components/CalendarEvent.ts +7 -33
- package/src/components/TimeZone.ts +3 -51
- package/src/components/TimeZoneOffset.ts +5 -40
- package/src/date.ts +14 -30
- package/src/parse.ts +212 -40
- package/src/patterns.ts +64 -0
- package/src/property/Property.ts +609 -0
- package/src/property/escape.ts +102 -0
- package/src/property/index.ts +6 -0
- package/src/property/names.ts +65 -0
- package/src/property/parameter.ts +33 -0
- package/src/{property.ts → property/validate.ts} +23 -204
- package/src/property/valueType.ts +87 -0
- package/lib/property.d.ts.map +0 -1
- package/lib/property.js +0 -450
package/lib/property.js
DELETED
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.MissingPropertyError = exports.PropertyValidationError = exports.supportedValueTypes = exports.knownValueTypes = exports.knownPropertyNames = void 0;
|
|
37
|
-
exports.getPropertyValueType = getPropertyValueType;
|
|
38
|
-
exports.validateBinary = validateBinary;
|
|
39
|
-
exports.validateBoolean = validateBoolean;
|
|
40
|
-
exports.validateCalendarUserAddress = validateCalendarUserAddress;
|
|
41
|
-
exports.validateDate = validateDate;
|
|
42
|
-
exports.validateDateTime = validateDateTime;
|
|
43
|
-
exports.validateDuration = validateDuration;
|
|
44
|
-
exports.validateFloat = validateFloat;
|
|
45
|
-
exports.validateInteger = validateInteger;
|
|
46
|
-
exports.validatePeriod = validatePeriod;
|
|
47
|
-
exports.validateRecurrenceRule = validateRecurrenceRule;
|
|
48
|
-
exports.validateText = validateText;
|
|
49
|
-
exports.validateTime = validateTime;
|
|
50
|
-
exports.validateUri = validateUri;
|
|
51
|
-
exports.validateUtcOffset = validateUtcOffset;
|
|
52
|
-
exports.validateValue = validateValue;
|
|
53
|
-
exports.validateProperty = validateProperty;
|
|
54
|
-
const date_1 = require("./date");
|
|
55
|
-
const patterns = __importStar(require("./patterns"));
|
|
56
|
-
const patterns_1 = require("./patterns");
|
|
57
|
-
exports.knownPropertyNames = [
|
|
58
|
-
'CALSCALE',
|
|
59
|
-
'METHOD',
|
|
60
|
-
'PRODID',
|
|
61
|
-
'VERSION',
|
|
62
|
-
'ATTACH',
|
|
63
|
-
'CATEGORIES',
|
|
64
|
-
'CLASS',
|
|
65
|
-
'COMMENT',
|
|
66
|
-
'DESCRIPTION',
|
|
67
|
-
'GEO',
|
|
68
|
-
'LOCATION',
|
|
69
|
-
'PERCENT-COMPLETE',
|
|
70
|
-
'PRIORITY',
|
|
71
|
-
'RESOURCES',
|
|
72
|
-
'STATUS',
|
|
73
|
-
'SUMMARY',
|
|
74
|
-
'COMPLETED',
|
|
75
|
-
'DTEND',
|
|
76
|
-
'DUE',
|
|
77
|
-
'DTSTART',
|
|
78
|
-
'DURATION',
|
|
79
|
-
'FREEBUSY',
|
|
80
|
-
'TRANSP',
|
|
81
|
-
'TZID',
|
|
82
|
-
'TZNAME',
|
|
83
|
-
'TZOFFSETFROM',
|
|
84
|
-
'TZOFFSETTO',
|
|
85
|
-
'TZURL',
|
|
86
|
-
'ATTENDEE',
|
|
87
|
-
'CONTACT',
|
|
88
|
-
'ORGANIZER',
|
|
89
|
-
'RECURRENCE-ID',
|
|
90
|
-
'RELATED-TO',
|
|
91
|
-
'URL',
|
|
92
|
-
'UID',
|
|
93
|
-
'EXDATE',
|
|
94
|
-
'RDATE',
|
|
95
|
-
'RRULE',
|
|
96
|
-
'ACTION',
|
|
97
|
-
'REPEAT',
|
|
98
|
-
'TRIGGER',
|
|
99
|
-
'CREATED',
|
|
100
|
-
'DTSTAMP',
|
|
101
|
-
'LAST-MODIFIED',
|
|
102
|
-
'SEQUENCE',
|
|
103
|
-
'REQUEST-STATUS',
|
|
104
|
-
];
|
|
105
|
-
exports.knownValueTypes = [
|
|
106
|
-
'BINARY',
|
|
107
|
-
'BOOLEAN',
|
|
108
|
-
'CAL-ADDRESS',
|
|
109
|
-
'DATE',
|
|
110
|
-
'DATE-TIME',
|
|
111
|
-
'DURATION',
|
|
112
|
-
'FLOAT',
|
|
113
|
-
'INTEGER',
|
|
114
|
-
'PERIOD',
|
|
115
|
-
'RECUR',
|
|
116
|
-
'TEXT',
|
|
117
|
-
'TIME',
|
|
118
|
-
'URI',
|
|
119
|
-
'UTC-OFFSET',
|
|
120
|
-
];
|
|
121
|
-
/**
|
|
122
|
-
* The value types that each property supports as defined by the iCalendar
|
|
123
|
-
* specification. The first in the list is the default type.
|
|
124
|
-
*/
|
|
125
|
-
exports.supportedValueTypes = {
|
|
126
|
-
CALSCALE: ['TEXT'],
|
|
127
|
-
METHOD: ['TEXT'],
|
|
128
|
-
PRODID: ['TEXT'],
|
|
129
|
-
VERSION: ['TEXT'],
|
|
130
|
-
ATTACH: ['URI', 'BINARY'],
|
|
131
|
-
CATEGORIES: ['TEXT'],
|
|
132
|
-
CLASS: ['TEXT'],
|
|
133
|
-
COMMENT: ['TEXT'],
|
|
134
|
-
DESCRIPTION: ['TEXT'],
|
|
135
|
-
GEO: ['FLOAT'],
|
|
136
|
-
LOCATION: ['TEXT'],
|
|
137
|
-
'PERCENT-COMPLETE': ['INTEGER'],
|
|
138
|
-
PRIORITY: ['INTEGER'],
|
|
139
|
-
RESOURCES: ['TEXT'],
|
|
140
|
-
STATUS: ['TEXT'],
|
|
141
|
-
SUMMARY: ['TEXT'],
|
|
142
|
-
COMPLETED: ['DATE-TIME'],
|
|
143
|
-
DTEND: ['DATE-TIME', 'DATE'],
|
|
144
|
-
DUE: ['DATE-TIME', 'DATE'],
|
|
145
|
-
DTSTART: ['DATE-TIME', 'DATE'],
|
|
146
|
-
DURATION: ['DURATION'],
|
|
147
|
-
FREEBUSY: ['PERIOD'],
|
|
148
|
-
TRANSP: ['TEXT'],
|
|
149
|
-
TZID: ['TEXT'],
|
|
150
|
-
TZNAME: ['TEXT'],
|
|
151
|
-
TZOFFSETFROM: ['UTC-OFFSET'],
|
|
152
|
-
TZOFFSETTO: ['UTC-OFFSET'],
|
|
153
|
-
TZURL: ['URI'],
|
|
154
|
-
ATTENDEE: ['CAL-ADDRESS'],
|
|
155
|
-
CONTACT: ['TEXT'],
|
|
156
|
-
ORGANIZER: ['CAL-ADDRESS'],
|
|
157
|
-
'RECURRENCE-ID': ['DATE-TIME', 'DATE'],
|
|
158
|
-
'RELATED-TO': ['TEXT'],
|
|
159
|
-
URL: ['URI'],
|
|
160
|
-
UID: ['TEXT'],
|
|
161
|
-
EXDATE: ['DATE-TIME', 'DATE'],
|
|
162
|
-
RDATE: ['DATE-TIME', 'DATE', 'PERIOD'],
|
|
163
|
-
RRULE: ['RECUR'],
|
|
164
|
-
ACTION: ['TEXT'],
|
|
165
|
-
REPEAT: ['INTEGER'],
|
|
166
|
-
TRIGGER: ['DURATION', 'DATE-TIME'],
|
|
167
|
-
CREATED: ['DATE-TIME'],
|
|
168
|
-
DTSTAMP: ['DATE-TIME'],
|
|
169
|
-
'LAST-MODIFIED': ['DATE-TIME'],
|
|
170
|
-
SEQUENCE: ['INTEGER'],
|
|
171
|
-
'REQUEST-STATUS': ['TEXT'],
|
|
172
|
-
};
|
|
173
|
-
function getPropertyValueType(property, defaultValue) {
|
|
174
|
-
const found = property.params.find(param => /^VALUE=.+$/i.test(param));
|
|
175
|
-
if (!found)
|
|
176
|
-
return defaultValue;
|
|
177
|
-
if (!patterns.matchesWholeString(patterns.paramValue, found)) {
|
|
178
|
-
throw new Error('Parameter value is misformed');
|
|
179
|
-
}
|
|
180
|
-
// Return as uppercase if known value
|
|
181
|
-
const value = found?.split('=')[1];
|
|
182
|
-
if (exports.knownValueTypes.includes(value.toUpperCase())) {
|
|
183
|
-
return value.toUpperCase();
|
|
184
|
-
}
|
|
185
|
-
return value;
|
|
186
|
-
}
|
|
187
|
-
/** Represents an error which occurs while validating a calendar property. */
|
|
188
|
-
class PropertyValidationError extends Error {
|
|
189
|
-
constructor(message) {
|
|
190
|
-
super(message);
|
|
191
|
-
this.name = 'PropertyValidationError';
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
exports.PropertyValidationError = PropertyValidationError;
|
|
195
|
-
/** Represents an error which occurs if a required property is missing. */
|
|
196
|
-
class MissingPropertyError extends Error {
|
|
197
|
-
constructor(message) {
|
|
198
|
-
super(message);
|
|
199
|
-
this.name = 'MissingPropertyError';
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
exports.MissingPropertyError = MissingPropertyError;
|
|
203
|
-
/**
|
|
204
|
-
* Validate if a property value is a valid binary string.
|
|
205
|
-
* @param value The property value to validate.
|
|
206
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
207
|
-
*/
|
|
208
|
-
function validateBinary(value) {
|
|
209
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeBinary, value))
|
|
210
|
-
throw new PropertyValidationError(`${value} does not match pattern for BINARY`);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Validate if a property value is a valid boolean.
|
|
214
|
-
* @param value The property value to validate.
|
|
215
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
216
|
-
*/
|
|
217
|
-
function validateBoolean(value) {
|
|
218
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeBoolean, value))
|
|
219
|
-
throw new PropertyValidationError(`${value} does not match pattern for BOOLEAN`);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Validate if a property value is a valid calendar user address.
|
|
223
|
-
* @param value The property value to validate.
|
|
224
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
225
|
-
*/
|
|
226
|
-
function validateCalendarUserAddress(value) {
|
|
227
|
-
try {
|
|
228
|
-
new URL(value);
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
throw new PropertyValidationError(`${value} does not match pattern for CAL-ADDRESS`);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Validate if a property value is a valid date.
|
|
236
|
-
* @param value The property value to validate.
|
|
237
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
238
|
-
*/
|
|
239
|
-
function validateDate(value) {
|
|
240
|
-
try {
|
|
241
|
-
(0, date_1.parseDateString)(value);
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
throw new PropertyValidationError(`${value} does not match pattern for DATE`);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Validate if a property value is a valid date-time.
|
|
249
|
-
* @param value The property value to validate.
|
|
250
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
251
|
-
*/
|
|
252
|
-
function validateDateTime(value) {
|
|
253
|
-
try {
|
|
254
|
-
(0, date_1.parseDateTimeString)(value);
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
throw new PropertyValidationError(`${value} does not match pattern for DATETIME`);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Validate if a property value is a valid duration.
|
|
262
|
-
* @param value The property value to validate.
|
|
263
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
264
|
-
*/
|
|
265
|
-
function validateDuration(value) {
|
|
266
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeDuration, value))
|
|
267
|
-
throw new PropertyValidationError(`${value} does not match pattern for DURATION`);
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Validate if a property value is a valid float.
|
|
271
|
-
* @param value The property value to validate.
|
|
272
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
273
|
-
*/
|
|
274
|
-
function validateFloat(value) {
|
|
275
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeFloat, value))
|
|
276
|
-
throw new PropertyValidationError(`${value} does not match pattern for FLOAT`);
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Validate if a property value is a valid integer.
|
|
280
|
-
* @param value The property value to validate.
|
|
281
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
282
|
-
*/
|
|
283
|
-
function validateInteger(value) {
|
|
284
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeInteger, value))
|
|
285
|
-
throw new PropertyValidationError(`${value} does not match pattern for INTEGER`);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Validate if a property value is a valid period.
|
|
289
|
-
* @param value The property value to validate.
|
|
290
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
291
|
-
*/
|
|
292
|
-
function validatePeriod(value) {
|
|
293
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypePeriod, value))
|
|
294
|
-
throw new PropertyValidationError(`${value} does not match pattern for PERIOD`);
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Validate if a property value is a valid recurrence rule.
|
|
298
|
-
* @param value The property value to validate.
|
|
299
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
300
|
-
*/
|
|
301
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
302
|
-
function validateRecurrenceRule(value) {
|
|
303
|
-
// TODO: Not implemented
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Validate if a property value is valid text.
|
|
307
|
-
* @param value The property value to validate.
|
|
308
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
309
|
-
*/
|
|
310
|
-
function validateText(value) {
|
|
311
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeText, value))
|
|
312
|
-
throw new PropertyValidationError(`${value} does not match pattern for TEXT`);
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Validate if a property value is a valid time.
|
|
316
|
-
* @param value The property value to validate.
|
|
317
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
318
|
-
*/
|
|
319
|
-
function validateTime(value) {
|
|
320
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeTime, value))
|
|
321
|
-
throw new PropertyValidationError(`${value} does not match pattern for TIME`);
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Validate if a property value is a valid URI.
|
|
325
|
-
* @param value The property value to validate.
|
|
326
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
327
|
-
*/
|
|
328
|
-
function validateUri(value) {
|
|
329
|
-
try {
|
|
330
|
-
new URL(value);
|
|
331
|
-
}
|
|
332
|
-
catch {
|
|
333
|
-
throw new PropertyValidationError(`${value} does not match pattern for URI`);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Validate if a property value is a valid UTC offset.
|
|
338
|
-
* @param value The property value to validate.
|
|
339
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
340
|
-
*/
|
|
341
|
-
function validateUtcOffset(value) {
|
|
342
|
-
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeUtcOffset, value))
|
|
343
|
-
throw new PropertyValidationError(`${value} does not match pattern for UTC-OFFSET`);
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Validate a property value for a set value type.
|
|
347
|
-
* @param value The property value to validate.
|
|
348
|
-
* @param type The property value type which `value` will be validated against.
|
|
349
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
350
|
-
*/
|
|
351
|
-
function validateValue(value, type) {
|
|
352
|
-
switch (type) {
|
|
353
|
-
case 'BINARY':
|
|
354
|
-
validateBinary(value);
|
|
355
|
-
break;
|
|
356
|
-
case 'BOOLEAN':
|
|
357
|
-
validateBoolean(value);
|
|
358
|
-
break;
|
|
359
|
-
case 'CAL-ADDRESS':
|
|
360
|
-
validateCalendarUserAddress(value);
|
|
361
|
-
break;
|
|
362
|
-
case 'DATE':
|
|
363
|
-
validateDate(value);
|
|
364
|
-
break;
|
|
365
|
-
case 'DATE-TIME':
|
|
366
|
-
validateDateTime(value);
|
|
367
|
-
break;
|
|
368
|
-
case 'DURATION':
|
|
369
|
-
validateDuration(value);
|
|
370
|
-
break;
|
|
371
|
-
case 'FLOAT':
|
|
372
|
-
validateFloat(value);
|
|
373
|
-
break;
|
|
374
|
-
case 'INTEGER':
|
|
375
|
-
validateInteger(value);
|
|
376
|
-
break;
|
|
377
|
-
case 'PERIOD':
|
|
378
|
-
validatePeriod(value);
|
|
379
|
-
break;
|
|
380
|
-
case 'RECUR':
|
|
381
|
-
validateRecurrenceRule(value);
|
|
382
|
-
break;
|
|
383
|
-
case 'TEXT':
|
|
384
|
-
validateText(value);
|
|
385
|
-
break;
|
|
386
|
-
case 'TIME':
|
|
387
|
-
validateTime(value);
|
|
388
|
-
break;
|
|
389
|
-
case 'URI':
|
|
390
|
-
validateUri(value);
|
|
391
|
-
break;
|
|
392
|
-
case 'UTC-OFFSET':
|
|
393
|
-
validateUtcOffset(value);
|
|
394
|
-
break;
|
|
395
|
-
default:
|
|
396
|
-
console.warn(`Cannot validate value, unknown type ${type}`);
|
|
397
|
-
break;
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
/* eslint-disable jsdoc/require-description-complete-sentence --
|
|
401
|
-
* Does not allow line to end with ':'.
|
|
402
|
-
**/
|
|
403
|
-
/**
|
|
404
|
-
* Validate the value of a property based on it's value type.
|
|
405
|
-
*
|
|
406
|
-
* The validation will fail if the property:
|
|
407
|
-
*
|
|
408
|
-
* - has a value which is not valid for its value type.
|
|
409
|
-
* - has a value type which is not valid for that property.
|
|
410
|
-
* - has no known value type and is invalid TEXT. (see below)
|
|
411
|
-
*
|
|
412
|
-
* Unknown properties are validated as TEXT by if no value type is set, as
|
|
413
|
-
* defined by {@link https://datatracker.ietf.org/doc/html/rfc5545#section-3.8.8|RFC5545#3.8.8.}
|
|
414
|
-
* @param property The property to validate.
|
|
415
|
-
* @throws {PropertyValidationError} If the validation fails.
|
|
416
|
-
*/
|
|
417
|
-
function validateProperty(property) {
|
|
418
|
-
// Get supported and default types
|
|
419
|
-
let supportedTypes = undefined;
|
|
420
|
-
let defaultType = undefined;
|
|
421
|
-
if (exports.knownPropertyNames.includes(property.name)) {
|
|
422
|
-
const name = property.name;
|
|
423
|
-
supportedTypes = exports.supportedValueTypes[name];
|
|
424
|
-
defaultType = supportedTypes[0];
|
|
425
|
-
}
|
|
426
|
-
// Find value type
|
|
427
|
-
const valueType = getPropertyValueType(property, defaultType);
|
|
428
|
-
// If value type is unknown, validate as TEXT
|
|
429
|
-
if (valueType === undefined) {
|
|
430
|
-
try {
|
|
431
|
-
validateText(property.value);
|
|
432
|
-
}
|
|
433
|
-
catch (e) {
|
|
434
|
-
throw e instanceof PropertyValidationError
|
|
435
|
-
? new PropertyValidationError(`Unknown property ${property.name} is not valid text`)
|
|
436
|
-
: e;
|
|
437
|
-
}
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
|
-
// Check if type is unsupported
|
|
441
|
-
if (supportedTypes !== undefined && !supportedTypes.includes(valueType)) {
|
|
442
|
-
throw new PropertyValidationError(supportedTypes.length === 1
|
|
443
|
-
? `Property ${property.name} has unsupported value type ${valueType}, must be ${supportedTypes[0]}`
|
|
444
|
-
: `Property ${property.name} has unsupported value type ${valueType}, must be one of ${supportedTypes.join(', ')}`);
|
|
445
|
-
}
|
|
446
|
-
// Validate according to value type
|
|
447
|
-
validateValue(property.value, valueType);
|
|
448
|
-
}
|
|
449
|
-
/* eslint-enable jsdoc/require-description-complete-sentence */
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUtBLG9EQWtCQztBQXVCRCx3Q0FLQztBQU9ELDBDQUtDO0FBT0Qsa0VBUUM7QUFPRCxvQ0FRQztBQU9ELDRDQVFDO0FBT0QsNENBS0M7QUFPRCxzQ0FLQztBQU9ELDBDQUtDO0FBT0Qsd0NBS0M7QUFRRCx3REFFQztBQU9ELG9DQUtDO0FBT0Qsb0NBS0M7QUFPRCxrQ0FRQztBQU9ELDhDQUtDO0FBUUQsc0NBZ0RDO0FBb0JELDRDQXVDQztBQTFlRCxpQ0FBNkQ7QUFDN0QscURBQXNDO0FBQ3RDLHlDQUErQztBQVFsQyxRQUFBLGtCQUFrQixHQUFHO0lBQzlCLFVBQVU7SUFDVixRQUFRO0lBQ1IsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsWUFBWTtJQUNaLE9BQU87SUFDUCxTQUFTO0lBQ1QsYUFBYTtJQUNiLEtBQUs7SUFDTCxVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixXQUFXO0lBQ1gsUUFBUTtJQUNSLFNBQVM7SUFDVCxXQUFXO0lBQ1gsT0FBTztJQUNQLEtBQUs7SUFDTCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsTUFBTTtJQUNOLFFBQVE7SUFDUixjQUFjO0lBQ2QsWUFBWTtJQUNaLE9BQU87SUFDUCxVQUFVO0lBQ1YsU0FBUztJQUNULFdBQVc7SUFDWCxlQUFlO0lBQ2YsWUFBWTtJQUNaLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBUTtJQUNSLE9BQU87SUFDUCxPQUFPO0lBQ1AsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxlQUFlO0lBQ2YsVUFBVTtJQUNWLGdCQUFnQjtDQUNWLENBQUE7QUFPRyxRQUFBLGVBQWUsR0FBRztJQUMzQixR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
|