iamcal 2.1.2 → 3.0.1
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 +129 -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 +3 -1
- 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 +132 -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
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_LINE_LENGTH = void 0;
|
|
4
|
+
exports.escapeTextPropertyValue = escapeTextPropertyValue;
|
|
5
|
+
exports.unescapeTextPropertyValue = unescapeTextPropertyValue;
|
|
6
|
+
exports.escapePropertyParameterValue = escapePropertyParameterValue;
|
|
7
|
+
exports.unescapePropertyParameterValue = unescapePropertyParameterValue;
|
|
8
|
+
exports.foldLine = foldLine;
|
|
9
|
+
exports.unfoldLine = unfoldLine;
|
|
10
|
+
const patterns_1 = require("../patterns");
|
|
11
|
+
/**
|
|
12
|
+
* Escape special characters in a TEXT property value.
|
|
13
|
+
*
|
|
14
|
+
* Note: This method converts both CRLF and LF to '\n'.
|
|
15
|
+
* @param value The property value to escape.
|
|
16
|
+
* @returns The escaped property value.
|
|
17
|
+
* @see {@link unescapeTextPropertyValue}
|
|
18
|
+
*/
|
|
19
|
+
function escapeTextPropertyValue(value) {
|
|
20
|
+
return value.replace(/(?=[,;\\])/g, '\\').replace(/\r?\n/g, '\\n');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Unescape special characters in a TEXT property value.
|
|
24
|
+
* @param value The property value to unescape.
|
|
25
|
+
* @returns The unescaped property value.
|
|
26
|
+
* @throws If the value contains a bad escaped character, i.e., a character that should not be escaped after a backslash.
|
|
27
|
+
* @see {@link unescapeTextPropertyValue}
|
|
28
|
+
*/
|
|
29
|
+
function unescapeTextPropertyValue(value) {
|
|
30
|
+
/** List that will contain the characters of the unescaped string. */
|
|
31
|
+
const chars = [];
|
|
32
|
+
// Character codes for special characters
|
|
33
|
+
const backslash = (0, patterns_1.ord)('\\');
|
|
34
|
+
const newline = (0, patterns_1.ord)('\n');
|
|
35
|
+
const lowercaseN = (0, patterns_1.ord)('n');
|
|
36
|
+
const uppercaseN = (0, patterns_1.ord)('N');
|
|
37
|
+
const comma = (0, patterns_1.ord)(',');
|
|
38
|
+
const semicolon = (0, patterns_1.ord)(';');
|
|
39
|
+
let previousCharWasBackslash = false;
|
|
40
|
+
for (let i = 0; i < value.length; i++) {
|
|
41
|
+
const char = value.charCodeAt(i);
|
|
42
|
+
if (previousCharWasBackslash) {
|
|
43
|
+
// Previous character was a backslash, so this character is the second character in an escape sequence
|
|
44
|
+
if (char === lowercaseN || char === uppercaseN) {
|
|
45
|
+
chars.push(newline);
|
|
46
|
+
}
|
|
47
|
+
else if (char === comma ||
|
|
48
|
+
char === semicolon ||
|
|
49
|
+
char === backslash) {
|
|
50
|
+
chars.push(char);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const position = i - 1;
|
|
54
|
+
throw new SyntaxError(`Bad escaped character '\\${String.fromCharCode(char)}' at position ${position}`);
|
|
55
|
+
}
|
|
56
|
+
// End the escape sequence
|
|
57
|
+
previousCharWasBackslash = false;
|
|
58
|
+
}
|
|
59
|
+
else if (char === backslash) {
|
|
60
|
+
// Start of an escape sequence
|
|
61
|
+
previousCharWasBackslash = true;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
chars.push(char);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return String.fromCharCode(...chars);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Escape a property parameter value.
|
|
71
|
+
* @param param The parameter value to escape.
|
|
72
|
+
* @returns The escaped parameter value.
|
|
73
|
+
* @throws If the parameter value contains a DQUOTE (") character.
|
|
74
|
+
* @see {@link unescapePropertyParameterValue}
|
|
75
|
+
*/
|
|
76
|
+
function escapePropertyParameterValue(param) {
|
|
77
|
+
// Property parameter values MUST NOT contain the DQUOTE character. The
|
|
78
|
+
// DQUOTE character is used as a delimiter for parameter values that
|
|
79
|
+
// contain restricted characters or URI text.
|
|
80
|
+
if (param.includes('"')) {
|
|
81
|
+
throw new Error('Parameter value must not contain DQUOTE (").');
|
|
82
|
+
}
|
|
83
|
+
// Property parameter values that contain the COLON, SEMICOLON, or COMMA
|
|
84
|
+
// character separators MUST be specified as quoted-string text values.
|
|
85
|
+
if (/[:;,]/.test(param)) {
|
|
86
|
+
return `"${param}"`;
|
|
87
|
+
}
|
|
88
|
+
return param;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Unescape a property parameter value.
|
|
92
|
+
* @param param The parameter value to unescape.
|
|
93
|
+
* @returns The unescaped parameter value.
|
|
94
|
+
* @see {@link escapePropertyParameterValue}
|
|
95
|
+
*/
|
|
96
|
+
function unescapePropertyParameterValue(param) {
|
|
97
|
+
if (param.startsWith('"') && param.endsWith('"')) {
|
|
98
|
+
return param.slice(1, -1);
|
|
99
|
+
}
|
|
100
|
+
return param;
|
|
101
|
+
}
|
|
102
|
+
// Max line length as defined by RFC 5545 3.1.
|
|
103
|
+
exports.MAX_LINE_LENGTH = 75;
|
|
104
|
+
/**
|
|
105
|
+
* Fold a single line as specified in RFC 5545 3.1.
|
|
106
|
+
* @param line The line to fold.
|
|
107
|
+
* @returns The folded line.
|
|
108
|
+
*/
|
|
109
|
+
function foldLine(line) {
|
|
110
|
+
if (line.length < exports.MAX_LINE_LENGTH)
|
|
111
|
+
return line;
|
|
112
|
+
const lines = [line.substring(0, exports.MAX_LINE_LENGTH)];
|
|
113
|
+
const matches = line
|
|
114
|
+
.substring(exports.MAX_LINE_LENGTH)
|
|
115
|
+
.matchAll(new RegExp(`.{${exports.MAX_LINE_LENGTH - 2}}`, 'g'));
|
|
116
|
+
for (const match of matches) {
|
|
117
|
+
lines.push(match[0]);
|
|
118
|
+
}
|
|
119
|
+
return lines.join('\r\n ');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Unfold a single line as specified in RFC 5545 3.1.
|
|
123
|
+
* @param lines The lines to unfold.
|
|
124
|
+
* @returns The unfolded line.
|
|
125
|
+
*/
|
|
126
|
+
function unfoldLine(lines) {
|
|
127
|
+
return lines.replace(/\r\n /g, '');
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3BlcnR5L2VzY2FwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSwwREFFQztBQVNELDhEQTJDQztBQVNELG9FQWNDO0FBUUQsd0VBS0M7QUFVRCw0QkFZQztBQU9ELGdDQUVDO0FBbklELDBDQUFpQztBQUVqQzs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsS0FBYTtJQUNqRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLEtBQWE7SUFDbkQscUVBQXFFO0lBQ3JFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUUxQix5Q0FBeUM7SUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBQSxjQUFHLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFHLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsTUFBTSxVQUFVLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFFMUIsSUFBSSx3QkFBd0IsR0FBRyxLQUFLLENBQUE7SUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMs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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/property/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./escape"), exports);
|
|
18
|
+
__exportStar(require("./names"), exports);
|
|
19
|
+
__exportStar(require("./parameter"), exports);
|
|
20
|
+
__exportStar(require("./Property"), exports);
|
|
21
|
+
__exportStar(require("./validate"), exports);
|
|
22
|
+
__exportStar(require("./valueType"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvcGVydHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF3QjtBQUN4QiwwQ0FBdUI7QUFDdkIsOENBQTJCO0FBQzNCLDZDQUEwQjtBQUMxQiw2Q0FBMEI7QUFDMUIsOENBQTJCIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
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"];
|
|
2
|
+
export type KnownPropertyName = (typeof knownPropertyNames)[number];
|
|
3
|
+
export type AllowedPropertyName = KnownPropertyName | (`X-${string}` & {}) | (string & {});
|
|
4
|
+
/**
|
|
5
|
+
* Check if a property name is known. A property name is known if it is present
|
|
6
|
+
* in {@link knownPropertyNames}.
|
|
7
|
+
* @param name The property name to check.
|
|
8
|
+
* @returns If the name is a known property name.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isKnownPropertyName(name: AllowedPropertyName): name is KnownPropertyName;
|
|
11
|
+
//# sourceMappingURL=names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/property/names.ts"],"names":[],"mappings":"AAAA,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;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,mBAAmB,GAC1B,IAAI,IAAI,iBAAiB,CAE3B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.knownPropertyNames = void 0;
|
|
4
|
+
exports.isKnownPropertyName = isKnownPropertyName;
|
|
5
|
+
exports.knownPropertyNames = [
|
|
6
|
+
'CALSCALE',
|
|
7
|
+
'METHOD',
|
|
8
|
+
'PRODID',
|
|
9
|
+
'VERSION',
|
|
10
|
+
'ATTACH',
|
|
11
|
+
'CATEGORIES',
|
|
12
|
+
'CLASS',
|
|
13
|
+
'COMMENT',
|
|
14
|
+
'DESCRIPTION',
|
|
15
|
+
'GEO',
|
|
16
|
+
'LOCATION',
|
|
17
|
+
'PERCENT-COMPLETE',
|
|
18
|
+
'PRIORITY',
|
|
19
|
+
'RESOURCES',
|
|
20
|
+
'STATUS',
|
|
21
|
+
'SUMMARY',
|
|
22
|
+
'COMPLETED',
|
|
23
|
+
'DTEND',
|
|
24
|
+
'DUE',
|
|
25
|
+
'DTSTART',
|
|
26
|
+
'DURATION',
|
|
27
|
+
'FREEBUSY',
|
|
28
|
+
'TRANSP',
|
|
29
|
+
'TZID',
|
|
30
|
+
'TZNAME',
|
|
31
|
+
'TZOFFSETFROM',
|
|
32
|
+
'TZOFFSETTO',
|
|
33
|
+
'TZURL',
|
|
34
|
+
'ATTENDEE',
|
|
35
|
+
'CONTACT',
|
|
36
|
+
'ORGANIZER',
|
|
37
|
+
'RECURRENCE-ID',
|
|
38
|
+
'RELATED-TO',
|
|
39
|
+
'URL',
|
|
40
|
+
'UID',
|
|
41
|
+
'EXDATE',
|
|
42
|
+
'RDATE',
|
|
43
|
+
'RRULE',
|
|
44
|
+
'ACTION',
|
|
45
|
+
'REPEAT',
|
|
46
|
+
'TRIGGER',
|
|
47
|
+
'CREATED',
|
|
48
|
+
'DTSTAMP',
|
|
49
|
+
'LAST-MODIFIED',
|
|
50
|
+
'SEQUENCE',
|
|
51
|
+
'REQUEST-STATUS',
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Check if a property name is known. A property name is known if it is present
|
|
55
|
+
* in {@link knownPropertyNames}.
|
|
56
|
+
* @param name The property name to check.
|
|
57
|
+
* @returns If the name is a known property name.
|
|
58
|
+
*/
|
|
59
|
+
function isKnownPropertyName(name) {
|
|
60
|
+
return exports.knownPropertyNames.includes(name);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvcGVydHkvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNERBLGtEQUlDO0FBaEVZLFFBQUEsa0JBQWtCLEdBQUc7SUFDOUIsVUFBVTtJQUNWLFFBQVE7SUFDUixRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixZQUFZO0lBQ1osT0FBTztJQUNQLFNBQVM7SUFDVCxhQUFhO0lBQ2IsS0FBSztJQUNMLFVBQVU7SUFDVixrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxRQUFRO0lBQ1IsU0FBUztJQUNULFdBQVc7SUFDWCxPQUFPO0lBQ1AsS0FBSztJQUNMLFNBQVM7SUFDVCxVQUFVO0lBQ1YsVUFBVTtJQUNWLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLGNBQWM7SUFDZCxZQUFZO0lBQ1osT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsV0FBVztJQUNYLGVBQWU7SUFDZixZQUFZO0lBQ1osS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULGVBQWU7SUFDZixVQUFVO0lBQ1YsZ0JBQWdCO0NBQ1YsQ0FBQTtBQU9WOzs7OztHQUtHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQy9CLElBQXlCO0lBRXpCLE9BQU8sMEJBQWtCLENBQUMsUUFBUSxDQUFDLElBQXlCLENBQUMsQ0FBQTtBQUNqRSxDQUFDIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type CalendarUserType = 'INDIVIDUAL' | 'GROUP' | 'RESOURCE' | 'ROOM' | 'UNKNOWN' | (string & {});
|
|
2
|
+
export type Encoding = '8BIT' | 'BASE64';
|
|
3
|
+
export type FreeBusyTimeType = 'FREE' | 'BUSY' | 'BUSY-UNAVAILABLE' | 'BUSY-TENTATIVE' | (string & {});
|
|
4
|
+
export type ParticipationStatus = 'NEEDS-ACTION' | 'ACCEPTED' | 'DECLINED' | 'TENTATIVE' | 'DELEGATED' | 'COMPLETED' | 'IN-PROCESS' | (string & {});
|
|
5
|
+
export type RecurrenceIdentifierRange = 'THISANDFUTURE';
|
|
6
|
+
export type AlarmTriggerRelationship = 'START' | 'END';
|
|
7
|
+
export type RelationshipType = 'PARENT' | 'CHILD' | 'SIBLING' | (string & {});
|
|
8
|
+
export type ParticipationRole = 'CHAIR' | 'REQ-PARTICIPANT' | 'OPT-PARTICIPANT' | 'NON-PARTICIPANT' | (string & {});
|
|
9
|
+
export type RsvpExpectation = 'TRUE' | 'FALSE';
|
|
10
|
+
//# sourceMappingURL=parameter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter.d.ts","sourceRoot":"","sources":["../../src/property/parameter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACtB,YAAY,GACZ,OAAO,GACP,UAAU,GACV,MAAM,GACN,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AACnB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;AACxC,MAAM,MAAM,gBAAgB,GACtB,MAAM,GACN,MAAM,GACN,kBAAkB,GAClB,gBAAgB,GAChB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AACnB,MAAM,MAAM,mBAAmB,GACzB,cAAc,GACd,UAAU,GACV,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,YAAY,GACZ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AACnB,MAAM,MAAM,yBAAyB,GAAG,eAAe,CAAA;AACvD,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,KAAK,CAAA;AACtD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAC7E,MAAM,MAAM,iBAAiB,GACvB,OAAO,GACP,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AACnB,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3BlcnR5L3BhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -1,37 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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;
|
|
1
|
+
import type { Property } from './Property';
|
|
2
|
+
import { type AllowedValueType } from './valueType';
|
|
35
3
|
/** Represents an error which occurs while validating a calendar property. */
|
|
36
4
|
export declare class PropertyValidationError extends Error {
|
|
37
5
|
constructor(message: string);
|
|
@@ -131,6 +99,12 @@ export declare function validateUtcOffset(value: string): void;
|
|
|
131
99
|
* @throws {PropertyValidationError} If the validation fails.
|
|
132
100
|
*/
|
|
133
101
|
export declare function validateValue(value: string, type: AllowedValueType): void;
|
|
102
|
+
/**
|
|
103
|
+
* Validate if a value is a valid content type.
|
|
104
|
+
* @param value The value to validate.
|
|
105
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
106
|
+
*/
|
|
107
|
+
export declare function validateContentType(value: string): void;
|
|
134
108
|
/**
|
|
135
109
|
* Validate the value of a property based on it's value type.
|
|
136
110
|
*
|
|
@@ -146,4 +120,4 @@ export declare function validateValue(value: string, type: AllowedValueType): vo
|
|
|
146
120
|
* @throws {PropertyValidationError} If the validation fails.
|
|
147
121
|
*/
|
|
148
122
|
export declare function validateProperty(property: Property): void;
|
|
149
|
-
//# sourceMappingURL=
|
|
123
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/property/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,aAAa,CAAA;AAExE,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;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,QAKhD;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,QAsBlD"}
|
|
@@ -0,0 +1,317 @@
|
|
|
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 = void 0;
|
|
37
|
+
exports.validateBinary = validateBinary;
|
|
38
|
+
exports.validateBoolean = validateBoolean;
|
|
39
|
+
exports.validateCalendarUserAddress = validateCalendarUserAddress;
|
|
40
|
+
exports.validateDate = validateDate;
|
|
41
|
+
exports.validateDateTime = validateDateTime;
|
|
42
|
+
exports.validateDuration = validateDuration;
|
|
43
|
+
exports.validateFloat = validateFloat;
|
|
44
|
+
exports.validateInteger = validateInteger;
|
|
45
|
+
exports.validatePeriod = validatePeriod;
|
|
46
|
+
exports.validateRecurrenceRule = validateRecurrenceRule;
|
|
47
|
+
exports.validateText = validateText;
|
|
48
|
+
exports.validateTime = validateTime;
|
|
49
|
+
exports.validateUri = validateUri;
|
|
50
|
+
exports.validateUtcOffset = validateUtcOffset;
|
|
51
|
+
exports.validateValue = validateValue;
|
|
52
|
+
exports.validateContentType = validateContentType;
|
|
53
|
+
exports.validateProperty = validateProperty;
|
|
54
|
+
const date_1 = require("../date");
|
|
55
|
+
const patterns = __importStar(require("../patterns"));
|
|
56
|
+
const patterns_1 = require("../patterns");
|
|
57
|
+
const names_1 = require("./names");
|
|
58
|
+
const valueType_1 = require("./valueType");
|
|
59
|
+
/** Represents an error which occurs while validating a calendar property. */
|
|
60
|
+
class PropertyValidationError extends Error {
|
|
61
|
+
constructor(message) {
|
|
62
|
+
super(message);
|
|
63
|
+
this.name = 'PropertyValidationError';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.PropertyValidationError = PropertyValidationError;
|
|
67
|
+
/** Represents an error which occurs if a required property is missing. */
|
|
68
|
+
class MissingPropertyError extends Error {
|
|
69
|
+
constructor(message) {
|
|
70
|
+
super(message);
|
|
71
|
+
this.name = 'MissingPropertyError';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.MissingPropertyError = MissingPropertyError;
|
|
75
|
+
/**
|
|
76
|
+
* Validate if a property value is a valid binary string.
|
|
77
|
+
* @param value The property value to validate.
|
|
78
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
79
|
+
*/
|
|
80
|
+
function validateBinary(value) {
|
|
81
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeBinary, value))
|
|
82
|
+
throw new PropertyValidationError(`${value} does not match pattern for BINARY`);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate if a property value is a valid boolean.
|
|
86
|
+
* @param value The property value to validate.
|
|
87
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
88
|
+
*/
|
|
89
|
+
function validateBoolean(value) {
|
|
90
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeBoolean, value))
|
|
91
|
+
throw new PropertyValidationError(`${value} does not match pattern for BOOLEAN`);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validate if a property value is a valid calendar user address.
|
|
95
|
+
* @param value The property value to validate.
|
|
96
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
97
|
+
*/
|
|
98
|
+
function validateCalendarUserAddress(value) {
|
|
99
|
+
try {
|
|
100
|
+
new URL(value);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
throw new PropertyValidationError(`${value} does not match pattern for CAL-ADDRESS`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate if a property value is a valid date.
|
|
108
|
+
* @param value The property value to validate.
|
|
109
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
110
|
+
*/
|
|
111
|
+
function validateDate(value) {
|
|
112
|
+
try {
|
|
113
|
+
(0, date_1.parseDateString)(value);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
throw new PropertyValidationError(`${value} does not match pattern for DATE`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Validate if a property value is a valid date-time.
|
|
121
|
+
* @param value The property value to validate.
|
|
122
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
123
|
+
*/
|
|
124
|
+
function validateDateTime(value) {
|
|
125
|
+
try {
|
|
126
|
+
(0, date_1.parseDateTimeString)(value);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
throw new PropertyValidationError(`${value} does not match pattern for DATETIME`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate if a property value is a valid duration.
|
|
134
|
+
* @param value The property value to validate.
|
|
135
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
136
|
+
*/
|
|
137
|
+
function validateDuration(value) {
|
|
138
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeDuration, value))
|
|
139
|
+
throw new PropertyValidationError(`${value} does not match pattern for DURATION`);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Validate if a property value is a valid float.
|
|
143
|
+
* @param value The property value to validate.
|
|
144
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
145
|
+
*/
|
|
146
|
+
function validateFloat(value) {
|
|
147
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeFloat, value))
|
|
148
|
+
throw new PropertyValidationError(`${value} does not match pattern for FLOAT`);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Validate if a property value is a valid integer.
|
|
152
|
+
* @param value The property value to validate.
|
|
153
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
154
|
+
*/
|
|
155
|
+
function validateInteger(value) {
|
|
156
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeInteger, value))
|
|
157
|
+
throw new PropertyValidationError(`${value} does not match pattern for INTEGER`);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Validate if a property value is a valid period.
|
|
161
|
+
* @param value The property value to validate.
|
|
162
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
163
|
+
*/
|
|
164
|
+
function validatePeriod(value) {
|
|
165
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypePeriod, value))
|
|
166
|
+
throw new PropertyValidationError(`${value} does not match pattern for PERIOD`);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Validate if a property value is a valid recurrence rule.
|
|
170
|
+
* @param value The property value to validate.
|
|
171
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
172
|
+
*/
|
|
173
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
174
|
+
function validateRecurrenceRule(value) {
|
|
175
|
+
// TODO: Not implemented
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Validate if a property value is valid text.
|
|
179
|
+
* @param value The property value to validate.
|
|
180
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
181
|
+
*/
|
|
182
|
+
function validateText(value) {
|
|
183
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeText, value))
|
|
184
|
+
throw new PropertyValidationError(`${value} does not match pattern for TEXT`);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Validate if a property value is a valid time.
|
|
188
|
+
* @param value The property value to validate.
|
|
189
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
190
|
+
*/
|
|
191
|
+
function validateTime(value) {
|
|
192
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeTime, value))
|
|
193
|
+
throw new PropertyValidationError(`${value} does not match pattern for TIME`);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Validate if a property value is a valid URI.
|
|
197
|
+
* @param value The property value to validate.
|
|
198
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
199
|
+
*/
|
|
200
|
+
function validateUri(value) {
|
|
201
|
+
try {
|
|
202
|
+
new URL(value);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
throw new PropertyValidationError(`${value} does not match pattern for URI`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Validate if a property value is a valid UTC offset.
|
|
210
|
+
* @param value The property value to validate.
|
|
211
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
212
|
+
*/
|
|
213
|
+
function validateUtcOffset(value) {
|
|
214
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.valueTypeUtcOffset, value))
|
|
215
|
+
throw new PropertyValidationError(`${value} does not match pattern for UTC-OFFSET`);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Validate a property value for a set value type.
|
|
219
|
+
* @param value The property value to validate.
|
|
220
|
+
* @param type The property value type which `value` will be validated against.
|
|
221
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
222
|
+
*/
|
|
223
|
+
function validateValue(value, type) {
|
|
224
|
+
switch (type) {
|
|
225
|
+
case 'BINARY':
|
|
226
|
+
validateBinary(value);
|
|
227
|
+
break;
|
|
228
|
+
case 'BOOLEAN':
|
|
229
|
+
validateBoolean(value);
|
|
230
|
+
break;
|
|
231
|
+
case 'CAL-ADDRESS':
|
|
232
|
+
validateCalendarUserAddress(value);
|
|
233
|
+
break;
|
|
234
|
+
case 'DATE':
|
|
235
|
+
validateDate(value);
|
|
236
|
+
break;
|
|
237
|
+
case 'DATE-TIME':
|
|
238
|
+
validateDateTime(value);
|
|
239
|
+
break;
|
|
240
|
+
case 'DURATION':
|
|
241
|
+
validateDuration(value);
|
|
242
|
+
break;
|
|
243
|
+
case 'FLOAT':
|
|
244
|
+
validateFloat(value);
|
|
245
|
+
break;
|
|
246
|
+
case 'INTEGER':
|
|
247
|
+
validateInteger(value);
|
|
248
|
+
break;
|
|
249
|
+
case 'PERIOD':
|
|
250
|
+
validatePeriod(value);
|
|
251
|
+
break;
|
|
252
|
+
case 'RECUR':
|
|
253
|
+
validateRecurrenceRule(value);
|
|
254
|
+
break;
|
|
255
|
+
case 'TEXT':
|
|
256
|
+
validateText(value);
|
|
257
|
+
break;
|
|
258
|
+
case 'TIME':
|
|
259
|
+
validateTime(value);
|
|
260
|
+
break;
|
|
261
|
+
case 'URI':
|
|
262
|
+
validateUri(value);
|
|
263
|
+
break;
|
|
264
|
+
case 'UTC-OFFSET':
|
|
265
|
+
validateUtcOffset(value);
|
|
266
|
+
break;
|
|
267
|
+
default:
|
|
268
|
+
console.warn(`Cannot validate value, unknown type ${type}`);
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Validate if a value is a valid content type.
|
|
274
|
+
* @param value The value to validate.
|
|
275
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
276
|
+
*/
|
|
277
|
+
function validateContentType(value) {
|
|
278
|
+
if (!(0, patterns_1.matchesWholeString)(patterns.contentType, value))
|
|
279
|
+
throw new PropertyValidationError(`${value} does not match pattern for content type`);
|
|
280
|
+
}
|
|
281
|
+
/* eslint-disable jsdoc/require-description-complete-sentence --
|
|
282
|
+
* Does not allow line to end with ':'.
|
|
283
|
+
**/
|
|
284
|
+
/**
|
|
285
|
+
* Validate the value of a property based on it's value type.
|
|
286
|
+
*
|
|
287
|
+
* The validation will fail if the property:
|
|
288
|
+
*
|
|
289
|
+
* - has a value which is not valid for its value type.
|
|
290
|
+
* - has a value type which is not valid for that property.
|
|
291
|
+
* - has no known value type and is invalid TEXT. (see below)
|
|
292
|
+
*
|
|
293
|
+
* Unknown properties are validated as TEXT by if no value type is set, as
|
|
294
|
+
* defined by {@link https://datatracker.ietf.org/doc/html/rfc5545#section-3.8.8|RFC5545#3.8.8.}
|
|
295
|
+
* @param property The property to validate.
|
|
296
|
+
* @throws {PropertyValidationError} If the validation fails.
|
|
297
|
+
*/
|
|
298
|
+
function validateProperty(property) {
|
|
299
|
+
// Get supported and default types
|
|
300
|
+
let supportedTypes = undefined;
|
|
301
|
+
if ((0, names_1.isKnownPropertyName)(property.name)) {
|
|
302
|
+
const name = property.name;
|
|
303
|
+
supportedTypes = valueType_1.supportedValueTypes[name];
|
|
304
|
+
}
|
|
305
|
+
// Get value type
|
|
306
|
+
const valueType = property.getValueType();
|
|
307
|
+
// Check if value type is unsupported by the property
|
|
308
|
+
if (supportedTypes !== undefined && !supportedTypes.includes(valueType)) {
|
|
309
|
+
throw new PropertyValidationError(supportedTypes.length === 1
|
|
310
|
+
? `Property ${property.name} has unsupported value type ${valueType}, must be ${supportedTypes[0]}`
|
|
311
|
+
: `Property ${property.name} has unsupported value type ${valueType}, must be one of ${supportedTypes.join(', ')}`);
|
|
312
|
+
}
|
|
313
|
+
// Validate according to value type
|
|
314
|
+
validateValue(property.value, valueType);
|
|
315
|
+
}
|
|
316
|
+
/* eslint-enable jsdoc/require-description-complete-sentence */
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvcGVydHkvdmFsaWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBLHdDQUtDO0FBT0QsMENBS0M7QUFPRCxrRUFRQztBQU9ELG9DQVFDO0FBT0QsNENBUUM7QUFPRCw0Q0FLQztBQU9ELHNDQUtDO0FBT0QsMENBS0M7QUFPRCx3Q0FLQztBQVFELHdEQUVDO0FBT0Qsb0NBS0M7QUFPRCxvQ0FLQztBQU9ELGtDQVFDO0FBT0QsOENBS0M7QUFRRCxzQ0FnREM7QUFPRCxrREFLQztBQW9CRCw0Q0FzQkM7QUFyVEQsa0NBQThEO0FBQzlELHNEQUF1QztBQUN2QywwQ0FBZ0Q7QUFFaEQsbUNBQXFFO0FBQ3JFLDJDQUF3RTtBQUV4RSw2RUFBNkU7QUFDN0UsTUFBYSx1QkFBd0IsU0FBUSxLQUFLO0lBQzlDLFlBQVksT0FBZTtRQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLHlCQUF5QixDQUFBO0lBQ3pDLENBQUM7Q0FDSjtBQUxELDBEQUtDO0FBRUQsMEVBQTBFO0FBQzFFLE1BQWEsb0JBQXFCLFNBQVEsS0FBSztJQUMzQyxZQUFZLE9BQWU7UUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQTtJQUN0QyxDQUFDO0NBQ0o7QUFMRCxvREFLQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYTtJQUN4QyxJQUFJLENBQUMsSUFBQSw2QkFBa0IsRUFBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztRQUNwRCxNQUFNLElBQUksdUJBQXVCLENBQzdCLEdBQUcsS0FBSyxvQ0FBb0MsQ0FDL0MsQ0FBQTtBQUNULENBQUM7QUFFRDs7OztHQUlHO0FBQ0gs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
|