@miguelarios/pim-core 0.4.1 → 0.6.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 (52) hide show
  1. package/dist/ics/_shared.d.ts +11 -0
  2. package/dist/ics/_shared.d.ts.map +1 -0
  3. package/dist/ics/_shared.js +150 -0
  4. package/dist/ics/_shared.js.map +1 -0
  5. package/dist/ics/_tz-init.d.ts +2 -0
  6. package/dist/ics/_tz-init.d.ts.map +1 -0
  7. package/dist/ics/_tz-init.js +29 -0
  8. package/dist/ics/_tz-init.js.map +1 -0
  9. package/dist/ics/components.d.ts +26 -0
  10. package/dist/ics/components.d.ts.map +1 -0
  11. package/dist/ics/components.js +178 -0
  12. package/dist/ics/components.js.map +1 -0
  13. package/dist/ics/errors.d.ts +7 -0
  14. package/dist/ics/errors.d.ts.map +1 -0
  15. package/dist/ics/errors.js +13 -0
  16. package/dist/ics/errors.js.map +1 -0
  17. package/dist/ics/generate.d.ts +4 -0
  18. package/dist/ics/generate.d.ts.map +1 -0
  19. package/dist/ics/generate.js +101 -0
  20. package/dist/ics/generate.js.map +1 -0
  21. package/dist/ics/index.d.ts +11 -0
  22. package/dist/ics/index.d.ts.map +1 -0
  23. package/dist/ics/index.js +12 -0
  24. package/dist/ics/index.js.map +1 -0
  25. package/dist/ics/parse-events.d.ts +4 -0
  26. package/dist/ics/parse-events.d.ts.map +1 -0
  27. package/dist/ics/parse-events.js +223 -0
  28. package/dist/ics/parse-events.js.map +1 -0
  29. package/dist/ics/parse-journals.d.ts +4 -0
  30. package/dist/ics/parse-journals.d.ts.map +1 -0
  31. package/dist/ics/parse-journals.js +54 -0
  32. package/dist/ics/parse-journals.js.map +1 -0
  33. package/dist/ics/parse-todos.d.ts +4 -0
  34. package/dist/ics/parse-todos.d.ts.map +1 -0
  35. package/dist/ics/parse-todos.js +55 -0
  36. package/dist/ics/parse-todos.js.map +1 -0
  37. package/dist/ics/rrule.d.ts +2 -0
  38. package/dist/ics/rrule.d.ts.map +1 -0
  39. package/dist/ics/rrule.js +23 -0
  40. package/dist/ics/rrule.js.map +1 -0
  41. package/dist/ics/types.d.ts +100 -0
  42. package/dist/ics/types.d.ts.map +1 -0
  43. package/dist/ics/types.js +3 -0
  44. package/dist/ics/types.js.map +1 -0
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/vcard.d.ts +16 -0
  49. package/dist/vcard.d.ts.map +1 -1
  50. package/dist/vcard.js +143 -20
  51. package/dist/vcard.js.map +1 -1
  52. package/package.json +7 -1
