@pipobscure/ical 0.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.
Files changed (78) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +661 -0
  3. package/dist/alarm.d.ts +35 -0
  4. package/dist/alarm.d.ts.map +1 -0
  5. package/dist/alarm.js +87 -0
  6. package/dist/alarm.js.map +1 -0
  7. package/dist/calendar.d.ts +52 -0
  8. package/dist/calendar.d.ts.map +1 -0
  9. package/dist/calendar.js +121 -0
  10. package/dist/calendar.js.map +1 -0
  11. package/dist/component.d.ts +48 -0
  12. package/dist/component.d.ts.map +1 -0
  13. package/dist/component.js +170 -0
  14. package/dist/component.js.map +1 -0
  15. package/dist/event.d.ts +74 -0
  16. package/dist/event.d.ts.map +1 -0
  17. package/dist/event.js +263 -0
  18. package/dist/event.js.map +1 -0
  19. package/dist/freebusy.d.ts +45 -0
  20. package/dist/freebusy.d.ts.map +1 -0
  21. package/dist/freebusy.js +111 -0
  22. package/dist/freebusy.js.map +1 -0
  23. package/dist/index.d.ts +41 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +43 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/journal.d.ts +48 -0
  28. package/dist/journal.d.ts.map +1 -0
  29. package/dist/journal.js +148 -0
  30. package/dist/journal.js.map +1 -0
  31. package/dist/parse.d.ts +27 -0
  32. package/dist/parse.d.ts.map +1 -0
  33. package/dist/parse.js +140 -0
  34. package/dist/parse.js.map +1 -0
  35. package/dist/property-registry.d.ts +31 -0
  36. package/dist/property-registry.d.ts.map +1 -0
  37. package/dist/property-registry.js +83 -0
  38. package/dist/property-registry.js.map +1 -0
  39. package/dist/property.d.ts +36 -0
  40. package/dist/property.d.ts.map +1 -0
  41. package/dist/property.js +135 -0
  42. package/dist/property.js.map +1 -0
  43. package/dist/timezone.d.ts +55 -0
  44. package/dist/timezone.d.ts.map +1 -0
  45. package/dist/timezone.js +141 -0
  46. package/dist/timezone.js.map +1 -0
  47. package/dist/todo.d.ts +67 -0
  48. package/dist/todo.d.ts.map +1 -0
  49. package/dist/todo.js +220 -0
  50. package/dist/todo.js.map +1 -0
  51. package/dist/tokenize.d.ts +22 -0
  52. package/dist/tokenize.d.ts.map +1 -0
  53. package/dist/tokenize.js +95 -0
  54. package/dist/tokenize.js.map +1 -0
  55. package/dist/types.d.ts +100 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +3 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/value-types.d.ts +81 -0
  60. package/dist/value-types.d.ts.map +1 -0
  61. package/dist/value-types.js +445 -0
  62. package/dist/value-types.js.map +1 -0
  63. package/package.json +45 -0
  64. package/src/alarm.ts +105 -0
  65. package/src/calendar.ts +153 -0
  66. package/src/component.ts +193 -0
  67. package/src/event.ts +307 -0
  68. package/src/freebusy.ts +133 -0
  69. package/src/index.ts +85 -0
  70. package/src/journal.ts +174 -0
  71. package/src/parse.ts +166 -0
  72. package/src/property-registry.ts +124 -0
  73. package/src/property.ts +163 -0
  74. package/src/timezone.ts +169 -0
  75. package/src/todo.ts +253 -0
  76. package/src/tokenize.ts +99 -0
  77. package/src/types.ts +135 -0
  78. package/src/value-types.ts +498 -0
