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.
Files changed (63) hide show
  1. package/lib/component.d.ts +25 -4
  2. package/lib/component.d.ts.map +1 -1
  3. package/lib/component.js +60 -51
  4. package/lib/components/Calendar.d.ts +0 -20
  5. package/lib/components/Calendar.d.ts.map +1 -1
  6. package/lib/components/Calendar.js +2 -24
  7. package/lib/components/CalendarEvent.d.ts +1 -25
  8. package/lib/components/CalendarEvent.d.ts.map +1 -1
  9. package/lib/components/CalendarEvent.js +4 -29
  10. package/lib/components/TimeZone.d.ts +0 -38
  11. package/lib/components/TimeZone.d.ts.map +1 -1
  12. package/lib/components/TimeZone.js +1 -40
  13. package/lib/components/TimeZoneOffset.d.ts +0 -28
  14. package/lib/components/TimeZoneOffset.d.ts.map +1 -1
  15. package/lib/components/TimeZoneOffset.js +1 -30
  16. package/lib/date.d.ts +2 -10
  17. package/lib/date.d.ts.map +1 -1
  18. package/lib/date.js +15 -20
  19. package/lib/parse.d.ts +9 -16
  20. package/lib/parse.d.ts.map +1 -1
  21. package/lib/parse.js +188 -35
  22. package/lib/patterns.d.ts +28 -0
  23. package/lib/patterns.d.ts.map +1 -1
  24. package/lib/patterns.js +56 -2
  25. package/lib/property/Property.d.ts +344 -0
  26. package/lib/property/Property.d.ts.map +1 -0
  27. package/lib/property/Property.js +508 -0
  28. package/lib/property/escape.d.ts +46 -0
  29. package/lib/property/escape.d.ts.map +1 -0
  30. package/lib/property/escape.js +101 -0
  31. package/lib/property/index.d.ts +7 -0
  32. package/lib/property/index.d.ts.map +1 -0
  33. package/lib/property/index.js +23 -0
  34. package/lib/property/names.d.ts +11 -0
  35. package/lib/property/names.d.ts.map +1 -0
  36. package/lib/property/names.js +62 -0
  37. package/lib/property/parameter.d.ts +10 -0
  38. package/lib/property/parameter.d.ts.map +1 -0
  39. package/lib/property/parameter.js +3 -0
  40. package/lib/{property.d.ts → property/validate.d.ts} +9 -35
  41. package/lib/property/validate.d.ts.map +1 -0
  42. package/lib/property/validate.js +317 -0
  43. package/lib/property/valueType.d.ts +18 -0
  44. package/lib/property/valueType.d.ts.map +1 -0
  45. package/lib/property/valueType.js +82 -0
  46. package/package.json +5 -3
  47. package/src/component.ts +58 -52
  48. package/src/components/Calendar.ts +6 -30
  49. package/src/components/CalendarEvent.ts +7 -33
  50. package/src/components/TimeZone.ts +3 -51
  51. package/src/components/TimeZoneOffset.ts +5 -40
  52. package/src/date.ts +14 -30
  53. package/src/parse.ts +212 -40
  54. package/src/patterns.ts +64 -0
  55. package/src/property/Property.ts +609 -0
  56. package/src/property/escape.ts +102 -0
  57. package/src/property/index.ts +6 -0
  58. package/src/property/names.ts +65 -0
  59. package/src/property/parameter.ts +33 -0
  60. package/src/{property.ts → property/validate.ts} +23 -204
  61. package/src/property/valueType.ts +87 -0
  62. package/lib/property.d.ts.map +0 -1
  63. package/lib/property.js +0 -450