@@ -0,0 +1,4 @@
1
+ import "./_tz-init.js";
2
+ import type { ParsedEvent, TimeRange } from "./types.js";
3
+ export declare function parseIcsEvents(icsContent: string, range?: TimeRange, timezone?: string): ParsedEvent[];
4
+ //# sourceMappingURL=parse-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-events.d.ts","sourceRoot":"","sources":["../../src/ics/parse-events.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AAUvB,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAoKzD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,SAAS,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,EAAE,CAiEf"}
@@ -0,0 +1,223 @@
1
+ import ICAL from "ical.js";
2
+ import "./_tz-init.js";
3
+ import { parseAlarms, parseAttendees, parseCategories, parseGeo, parseOrganizer, timeToIso, } from "./_shared.js";
4
+ import { IcsParseError } from "./errors.js";
5
+ function nullIfEmpty(value) {
6
+ if (typeof value !== "string")
7
+ return null;
8
+ return value.length > 0 ? value : null;
9
+ }
10
+ function buildBaseEvent(component) {
11
+ const url = component.getFirstPropertyValue("url");
12
+ const status = component.getFirstPropertyValue("status");
13
+ const transp = component.getFirstPropertyValue("transp");
14
+ const rrule = component.getFirstPropertyValue("rrule");
15
+ const created = component.getFirstPropertyValue("created");
16
+ const lastModified = component.getFirstPropertyValue("last-modified");
17
+ const rdateProps = component.getAllProperties("rdate");
18
+ const rdates = [];
19
+ for (const prop of rdateProps) {
20
+ for (const v of prop.getValues()) {
21
+ if (v instanceof ICAL.Time)
22
+ rdates.push(timeToIso(v));
23
+ }
24
+ }
25
+ let availability = null;
26
+ if (typeof transp === "string") {
27
+ if (transp.toUpperCase() === "OPAQUE")
28
+ availability = "busy";
29
+ else if (transp.toUpperCase() === "TRANSPARENT")
30
+ availability = "free";
31
+ }
32
+ const summary = component.getFirstPropertyValue("summary");
33
+ const uid = component.getFirstPropertyValue("uid");
34
+ const location = component.getFirstPropertyValue("location");
35
+ const description = component.getFirstPropertyValue("description");
36
+ return {
37
+ uid: typeof uid === "string" ? uid : "",
38
+ title: typeof summary === "string" ? summary : "",
39
+ all_day: false, // overwritten below per-instance
40
+ location: nullIfEmpty(location),
41
+ description: nullIfEmpty(description),
42
+ status: typeof status === "string" ? status.toLowerCase() : null,
43
+ availability,
44
+ url: typeof url === "string" && url.length > 0 ? url : null,
45
+ attendees: parseAttendees(component),
46
+ categories: parseCategories(component),
47
+ geo: parseGeo(component),
48
+ organizer: parseOrganizer(component),
49
+ recurrence_rule: rrule ? rrule.toString() : null,
50
+ rdates: rdates.length > 0 ? rdates : null,
51
+ created: created instanceof ICAL.Time ? created.toJSDate().toISOString() : null,
52
+ last_modified: lastModified instanceof ICAL.Time ? lastModified.toJSDate().toISOString() : null,
53
+ is_recurring: !!rrule,
54
+ alarms: parseAlarms(component),
55
+ occurrence_date: null,
56
+ };
57
+ }
58
+ function dateOnlyToIso(time) {
59
+ // For VALUE=DATE values, treat as UTC midnight rather than local-midnight.
60
+ // ICAL.Time.toJSDate() for date-only values uses the local Date constructor
61
+ // which makes the result depend on the test machine's tz; we want a
62
+ // deterministic ISO string anchored at UTC midnight.
63
+ const yyyy = time.year.toString().padStart(4, "0");
64
+ const mm = time.month.toString().padStart(2, "0");
65
+ const dd = time.day.toString().padStart(2, "0");
66
+ return `${yyyy}-${mm}-${dd}T00:00:00.000Z`;
67
+ }
68
+ function timeToEventIso(time) {
69
+ return time.isDate ? dateOnlyToIso(time) : time.toJSDate().toISOString();
70
+ }
71
+ // A floating time has no TZID and is not UTC ("Z"). In ical.js v2 the parser
72
+ // assigns ICAL.Timezone.localTimezone to such values, which makes
73
+ // toJSDate() interpret the wall-clock components in the host process tz.
74
+ // That makes parser output non-deterministic across machines. When the caller
75
+ // passes a `timezone` argument, treat it as the viewer's preferred zone and
76
+ // re-anchor the wall-clock there before converting to UTC.
77
+ function isFloating(time) {
78
+ if (time.isDate)
79
+ return false;
80
+ const zone = time.zone;
81
+ return zone === ICAL.Timezone.localTimezone || zone == null;
82
+ }
83
+ function timeToEventIsoWithTz(time, timezone) {
84
+ if (time.isDate)
85
+ return dateOnlyToIso(time);
86
+ if (timezone && isFloating(time)) {
87
+ const tz = ICAL.TimezoneService.get(timezone);
88
+ if (tz) {
89
+ // Build a fresh ICAL.Time with the same wall-clock components anchored
90
+ // in the requested zone. Mutating `time.zone` directly also works in
91
+ // ical.js v2 but constructing a new value avoids touching the caller's
92
+ // component tree.
93
+ const rebound = new ICAL.Time({
94
+ year: time.year,
95
+ month: time.month,
96
+ day: time.day,
97
+ hour: time.hour,
98
+ minute: time.minute,
99
+ second: time.second,
100
+ isDate: false,
101
+ }, tz);
102
+ return rebound.toJSDate().toISOString();
103
+ }
104
+ }
105
+ return time.toJSDate().toISOString();
106
+ }
107
+ function emitNonExpanded(component, isException, timezone) {
108
+ const base = buildBaseEvent(component);
109
+ const dtstart = component.getFirstPropertyValue("dtstart");
110
+ const dtend = component.getFirstPropertyValue("dtend");
111
+ if (!(dtstart instanceof ICAL.Time))
112
+ return [];
113
+ const allDay = dtstart.isDate;
114
+ const startIso = timeToEventIsoWithTz(dtstart, timezone);
115
+ const endIso = dtend instanceof ICAL.Time ? timeToEventIsoWithTz(dtend, timezone) : startIso;
116
+ let occDate = null;
117
+ if (isException) {
118
+ const recurId = component.getFirstPropertyValue("recurrence-id");
119
+ if (recurId instanceof ICAL.Time)
120
+ occDate = recurId.toJSDate().toISOString();
121
+ }
122
+ return [{ ...base, all_day: allDay, start: startIso, end: endIso, occurrence_date: occDate }];
123
+ }
124
+ function emitOccurrences(event, range, timezone) {
125
+ const out = [];
126
+ const rangeStart = ICAL.Time.fromJSDate(new Date(range.start), true);
127
+ const rangeEnd = ICAL.Time.fromJSDate(new Date(range.end), true);
128
+ const it = event.iterator();
129
+ // event.iterator().next() returns null/undefined when the series is exhausted
130
+ // (finite RRULEs with COUNT or UNTIL hit this branch). Range is half-open
131
+ // [start, end) per RFC 4791 §9.9 — an occurrence whose DTSTART equals
132
+ // range.end is excluded.
133
+ while (true) {
134
+ const next = it.next();
135
+ if (!next)
136
+ break;
137
+ if (next.compare(rangeEnd) >= 0)
138
+ break;
139
+ if (next.compare(rangeStart) < 0)
140
+ continue;
141
+ const details = event.getOccurrenceDetails(next);
142
+ const effective = details.item; // master or exception override
143
+ const base = buildBaseEvent(effective.component);
144
+ const allDay = details.startDate.isDate;
145
+ out.push({
146
+ ...base,
147
+ all_day: allDay,
148
+ start: timeToEventIsoWithTz(details.startDate, timezone),
149
+ end: timeToEventIsoWithTz(details.endDate, timezone),
150
+ // occurrence_date is the original RRULE-generated slot (RECURRENCE-ID).
151
+ // For ordinary occurrences this equals startDate; for exception overrides
152
+ // it is the original time the occurrence was supposed to fire, which is
153
+ // what consumers need to reconcile overrides back to the master series.
154
+ occurrence_date: timeToEventIsoWithTz(details.recurrenceId, timezone),
155
+ });
156
+ }
157
+ return out;
158
+ }
159
+ export function parseIcsEvents(icsContent, range, timezone) {
160
+ if (!icsContent.trim())
161
+ return [];
162
+ let root;
163
+ try {
164
+ root = ICAL.Component.fromString(icsContent);
165
+ }
166
+ catch (e) {
167
+ throw new IcsParseError("Invalid ICS content", e);
168
+ }
169
+ const veventComponents = root.getAllSubcomponents("vevent");
170
+ // Group by UID. Master events have no RECURRENCE-ID; exception VEVENTs do.
171
+ const groups = new Map();
172
+ for (const comp of veventComponents) {
173
+ // UID is REQUIRED by RFC 5545 §3.8.4.7 but real-world fixtures sometimes
174
+ // omit it (e.g. ical.js sample timezone_from_file.ics). Bucket UID-less
175
+ // VEVENTs under the empty string so they still surface to consumers
176
+ // rather than being silently dropped.
177
+ const rawUid = comp.getFirstPropertyValue("uid");
178
+ const uid = typeof rawUid === "string" ? rawUid : "";
179
+ let group = groups.get(uid);
180
+ if (!group) {
181
+ group = { master: null, exceptions: [] };
182
+ groups.set(uid, group);
183
+ }
184
+ if (comp.getFirstProperty("recurrence-id")) {
185
+ group.exceptions.push(comp);
186
+ }
187
+ else {
188
+ group.master = comp;
189
+ }
190
+ }
191
+ const out = [];
192
+ for (const [, group] of groups) {
193
+ if (!group.master) {
194
+ // Orphan exception VEVENTs (master not in this ICS) — emit each as standalone.
195
+ for (const ex of group.exceptions) {
196
+ out.push(...emitNonExpanded(ex, true, timezone));
197
+ }
198
+ continue;
199
+ }
200
+ let event;
201
+ try {
202
+ event = new ICAL.Event(group.master);
203
+ for (const ex of group.exceptions) {
204
+ event.relateException(new ICAL.Event(ex));
205
+ }
206
+ }
207
+ catch {
208
+ // If ICAL.Event construction fails for this group, skip it but don't fail the batch.
209
+ continue;
210
+ }
211
+ if (event.isRecurring() && range) {
212
+ out.push(...emitOccurrences(event, range, timezone));
213
+ }
214
+ else {
215
+ out.push(...emitNonExpanded(group.master, false, timezone));
216
+ for (const ex of group.exceptions) {
217
+ out.push(...emitNonExpanded(ex, true, timezone));
218
+ }
219
+ }
220
+ }
221
+ return out;
222
+ }
223
+ //# sourceMappingURL=parse-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-events.js","sourceRoot":"","sources":["../../src/ics/parse-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import "./_tz-init.js";
2
+ import type { ParsedJournal } from "./types.js";
3
+ export declare function parseIcsJournals(icsContent: string): ParsedJournal[];
4
+ //# sourceMappingURL=parse-journals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-journals.d.ts","sourceRoot":"","sources":["../../src/ics/parse-journals.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAWhD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE,CA2CpE"}
@@ -0,0 +1,54 @@
1
+ import ICAL from "ical.js";
2
+ import "./_tz-init.js";
3
+ import { parseCategories } from "./_shared.js";
4
+ import { IcsParseError } from "./errors.js";
5
+ function dateOnlyToString(t) {
6
+ // For VALUE=DATE properties, ical.js sets isDate=true and the JS Date is at midnight UTC.
7
+ // Emit YYYY-MM-DD without timezone interpretation.
8
+ const yr = t.year.toString().padStart(4, "0");
9
+ const mo = t.month.toString().padStart(2, "0");
10
+ const da = t.day.toString().padStart(2, "0");
11
+ return `${yr}-${mo}-${da}`;
12
+ }
13
+ export function parseIcsJournals(icsContent) {
14
+ if (!icsContent.trim())
15
+ return [];
16
+ let root;
17
+ try {
18
+ root = ICAL.Component.fromString(icsContent);
19
+ }
20
+ catch (e) {
21
+ throw new IcsParseError("Invalid ICS content", e);
22
+ }
23
+ const out = [];
24
+ for (const vjournal of root.getAllSubcomponents("vjournal")) {
25
+ try {
26
+ const dtstart = vjournal.getFirstPropertyValue("dtstart");
27
+ const status = vjournal.getFirstPropertyValue("status");
28
+ const created = vjournal.getFirstPropertyValue("created");
29
+ const lastModified = vjournal.getFirstPropertyValue("last-modified");
30
+ let dateStr = "";
31
+ if (dtstart instanceof ICAL.Time) {
32
+ dateStr = dtstart.isDate ? dateOnlyToString(dtstart) : dtstart.toJSDate().toISOString();
33
+ }
34
+ const rawUid = vjournal.getFirstPropertyValue("uid");
35
+ const rawSummary = vjournal.getFirstPropertyValue("summary");
36
+ const rawDescription = vjournal.getFirstPropertyValue("description");
37
+ out.push({
38
+ uid: typeof rawUid === "string" ? rawUid : "",
39
+ title: typeof rawSummary === "string" ? rawSummary : "",
40
+ date: dateStr,
41
+ description: typeof rawDescription === "string" ? rawDescription : null,
42
+ categories: parseCategories(vjournal),
43
+ status: typeof status === "string" ? status.toLowerCase() : null,
44
+ created: created instanceof ICAL.Time ? created.toJSDate().toISOString() : null,
45
+ last_modified: lastModified instanceof ICAL.Time ? lastModified.toJSDate().toISOString() : null,
46
+ });
47
+ }
48
+ catch {
49
+ // Skip malformed VJOURNAL, don't fail whole batch.
50
+ }
51
+ }
52
+ return out;
53
+ }
54
+ //# sourceMappingURL=parse-journals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-journals.js","sourceRoot":"","sources":["../../src/ics/parse-journals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import "./_tz-init.js";
2
+ import type { ParsedTodo } from "./types.js";
3
+ export declare function parseIcsTodos(icsContent: string): ParsedTodo[];
4
+ //# sourceMappingURL=parse-todos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-todos.d.ts","sourceRoot":"","sources":["../../src/ics/parse-todos.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAkD9D"}
@@ -0,0 +1,55 @@
1
+ import ICAL from "ical.js";
2
+ import "./_tz-init.js";
3
+ import { parseAlarms, parseAttendees, parseCategories, parseOrganizer } from "./_shared.js";
4
+ import { IcsParseError } from "./errors.js";
5
+ export function parseIcsTodos(icsContent) {
6
+ if (!icsContent.trim())
7
+ return [];
8
+ let root;
9
+ try {
10
+ root = ICAL.Component.fromString(icsContent);
11
+ }
12
+ catch (e) {
13
+ throw new IcsParseError("Invalid ICS content", e);
14
+ }
15
+ const out = [];
16
+ for (const vtodo of root.getAllSubcomponents("vtodo")) {
17
+ try {
18
+ const due = vtodo.getFirstPropertyValue("due");
19
+ const completed = vtodo.getFirstPropertyValue("completed");
20
+ const percent = vtodo.getFirstPropertyValue("percent-complete");
21
+ const priority = vtodo.getFirstPropertyValue("priority");
22
+ const status = vtodo.getFirstPropertyValue("status");
23
+ const created = vtodo.getFirstPropertyValue("created");
24
+ const lastModified = vtodo.getFirstPropertyValue("last-modified");
25
+ const rrule = vtodo.getFirstPropertyValue("rrule");
26
+ const recurId = vtodo.getFirstPropertyValue("recurrence-id");
27
+ const rawUid = vtodo.getFirstPropertyValue("uid");
28
+ const rawSummary = vtodo.getFirstPropertyValue("summary");
29
+ const rawDescription = vtodo.getFirstPropertyValue("description");
30
+ out.push({
31
+ uid: typeof rawUid === "string" ? rawUid : "",
32
+ title: typeof rawSummary === "string" ? rawSummary : "",
33
+ due: due instanceof ICAL.Time ? due.toJSDate().toISOString() : null,
34
+ completed: completed instanceof ICAL.Time ? completed.toJSDate().toISOString() : null,
35
+ percent_complete: typeof percent === "number" ? percent : null,
36
+ priority: typeof priority === "number" ? priority : null,
37
+ status: typeof status === "string" ? status.toLowerCase() : null,
38
+ description: typeof rawDescription === "string" ? rawDescription : null,
39
+ categories: parseCategories(vtodo),
40
+ attendees: parseAttendees(vtodo),
41
+ organizer: parseOrganizer(vtodo),
42
+ alarms: parseAlarms(vtodo),
43
+ recurrence_rule: rrule ? rrule.toString() : null,
44
+ created: created instanceof ICAL.Time ? created.toJSDate().toISOString() : null,
45
+ last_modified: lastModified instanceof ICAL.Time ? lastModified.toJSDate().toISOString() : null,
46
+ occurrence_date: recurId instanceof ICAL.Time ? recurId.toJSDate().toISOString() : null,
47
+ });
48
+ }
49
+ catch {
50
+ // Skip malformed VTODO, don't fail whole batch.
51
+ }
52
+ }
53
+ return out;
54
+ }
55
+ //# sourceMappingURL=parse-todos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-todos.js","sourceRoot":"","sources":["../../src/ics/parse-todos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function normalizeRecurrenceRule(rule: string): string | null;
2
+ //# sourceMappingURL=rrule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rrule.d.ts","sourceRoot":"","sources":["../../src/ics/rrule.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcnE"}
@@ -0,0 +1,23 @@
1
+ import ICAL from "ical.js";
2
+ export function normalizeRecurrenceRule(rule) {
3
+ if (typeof rule !== "string")
4
+ return null;
5
+ let trimmed = rule.trim();
6
+ if (!trimmed)
7
+ return null;
8
+ if (/^RRULE:/i.test(trimmed))
9
+ trimmed = trimmed.slice(6).trim();
10
+ if (/[\r\n]/.test(trimmed))
11
+ return null;
12
+ try {
13
+ const recur = ICAL.Recur.fromString(trimmed);
14
+ // Ensure it has a FREQ property to be valid
15
+ if (!recur.freq)
16
+ return null;
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ return trimmed;
22
+ }
23
+ //# sourceMappingURL=rrule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rrule.js","sourceRoot":"","sources":["../../src/ics/rrule.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,4CAA4C;QAC5C,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,100 @@
1
+ export interface ParsedAlarm {
2
+ type: "relative" | "absolute";
3
+ trigger: number | string;
4
+ trigger_human: string;
5
+ }
6
+ export interface ParsedAttendee {
7
+ name: string | null;
8
+ email: string;
9
+ status: string | null;
10
+ role: string | null;
11
+ type: string;
12
+ }
13
+ export interface ParsedOrganizer {
14
+ name: string | null;
15
+ email: string;
16
+ }
17
+ export interface ParsedGeo {
18
+ latitude: number;
19
+ longitude: number;
20
+ }
21
+ export interface ParsedEvent {
22
+ uid: string;
23
+ title: string;
24
+ start: string;
25
+ end: string;
26
+ all_day: boolean;
27
+ location: string | null;
28
+ description: string | null;
29
+ status: string | null;
30
+ availability: string | null;
31
+ url: string | null;
32
+ attendees: ParsedAttendee[];
33
+ categories: string[];
34
+ geo: ParsedGeo | null;
35
+ organizer: ParsedOrganizer | null;
36
+ recurrence_rule: string | null;
37
+ rdates: string[] | null;
38
+ created: string | null;
39
+ last_modified: string | null;
40
+ is_recurring: boolean;
41
+ alarms: ParsedAlarm[];
42
+ occurrence_date: string | null;
43
+ }
44
+ export interface ParsedTodo {
45
+ uid: string;
46
+ title: string;
47
+ due: string | null;
48
+ completed: string | null;
49
+ percent_complete: number | null;
50
+ priority: number | null;
51
+ status: string | null;
52
+ description: string | null;
53
+ categories: string[];
54
+ attendees: ParsedAttendee[];
55
+ organizer: ParsedOrganizer | null;
56
+ alarms: ParsedAlarm[];
57
+ recurrence_rule: string | null;
58
+ created: string | null;
59
+ last_modified: string | null;
60
+ occurrence_date: string | null;
61
+ }
62
+ export interface ParsedJournal {
63
+ uid: string;
64
+ title: string;
65
+ date: string;
66
+ description: string | null;
67
+ categories: string[];
68
+ status: string | null;
69
+ created: string | null;
70
+ last_modified: string | null;
71
+ }
72
+ export interface TimeRange {
73
+ start: string;
74
+ end: string;
75
+ }
76
+ export interface EventCreateProps {
77
+ title: string;
78
+ start: string;
79
+ end: string;
80
+ all_day?: boolean;
81
+ location?: string;
82
+ description?: string;
83
+ attendees?: Array<{
84
+ email: string;
85
+ }>;
86
+ uid?: string;
87
+ timezone?: string;
88
+ alarms?: Array<{
89
+ type: "relative" | "absolute";
90
+ trigger: number | string;
91
+ }>;
92
+ categories?: string[];
93
+ recurrence_rule?: string;
94
+ organizer?: {
95
+ email: string;
96
+ name?: string | null;
97
+ };
98
+ availability?: "busy" | "free";
99
+ }
100
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ics/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // packages/core/src/ics/types.ts
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ics/types.ts"],"names":[],"mappings":"AAAA,iCAAiC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { type CalDavAccount, type CalDavConfig, loadCalDavConfig, type CardDavConfig, loadCardDavConfig, type EmailConfig, loadEmailConfig, } from "./config.js";
2
2
  export { AuthenticationError, CalendarError, ConfigurationError, ConnectionError, ContactError, EmailError, ErrorCode, PimError, ValidationError, isRetryableError, toPimError, } from "./errors.js";
3
- export { type Contact, type TypedValue, type PostalAddress, buildVCard, parseVCard, } from "./vcard.js";
3
+ export { type Contact, type TypedValue, type PostalAddress, type SocialProfile, buildVCard, parseVCard, } from "./vcard.js";
4
4
  export { getTimezone, formatInTimezone, parseTimestamp, type ParsedTimestamp, } from "./timezone.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,gBAAgB,EAChB,KAAK,aAAa,EAClB,iBAAiB,EACjB,KAAK,WAAW,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,gBAAgB,EAChB,KAAK,aAAa,EAClB,iBAAiB,EACjB,KAAK,WAAW,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAEhB,iBAAiB,EAEjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EAIL,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,cAAc,GAEf,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAEhB,iBAAiB,EAEjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EAKL,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,cAAc,GAEf,MAAM,eAAe,CAAC"}