package/dist/event.js ADDED
@@ -0,0 +1,263 @@
1
+ /**
2
+ * VEVENT component (RFC 5545 §3.6.1)
3
+ *
4
+ * UID and DTSTAMP are required.
5
+ * DTSTART is required when METHOD is not present in the calendar.
6
+ */
7
+ import { Component } from './component.js';
8
+ import { parseProperty } from './property.js';
9
+ export class Event extends Component {
10
+ constructor() {
11
+ super('VEVENT');
12
+ }
13
+ // ── Required / very common properties ───────────────────────────────
14
+ get uid() {
15
+ return this.getProperty('UID')?.text ?? null;
16
+ }
17
+ set uid(v) {
18
+ this.setProperty('UID', v);
19
+ }
20
+ get dtstamp() {
21
+ const v = this.getValue('DTSTAMP');
22
+ return v && typeof v === 'object' && v.type === 'date-time' ? v : null;
23
+ }
24
+ set dtstamp(v) {
25
+ if (v instanceof Date) {
26
+ this.setProperty('DTSTAMP', {
27
+ type: 'date-time',
28
+ year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(),
29
+ hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(),
30
+ utc: true,
31
+ });
32
+ }
33
+ else {
34
+ this.setProperty('DTSTAMP', v);
35
+ }
36
+ }
37
+ get dtstart() {
38
+ const v = this.getValue('DTSTART');
39
+ if (!v || typeof v !== 'object')
40
+ return null;
41
+ return v.type === 'date-time' || v.type === 'date' ? v : null;
42
+ }
43
+ set dtstart(v) {
44
+ if (v instanceof Date) {
45
+ this.setProperty('DTSTART', {
46
+ type: 'date-time',
47
+ year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(),
48
+ hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(),
49
+ utc: true,
50
+ });
51
+ }
52
+ else if (v.type === 'date') {
53
+ this.setProperty('DTSTART', v, { VALUE: 'DATE' });
54
+ }
55
+ else {
56
+ this.setProperty('DTSTART', v);
57
+ }
58
+ }
59
+ get dtend() {
60
+ const v = this.getValue('DTEND');
61
+ if (!v || typeof v !== 'object')
62
+ return null;
63
+ return v.type === 'date-time' || v.type === 'date' ? v : null;
64
+ }
65
+ set dtend(v) {
66
+ if (v instanceof Date) {
67
+ this.setProperty('DTEND', {
68
+ type: 'date-time',
69
+ year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(),
70
+ hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(),
71
+ utc: true,
72
+ });
73
+ }
74
+ else if (v.type === 'date') {
75
+ this.setProperty('DTEND', v, { VALUE: 'DATE' });
76
+ }
77
+ else {
78
+ this.setProperty('DTEND', v);
79
+ }
80
+ }
81
+ get duration() {
82
+ const v = this.getValue('DURATION');
83
+ return v && typeof v === 'object' && v.type === 'duration' ? v : null;
84
+ }
85
+ set duration(v) {
86
+ this.setProperty('DURATION', v);
87
+ }
88
+ get summary() {
89
+ return this.getProperty('SUMMARY')?.text ?? null;
90
+ }
91
+ set summary(v) {
92
+ this.setProperty('SUMMARY', v);
93
+ }
94
+ get description() {
95
+ return this.getProperty('DESCRIPTION')?.text ?? null;
96
+ }
97
+ set description(v) {
98
+ this.setProperty('DESCRIPTION', v);
99
+ }
100
+ get location() {
101
+ return this.getProperty('LOCATION')?.text ?? null;
102
+ }
103
+ set location(v) {
104
+ this.setProperty('LOCATION', v);
105
+ }
106
+ get url() {
107
+ return this.getProperty('URL')?.text ?? null;
108
+ }
109
+ set url(v) {
110
+ this.setProperty('URL', v);
111
+ }
112
+ get status() {
113
+ return this.getProperty('STATUS')?.text ?? null;
114
+ }
115
+ set status(v) {
116
+ this.setProperty('STATUS', v);
117
+ }
118
+ get transp() {
119
+ return this.getProperty('TRANSP')?.text ?? null;
120
+ }
121
+ set transp(v) {
122
+ this.setProperty('TRANSP', v);
123
+ }
124
+ get klass() {
125
+ return this.getProperty('CLASS')?.text ?? null;
126
+ }
127
+ set klass(v) {
128
+ this.setProperty('CLASS', v);
129
+ }
130
+ get priority() {
131
+ return this.getProperty('PRIORITY')?.number ?? null;
132
+ }
133
+ set priority(v) {
134
+ this.setProperty('PRIORITY', Math.max(0, Math.min(9, Math.trunc(v))));
135
+ }
136
+ get sequence() {
137
+ return this.getProperty('SEQUENCE')?.number ?? null;
138
+ }
139
+ set sequence(v) {
140
+ this.setProperty('SEQUENCE', Math.max(0, Math.trunc(v)));
141
+ }
142
+ get created() {
143
+ const v = this.getValue('CREATED');
144
+ return v && typeof v === 'object' && v.type === 'date-time' ? v : null;
145
+ }
146
+ set created(v) {
147
+ this.setProperty('CREATED', v instanceof Date
148
+ ? { type: 'date-time', year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(), hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(), utc: true }
149
+ : v);
150
+ }
151
+ get lastModified() {
152
+ const v = this.getValue('LAST-MODIFIED');
153
+ return v && typeof v === 'object' && v.type === 'date-time' ? v : null;
154
+ }
155
+ set lastModified(v) {
156
+ this.setProperty('LAST-MODIFIED', v instanceof Date
157
+ ? { type: 'date-time', year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(), hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(), utc: true }
158
+ : v);
159
+ }
160
+ get recurrenceId() {
161
+ const v = this.getValue('RECURRENCE-ID');
162
+ if (!v || typeof v !== 'object')
163
+ return null;
164
+ return v.type === 'date-time' || v.type === 'date' ? v : null;
165
+ }
166
+ set recurrenceId(v) {
167
+ const params = v.type === 'date' ? { VALUE: 'DATE' } : {};
168
+ this.setProperty('RECURRENCE-ID', v, params);
169
+ }
170
+ get geo() {
171
+ const v = this.getValue('GEO');
172
+ return v && typeof v === 'object' && v.type === 'geo' ? v : null;
173
+ }
174
+ set geo(v) {
175
+ this.setProperty('GEO', v);
176
+ }
177
+ get organizer() {
178
+ return this.getProperty('ORGANIZER')?.text ?? null;
179
+ }
180
+ set organizer(v) {
181
+ this.setProperty('ORGANIZER', v);
182
+ }
183
+ // ── Multi-occurrence properties ──────────────────────────────────────
184
+ get attendees() {
185
+ return this.getProperties('ATTENDEE');
186
+ }
187
+ addAttendee(calAddress, params = {}) {
188
+ this.appendProperty('ATTENDEE', calAddress, params);
189
+ return this;
190
+ }
191
+ get categories() {
192
+ return this.getValues('CATEGORIES');
193
+ }
194
+ set categories(v) {
195
+ this.setProperty('CATEGORIES', v);
196
+ }
197
+ get comments() {
198
+ return this.getProperties('COMMENT');
199
+ }
200
+ addComment(v) {
201
+ this.appendProperty('COMMENT', v);
202
+ return this;
203
+ }
204
+ get contacts() {
205
+ return this.getProperties('CONTACT');
206
+ }
207
+ addContact(v) {
208
+ this.appendProperty('CONTACT', v);
209
+ return this;
210
+ }
211
+ get exdates() {
212
+ return this.getProperties('EXDATE').flatMap((p) => p.list);
213
+ }
214
+ addExdate(v) {
215
+ const params = v.type === 'date' ? { VALUE: 'DATE' } : {};
216
+ this.appendProperty('EXDATE', v, params);
217
+ return this;
218
+ }
219
+ get rdates() {
220
+ return this.getProperties('RDATE').flatMap((p) => p.list);
221
+ }
222
+ addRdate(v) {
223
+ const params = v.type === 'date' ? { VALUE: 'DATE' } : {};
224
+ this.appendProperty('RDATE', v, params);
225
+ return this;
226
+ }
227
+ get rrules() {
228
+ return this.getProperties('RRULE')
229
+ .map((p) => p.scalar)
230
+ .filter((v) => typeof v === 'object' && v !== null && v.type === 'recur');
231
+ }
232
+ addRrule(v) {
233
+ this.appendProperty('RRULE', v);
234
+ return this;
235
+ }
236
+ get alarms() {
237
+ return this.getComponents('VALARM');
238
+ }
239
+ addAlarm(alarm) {
240
+ this.addComponent(alarm);
241
+ return this;
242
+ }
243
+ // ── Strict validation ────────────────────────────────────────────────
244
+ toString() {
245
+ if (!this.uid)
246
+ throw new Error('VEVENT: UID is required');
247
+ if (!this.getProperty('DTSTAMP'))
248
+ throw new Error('VEVENT: DTSTAMP is required');
249
+ return super.toString();
250
+ }
251
+ // ── Factory ──────────────────────────────────────────────────────────
252
+ static fromRaw(props, subcomponents = []) {
253
+ const event = new Event();
254
+ for (const { name, params, value } of props) {
255
+ event.addProperty(parseProperty(name, value, params));
256
+ }
257
+ for (const sub of subcomponents) {
258
+ event.addComponent(sub);
259
+ }
260
+ return event;
261
+ }
262
+ }
263
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * VFREEBUSY component (RFC 5545 §3.6.4)
3
+ *
4
+ * UID and DTSTAMP are required.
5
+ * FREEBUSY properties list free/busy time periods.
6
+ */
7
+ import { Component } from './component.js';
8
+ import { Property } from './property.js';
9
+ import type { ICalDateTime, ICalPeriod } from './types.js';
10
+ export declare class FreeBusy extends Component {
11
+ constructor();
12
+ get uid(): string | null;
13
+ set uid(v: string);
14
+ get dtstamp(): ICalDateTime | null;
15
+ set dtstamp(v: ICalDateTime | Date);
16
+ get dtstart(): ICalDateTime | null;
17
+ set dtstart(v: ICalDateTime | Date);
18
+ get dtend(): ICalDateTime | null;
19
+ set dtend(v: ICalDateTime | Date);
20
+ get organizer(): string | null;
21
+ set organizer(v: string);
22
+ get attendees(): Property[];
23
+ addAttendee(calAddress: string, params?: Record<string, string>): this;
24
+ get url(): string | null;
25
+ set url(v: string);
26
+ get comment(): string | null;
27
+ set comment(v: string);
28
+ /** All FREEBUSY properties (may have multiple, each with FBTYPE parameter). */
29
+ get freebusyProperties(): Property[];
30
+ /** Flat list of all PERIOD values across all FREEBUSY properties. */
31
+ get periods(): ICalPeriod[];
32
+ /**
33
+ * Add a FREEBUSY property containing one or more periods.
34
+ * @param periods - Array of periods for this FREEBUSY property.
35
+ * @param fbtype - FBTYPE parameter value (FREE, BUSY, BUSY-UNAVAILABLE, BUSY-TENTATIVE).
36
+ */
37
+ addFreebusy(periods: ICalPeriod[], fbtype?: string): this;
38
+ toString(): string;
39
+ static fromRaw(props: ReadonlyArray<{
40
+ name: string;
41
+ params: Record<string, string>;
42
+ value: string;
43
+ }>): FreeBusy;
44
+ }
45
+ //# sourceMappingURL=freebusy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freebusy.d.ts","sourceRoot":"","sources":["../src/freebusy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D,qBAAa,QAAS,SAAQ,SAAS;;IAOrC,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAEhB;IAED,IAAI,OAAO,IAAI,YAAY,GAAG,IAAI,CAGjC;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAIjC;IAID,IAAI,OAAO,IAAI,YAAY,GAAG,IAAI,CAGjC;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAIjC;IAED,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,CAG/B;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAI/B;IAID,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,EAEtB;IAED,IAAI,SAAS,IAAI,QAAQ,EAAE,CAE1B;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;IAK1E,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAEhB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,EAEpB;IAID,+EAA+E;IAC/E,IAAI,kBAAkB,IAAI,QAAQ,EAAE,CAEnC;IAED,qEAAqE;IACrE,IAAI,OAAO,IAAI,UAAU,EAAE,CAI1B;IAED;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,SAAS,GAAG,IAAI;IAOhD,QAAQ,IAAI,MAAM;IAQ3B,MAAM,CAAC,OAAO,CACZ,KAAK,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GACpF,QAAQ;CAOZ"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * VFREEBUSY component (RFC 5545 §3.6.4)
3
+ *
4
+ * UID and DTSTAMP are required.
5
+ * FREEBUSY properties list free/busy time periods.
6
+ */
7
+ import { Component } from './component.js';
8
+ import { parseProperty } from './property.js';
9
+ export class FreeBusy extends Component {
10
+ constructor() {
11
+ super('VFREEBUSY');
12
+ }
13
+ // ── Required ─────────────────────────────────────────────────────────
14
+ get uid() {
15
+ return this.getProperty('UID')?.text ?? null;
16
+ }
17
+ set uid(v) {
18
+ this.setProperty('UID', v);
19
+ }
20
+ get dtstamp() {
21
+ const v = this.getValue('DTSTAMP');
22
+ return v && typeof v === 'object' && v.type === 'date-time' ? v : null;
23
+ }
24
+ set dtstamp(v) {
25
+ this.setProperty('DTSTAMP', v instanceof Date
26
+ ? { type: 'date-time', year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(), hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(), utc: true }
27
+ : v);
28
+ }
29
+ // ── Date/time span ───────────────────────────────────────────────────
30
+ get dtstart() {
31
+ const v = this.getValue('DTSTART');
32
+ return v && typeof v === 'object' && v.type === 'date-time' ? v : null;
33
+ }
34
+ set dtstart(v) {
35
+ this.setProperty('DTSTART', v instanceof Date
36
+ ? { type: 'date-time', year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(), hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(), utc: true }
37
+ : v);
38
+ }
39
+ get dtend() {
40
+ const v = this.getValue('DTEND');
41
+ return v && typeof v === 'object' && v.type === 'date-time' ? v : null;
42
+ }
43
+ set dtend(v) {
44
+ this.setProperty('DTEND', v instanceof Date
45
+ ? { type: 'date-time', year: v.getUTCFullYear(), month: v.getUTCMonth() + 1, day: v.getUTCDate(), hour: v.getUTCHours(), minute: v.getUTCMinutes(), second: v.getUTCSeconds(), utc: true }
46
+ : v);
47
+ }
48
+ // ── Participants ──────────────────────────────────────────────────────
49
+ get organizer() {
50
+ return this.getProperty('ORGANIZER')?.text ?? null;
51
+ }
52
+ set organizer(v) {
53
+ this.setProperty('ORGANIZER', v);
54
+ }
55
+ get attendees() {
56
+ return this.getProperties('ATTENDEE');
57
+ }
58
+ addAttendee(calAddress, params = {}) {
59
+ this.appendProperty('ATTENDEE', calAddress, params);
60
+ return this;
61
+ }
62
+ get url() {
63
+ return this.getProperty('URL')?.text ?? null;
64
+ }
65
+ set url(v) {
66
+ this.setProperty('URL', v);
67
+ }
68
+ get comment() {
69
+ return this.getProperty('COMMENT')?.text ?? null;
70
+ }
71
+ set comment(v) {
72
+ this.setProperty('COMMENT', v);
73
+ }
74
+ // ── FREEBUSY periods ─────────────────────────────────────────────────
75
+ /** All FREEBUSY properties (may have multiple, each with FBTYPE parameter). */
76
+ get freebusyProperties() {
77
+ return this.getProperties('FREEBUSY');
78
+ }
79
+ /** Flat list of all PERIOD values across all FREEBUSY properties. */
80
+ get periods() {
81
+ return this.getProperties('FREEBUSY')
82
+ .flatMap((p) => p.list)
83
+ .filter((v) => typeof v === 'object' && v !== null && v.type === 'period');
84
+ }
85
+ /**
86
+ * Add a FREEBUSY property containing one or more periods.
87
+ * @param periods - Array of periods for this FREEBUSY property.
88
+ * @param fbtype - FBTYPE parameter value (FREE, BUSY, BUSY-UNAVAILABLE, BUSY-TENTATIVE).
89
+ */
90
+ addFreebusy(periods, fbtype = 'BUSY') {
91
+ this.appendProperty('FREEBUSY', periods, { FBTYPE: fbtype });
92
+ return this;
93
+ }
94
+ // ── Validation ────────────────────────────────────────────────────────
95
+ toString() {
96
+ if (!this.uid)
97
+ throw new Error('VFREEBUSY: UID is required');
98
+ if (!this.getProperty('DTSTAMP'))
99
+ throw new Error('VFREEBUSY: DTSTAMP is required');
100
+ return super.toString();
101
+ }
102
+ // ── Factory ──────────────────────────────────────────────────────────
103
+ static fromRaw(props) {
104
+ const fb = new FreeBusy();
105
+ for (const { name, params, value } of props) {
106
+ fb.addProperty(parseProperty(name, value, params));
107
+ }
108
+ return fb;
109
+ }
110
+ }
111
+ //# sourceMappingURL=freebusy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freebusy.js","sourceRoot":"","sources":["../src/freebusy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @pipobscure/ical — Full iCalendar (RFC 5545) implementation.
3
+ *
4
+ * Tolerant parsing, strict generation.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { parse, Calendar, Event } from '@pipobscure/ical';
9
+ *
10
+ * // Parse
11
+ * const cal = parse(icsString);
12
+ * for (const event of cal.events) {
13
+ * console.log(event.summary, event.dtstart);
14
+ * }
15
+ *
16
+ * // Build & serialize
17
+ * const cal = Calendar.create('-//My App//EN');
18
+ * const event = new Event();
19
+ * event.uid = crypto.randomUUID();
20
+ * event.dtstamp = new Date();
21
+ * event.dtstart = new Date('2025-01-01T10:00:00Z');
22
+ * event.dtend = new Date('2025-01-01T11:00:00Z');
23
+ * event.summary = 'New Year kickoff';
24
+ * cal.addEvent(event);
25
+ * console.log(cal.toString());
26
+ * ```
27
+ */
28
+ export { parse, parseAll } from './parse.js';
29
+ export { Component } from './component.js';
30
+ export { Calendar } from './calendar.js';
31
+ export { Event } from './event.js';
32
+ export { Todo } from './todo.js';
33
+ export { Journal } from './journal.js';
34
+ export { FreeBusy } from './freebusy.js';
35
+ export { Timezone, Standard, Daylight, TimezoneRule } from './timezone.js';
36
+ export { Alarm } from './alarm.js';
37
+ export { Property, parseProperty } from './property.js';
38
+ export { TEXT, BOOLEAN, INTEGER, FLOAT, URI, CAL_ADDRESS, BINARY, UTC_OFFSET, DATE, DATE_TIME, TIME, DURATION, PERIOD, RECUR, GEO, CODECS, } from './value-types.js';
39
+ export type { ICalDate, ICalDateTime, ICalTime, ICalDuration, ICalPeriod, ICalRecur, ICalUtcOffset, ICalGeo, ICalBinary, ICalStructured, ICalValue, RecurFreq, Weekday, ByDayRule, ContentLine, ParsedProperty, } from './types.js';
40
+ export type { ValueTypeName, PropertyDef } from './property-registry.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,KAAK,EACL,GAAG,EACH,WAAW,EACX,MAAM,EACN,UAAU,EACV,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,MAAM,GACP,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,OAAO,EACP,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,OAAO,EACP,SAAS,EACT,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @pipobscure/ical — Full iCalendar (RFC 5545) implementation.
3
+ *
4
+ * Tolerant parsing, strict generation.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { parse, Calendar, Event } from '@pipobscure/ical';
9
+ *
10
+ * // Parse
11
+ * const cal = parse(icsString);
12
+ * for (const event of cal.events) {
13
+ * console.log(event.summary, event.dtstart);
14
+ * }
15
+ *
16
+ * // Build & serialize
17
+ * const cal = Calendar.create('-//My App//EN');
18
+ * const event = new Event();
19
+ * event.uid = crypto.randomUUID();
20
+ * event.dtstamp = new Date();
21
+ * event.dtstart = new Date('2025-01-01T10:00:00Z');
22
+ * event.dtend = new Date('2025-01-01T11:00:00Z');
23
+ * event.summary = 'New Year kickoff';
24
+ * cal.addEvent(event);
25
+ * console.log(cal.toString());
26
+ * ```
27
+ */
28
+ // ── Parsing ───────────────────────────────────────────────────────────────
29
+ export { parse, parseAll } from './parse.js';
30
+ // ── Components ────────────────────────────────────────────────────────────
31
+ export { Component } from './component.js';
32
+ export { Calendar } from './calendar.js';
33
+ export { Event } from './event.js';
34
+ export { Todo } from './todo.js';
35
+ export { Journal } from './journal.js';
36
+ export { FreeBusy } from './freebusy.js';
37
+ export { Timezone, Standard, Daylight, TimezoneRule } from './timezone.js';
38
+ export { Alarm } from './alarm.js';
39
+ // ── Property & value primitives ───────────────────────────────────────────
40
+ export { Property, parseProperty } from './property.js';
41
+ // ── Value type codecs (for advanced use) ─────────────────────────────────
42
+ export { TEXT, BOOLEAN, INTEGER, FLOAT, URI, CAL_ADDRESS, BINARY, UTC_OFFSET, DATE, DATE_TIME, TIME, DURATION, PERIOD, RECUR, GEO, CODECS, } from './value-types.js';
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,6EAA6E;AAC7E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7C,6EAA6E;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAExD,4EAA4E;AAC5E,OAAO,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,KAAK,EACL,GAAG,EACH,WAAW,EACX,MAAM,EACN,UAAU,EACV,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,MAAM,GACP,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * VJOURNAL component (RFC 5545 §3.6.3)
3
+ *
4
+ * UID and DTSTAMP are required.
5
+ */
6
+ import { Component } from './component.js';
7
+ import { Property } from './property.js';
8
+ import type { ICalDate, ICalDateTime, ICalRecur, ICalValue } from './types.js';
9
+ export declare class Journal extends Component {
10
+ constructor();
11
+ get uid(): string | null;
12
+ set uid(v: string);
13
+ get dtstamp(): ICalDateTime | null;
14
+ set dtstamp(v: ICalDateTime | Date);
15
+ get dtstart(): ICalDateTime | ICalDate | null;
16
+ set dtstart(v: ICalDateTime | ICalDate | Date);
17
+ get summary(): string | null;
18
+ set summary(v: string);
19
+ get descriptions(): Property[];
20
+ addDescription(v: string): this;
21
+ get status(): 'DRAFT' | 'FINAL' | 'CANCELLED' | string | null;
22
+ set status(v: string);
23
+ get klass(): string | null;
24
+ set klass(v: string);
25
+ get url(): string | null;
26
+ set url(v: string);
27
+ get organizer(): string | null;
28
+ set organizer(v: string);
29
+ get sequence(): number | null;
30
+ set sequence(v: number);
31
+ get created(): ICalDateTime | null;
32
+ set created(v: ICalDateTime | Date);
33
+ get lastModified(): ICalDateTime | null;
34
+ set lastModified(v: ICalDateTime | Date);
35
+ get attendees(): Property[];
36
+ addAttendee(calAddress: string, params?: Record<string, string>): this;
37
+ get categories(): ICalValue[];
38
+ set categories(v: string[]);
39
+ get rrules(): ICalRecur[];
40
+ addRrule(v: ICalRecur): this;
41
+ toString(): string;
42
+ static fromRaw(props: ReadonlyArray<{
43
+ name: string;
44
+ params: Record<string, string>;
45
+ value: string;
46
+ }>): Journal;
47
+ }
48
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/E,qBAAa,OAAQ,SAAQ,SAAS;;IAOpC,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAEhB;IAED,IAAI,OAAO,IAAI,YAAY,GAAG,IAAI,CAGjC;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAIjC;IAID,IAAI,OAAO,IAAI,YAAY,GAAG,QAAQ,GAAG,IAAI,CAI5C;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,GAAG,IAAI,EAQ5C;IAID,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,EAEpB;IAED,IAAI,YAAY,IAAI,QAAQ,EAAE,CAE7B;IAED,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAK/B,IAAI,MAAM,IAAI,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAE5D;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAEnB;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAEzB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAElB;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAEhB;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,EAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,CAE5B;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAErB;IAED,IAAI,OAAO,IAAI,YAAY,GAAG,IAAI,CAGjC;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAIjC;IAED,IAAI,YAAY,IAAI,YAAY,GAAG,IAAI,CAGtC;IACD,IAAI,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAItC;IAID,IAAI,SAAS,IAAI,QAAQ,EAAE,CAE1B;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;IAK1E,IAAI,UAAU,IAAI,SAAS,EAAE,CAE5B;IAED,IAAI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAEzB;IAED,IAAI,MAAM,IAAI,SAAS,EAAE,CAIxB;IAED,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAOnB,QAAQ,IAAI,MAAM;IAQ3B,MAAM,CAAC,OAAO,CACZ,KAAK,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GACpF,OAAO;CAOX"}