@@ -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
- 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;
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=property.d.ts.map
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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
@@ -0,0 +1,18 @@
1
+ import type { AllowedPropertyName, KnownPropertyName } from './names';
2
+ export declare const knownValueTypes: readonly ["BINARY", "BOOLEAN", "CAL-ADDRESS", "DATE", "DATE-TIME", "DURATION", "FLOAT", "INTEGER", "PERIOD", "RECUR", "TEXT", "TIME", "URI", "UTC-OFFSET"];
3
+ export type KnownValueType = (typeof knownValueTypes)[number];
4
+ export type AllowedValueType = KnownValueType | (string & {});
5
+ /**
6
+ * The value types that each known property supports as defined by the iCalendar
7
+ * specification. The first in the list is the default type.
8
+ */
9
+ export declare const supportedValueTypes: {
10
+ [name in KnownPropertyName]: KnownValueType[];
11
+ };
12
+ /**
13
+ * Get the default value type of a property based on its name.
14
+ * @param name The name of the property.
15
+ * @returns The default value type of the property, or `TEXT` if the property is unknown.
16
+ */
17
+ export declare function getDefaultValueType(name: AllowedPropertyName): KnownValueType;
18
+ //# sourceMappingURL=valueType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueType.d.ts","sourceRoot":"","sources":["../../src/property/valueType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAErE,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;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,cAAc,CAK7E"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.supportedValueTypes = exports.knownValueTypes = void 0;
4
+ exports.getDefaultValueType = getDefaultValueType;
5
+ exports.knownValueTypes = [
6
+ 'BINARY',
7
+ 'BOOLEAN',
8
+ 'CAL-ADDRESS',
9
+ 'DATE',
10
+ 'DATE-TIME',
11
+ 'DURATION',
12
+ 'FLOAT',
13
+ 'INTEGER',
14
+ 'PERIOD',
15
+ 'RECUR',
16
+ 'TEXT',
17
+ 'TIME',
18
+ 'URI',
19
+ 'UTC-OFFSET',
20
+ ];
21
+ /**
22
+ * The value types that each known property supports as defined by the iCalendar
23
+ * specification. The first in the list is the default type.
24
+ */
25
+ exports.supportedValueTypes = {
26
+ CALSCALE: ['TEXT'],
27
+ METHOD: ['TEXT'],
28
+ PRODID: ['TEXT'],
29
+ VERSION: ['TEXT'],
30
+ ATTACH: ['URI', 'BINARY'],
31
+ CATEGORIES: ['TEXT'],
32
+ CLASS: ['TEXT'],
33
+ COMMENT: ['TEXT'],
34
+ DESCRIPTION: ['TEXT'],
35
+ GEO: ['FLOAT'],
36
+ LOCATION: ['TEXT'],
37
+ 'PERCENT-COMPLETE': ['INTEGER'],
38
+ PRIORITY: ['INTEGER'],
39
+ RESOURCES: ['TEXT'],
40
+ STATUS: ['TEXT'],
41
+ SUMMARY: ['TEXT'],
42
+ COMPLETED: ['DATE-TIME'],
43
+ DTEND: ['DATE-TIME', 'DATE'],
44
+ DUE: ['DATE-TIME', 'DATE'],
45
+ DTSTART: ['DATE-TIME', 'DATE'],
46
+ DURATION: ['DURATION'],
47
+ FREEBUSY: ['PERIOD'],
48
+ TRANSP: ['TEXT'],
49
+ TZID: ['TEXT'],
50
+ TZNAME: ['TEXT'],
51
+ TZOFFSETFROM: ['UTC-OFFSET'],
52
+ TZOFFSETTO: ['UTC-OFFSET'],
53
+ TZURL: ['URI'],
54
+ ATTENDEE: ['CAL-ADDRESS'],
55
+ CONTACT: ['TEXT'],
56
+ ORGANIZER: ['CAL-ADDRESS'],
57
+ 'RECURRENCE-ID': ['DATE-TIME', 'DATE'],
58
+ 'RELATED-TO': ['TEXT'],
59
+ URL: ['URI'],
60
+ UID: ['TEXT'],
61
+ EXDATE: ['DATE-TIME', 'DATE'],
62
+ RDATE: ['DATE-TIME', 'DATE', 'PERIOD'],
63
+ RRULE: ['RECUR'],
64
+ ACTION: ['TEXT'],
65
+ REPEAT: ['INTEGER'],
66
+ TRIGGER: ['DURATION', 'DATE-TIME'],
67
+ CREATED: ['DATE-TIME'],
68
+ DTSTAMP: ['DATE-TIME'],
69
+ 'LAST-MODIFIED': ['DATE-TIME'],
70
+ SEQUENCE: ['INTEGER'],
71
+ 'REQUEST-STATUS': ['TEXT'],
72
+ };
73
+ /**
74
+ * Get the default value type of a property based on its name.
75
+ * @param name The name of the property.
76
+ * @returns The default value type of the property, or `TEXT` if the property is unknown.
77
+ */
78
+ function getDefaultValueType(name) {
79
+ const defaultType = exports.supportedValueTypes[name.toUpperCase()]?.[0];
80
+ return defaultType ?? 'TEXT';
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVUeXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3BlcnR5L3ZhbHVlVHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpRkEsa0RBS0M7QUFwRlksUUFBQSxlQUFlLEdBQUc7SUFDM0IsUUFBUTtJQUNSLFNBQVM7SUFDVCxhQUFhO0lBQ2IsTUFBTTtJQUNOLFdBQVc7SUFDWCxVQUFVO0lBQ1YsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsT0FBTztJQUNQLE1BQU07SUFDTixNQUFNO0lBQ04sS0FBSztJQUNMLFlBQVk7Q0FDTixDQUFBO0FBSVY7OztHQUdHO0FBQ1UsUUFBQSxtQkFBbUIsR0FFNUI7SUFDQSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDbEIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDakIsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztJQUN6QixVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2YsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2pCLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNyQixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7SUFDZCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDbEIsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDL0IsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQ3JCLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDaEIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2pCLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN4QixLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQzVCLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7SUFDMUIsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztJQUM5QixRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7SUFDdEIsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO0lBQ3BCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNoQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDZCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDaEIsWUFBWSxFQUFFLENBQUMsWUFBWSxDQUFDO0lBQzVCLFVBQVUsRUFBRSxDQUFDLFlBQVksQ0FBQztJQUMxQixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDZCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDekIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2pCLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUMxQixlQUFlLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3RDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUN0QixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDWixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDYixNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQzdCLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDO0lBQ3RDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUNoQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDaEIsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQ25CLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7SUFDbEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDO0lBQ3RCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN0QixlQUFlLEVBQUUsQ0FBQyxXQUFXLENBQUM7SUFDOUIsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQ3JCLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDO0NBQzdCLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsSUFBeUI7SUFDekQsTUFBTSxXQUFXLEdBQUcsMkJBQW1CLENBQ25DLElBQUksQ0FBQyxXQUFXLEVBQXVCLENBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQStCLENBQUE7SUFDcEMsT0FBTyxXQUFXLElBQUksTUFBTSxDQUFBO0FBQ2hDLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iamcal",
3
- "version": "2.1.1",
3
+ "version": "3.0.0",
4
4
  "description": "Read and write ICalendar files",
5
5
  "files": [
6
6
  "/lib",
@@ -11,8 +11,8 @@
11
11
  "types": "./lib/index.d.ts",
12
12
  "exports": {
13
13
  ".": {
14
- "default": "./lib/index.js",
15
- "types": "./lib/index.d.ts"
14
+ "types": "./lib/index.d.ts",
15
+ "default": "./lib/index.js"
16
16
  }
17
17
  },
18
18
  "scripts": {
@@ -39,8 +39,10 @@
39
39
  "devDependencies": {
40
40
  "@eslint/compat": "^1.3.1",
41
41
  "@eslint/js": "^9.32.0",
42
+ "@types/adm-zip": "^0.5.7",
42
43
  "@types/jest": "^30.0.0",
43
44
  "@types/node": "^22.10.1",
45
+ "adm-zip": "^0.5.16",
44
46
  "eslint": "^9.32.0",
45
47
  "eslint-plugin-jsdoc": "^52.0.2",
46
48
  "jest": "^30.0.5",