package/dist/vcard.d.ts CHANGED
@@ -10,6 +10,11 @@ export interface PostalAddress {
10
10
  postalCode?: string;
11
11
  country?: string;
12
12
  }
13
+ export interface SocialProfile {
14
+ type: string;
15
+ handle?: string;
16
+ url?: string;
17
+ }
13
18
  export interface Contact {
14
19
  uid: string;
15
20
  fullName: string;
@@ -26,8 +31,19 @@ export interface Contact {
26
31
  birthday?: string;
27
32
  categories?: string[];
28
33
  note?: string;
34
+ socialProfiles?: SocialProfile[];
29
35
  otherProperties: string[];
30
36
  }
37
+ /**
38
+ * Normalize a raw TYPE parameter value into a clean label.
39
+ * - Splits on comma or semicolon
40
+ * - Lowercases all tokens
41
+ * - Strips surrounding double-quote characters (from TYPE="internet" RFC 6868 form)
42
+ * - Drops noise tokens: internet, voice, pref
43
+ * - Joins remaining tokens with "/"
44
+ * Returns undefined when no meaningful token remains.
45
+ */
46
+ export declare function normalizeType(raw: string | undefined): string | undefined;
31
47
  export declare function parseVCard(data: string): Contact;
32
48
  export declare function buildVCard(contact: Contact): string;
33
49
  //# sourceMappingURL=vcard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vcard.d.ts","sourceRoot":"","sources":["../src/vcard.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAwEhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA6DnD"}
1
+ {"version":3,"file":"vcard.d.ts","sourceRoot":"","sources":["../src/vcard.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAuDD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQzE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA+EhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAsEnD"}