@miguelarios/pim-core 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/vcard.d.ts +16 -0
- package/dist/vcard.d.ts.map +1 -1
- package/dist/vcard.js +143 -20
- package/dist/vcard.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
package/dist/vcard.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/vcard.js
CHANGED
|
@@ -1,11 +1,85 @@
|
|
|
1
|
+
const TYPE_NOISE_TOKENS = new Set(["internet", "voice", "pref"]);
|
|
2
|
+
const APPLE_INTERNAL_PROPS = new Set([
|
|
3
|
+
"PRODID",
|
|
4
|
+
"REV",
|
|
5
|
+
"PHOTO",
|
|
6
|
+
"X-IMAGETYPE",
|
|
7
|
+
"X-IMAGEHASH",
|
|
8
|
+
"X-SHARED-PHOTO-DISPLAY-PREF",
|
|
9
|
+
"X-ADDRESSING-GRAMMAR",
|
|
10
|
+
"X-ABADR",
|
|
11
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* Strip Apple iOS "itemN." group prefix from a line.
|
|
14
|
+
* Returns both the canonical line and the group id (or undefined).
|
|
15
|
+
* "item1.ADR;type=HOME:..." -> { canonical: "ADR;type=HOME:...", group: "item1" }
|
|
16
|
+
* "EMAIL:foo@bar" -> { canonical: "EMAIL:foo@bar", group: undefined }
|
|
17
|
+
*/
|
|
18
|
+
function stripItemPrefix(line) {
|
|
19
|
+
const match = /^(item\d+)\.(.+)$/i.exec(line);
|
|
20
|
+
if (!match)
|
|
21
|
+
return { canonical: line, group: undefined };
|
|
22
|
+
return { canonical: match[2], group: match[1].toLowerCase() };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Decode an Apple X-ABLabel value.
|
|
26
|
+
* "_$!<HomePage>!$_" -> "homepage"
|
|
27
|
+
* "School" -> "school"
|
|
28
|
+
*/
|
|
29
|
+
function decodeABLabel(raw) {
|
|
30
|
+
const wrapped = /^_\$!<(.+)>!\$_$/.exec(raw.trim());
|
|
31
|
+
return (wrapped ? wrapped[1] : raw.trim()).toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build a map of group id (e.g. "item1") -> decoded X-ABLabel value.
|
|
35
|
+
*/
|
|
36
|
+
function buildAbLabelMap(lines) {
|
|
37
|
+
const map = new Map();
|
|
38
|
+
for (const rawLine of lines) {
|
|
39
|
+
const { canonical, group } = stripItemPrefix(rawLine);
|
|
40
|
+
if (!group)
|
|
41
|
+
continue;
|
|
42
|
+
const upper = canonical.toUpperCase();
|
|
43
|
+
if (!upper.startsWith("X-ABLABEL:") && !upper.startsWith("X-ABLABEL;"))
|
|
44
|
+
continue;
|
|
45
|
+
const colonIndex = canonical.indexOf(":");
|
|
46
|
+
if (colonIndex === -1)
|
|
47
|
+
continue;
|
|
48
|
+
const decoded = decodeABLabel(canonical.slice(colonIndex + 1));
|
|
49
|
+
if (decoded)
|
|
50
|
+
map.set(group, decoded);
|
|
51
|
+
}
|
|
52
|
+
return map;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Normalize a raw TYPE parameter value into a clean label.
|
|
56
|
+
* - Splits on comma or semicolon
|
|
57
|
+
* - Lowercases all tokens
|
|
58
|
+
* - Strips surrounding double-quote characters (from TYPE="internet" RFC 6868 form)
|
|
59
|
+
* - Drops noise tokens: internet, voice, pref
|
|
60
|
+
* - Joins remaining tokens with "/"
|
|
61
|
+
* Returns undefined when no meaningful token remains.
|
|
62
|
+
*/
|
|
63
|
+
export function normalizeType(raw) {
|
|
64
|
+
if (!raw)
|
|
65
|
+
return undefined;
|
|
66
|
+
const tokens = raw
|
|
67
|
+
.split(/[,;]/)
|
|
68
|
+
.map((tok) => tok.trim().replace(/^"|"$/g, "").toLowerCase())
|
|
69
|
+
.filter((tok) => tok.length > 0 && !TYPE_NOISE_TOKENS.has(tok));
|
|
70
|
+
if (tokens.length === 0)
|
|
71
|
+
return undefined;
|
|
72
|
+
return tokens.join("/");
|
|
73
|
+
}
|
|
1
74
|
export function parseVCard(data) {
|
|
2
75
|
const lines = unfoldLines(data);
|
|
76
|
+
const abLabels = buildAbLabelMap(lines);
|
|
3
77
|
const uid = extractFirst(lines, "UID") ?? "";
|
|
4
78
|
const fullName = extractFirst(lines, "FN") ?? "";
|
|
5
79
|
const n = extractFirst(lines, "N");
|
|
6
|
-
const emails = extractTypedAll(lines, "EMAIL");
|
|
7
|
-
const phones = extractTypedAll(lines, "TEL");
|
|
8
|
-
const urls = extractTypedAll(lines, "URL");
|
|
80
|
+
const emails = extractTypedAll(lines, "EMAIL", abLabels);
|
|
81
|
+
const phones = extractTypedAll(lines, "TEL", abLabels);
|
|
82
|
+
const urls = extractTypedAll(lines, "URL", abLabels);
|
|
9
83
|
const orgRaw = extractFirst(lines, "ORG");
|
|
10
84
|
const organization = orgRaw ? orgRaw.split(";")[0].trim() || undefined : undefined;
|
|
11
85
|
const title = extractFirst(lines, "TITLE");
|
|
@@ -15,6 +89,7 @@ export function parseVCard(data) {
|
|
|
15
89
|
const birthday = extractFirst(lines, "BDAY");
|
|
16
90
|
const categoriesRaw = extractFirst(lines, "CATEGORIES");
|
|
17
91
|
const categories = categoriesRaw ? categoriesRaw.split(",").map((c) => c.trim()) : undefined;
|
|
92
|
+
const socialProfiles = extractSocialProfiles(lines);
|
|
18
93
|
const KNOWN = new Set([
|
|
19
94
|
"BEGIN",
|
|
20
95
|
"END",
|
|
@@ -33,12 +108,17 @@ export function parseVCard(data) {
|
|
|
33
108
|
"NICKNAME",
|
|
34
109
|
"CATEGORIES",
|
|
35
110
|
"ROLE",
|
|
111
|
+
"X-ABLABEL",
|
|
112
|
+
"X-SOCIALPROFILE",
|
|
36
113
|
]);
|
|
37
114
|
const otherProperties = [];
|
|
38
|
-
for (const
|
|
115
|
+
for (const rawLine of lines) {
|
|
116
|
+
const { canonical: line } = stripItemPrefix(rawLine);
|
|
39
117
|
const propName = line.split(/[:;]/)[0].toUpperCase();
|
|
40
|
-
if (
|
|
41
|
-
|
|
118
|
+
if (KNOWN.has(propName) || APPLE_INTERNAL_PROPS.has(propName))
|
|
119
|
+
continue;
|
|
120
|
+
if (rawLine.trim()) {
|
|
121
|
+
otherProperties.push(rawLine);
|
|
42
122
|
}
|
|
43
123
|
}
|
|
44
124
|
let firstName;
|
|
@@ -55,7 +135,7 @@ export function parseVCard(data) {
|
|
|
55
135
|
lastName,
|
|
56
136
|
emails,
|
|
57
137
|
phones,
|
|
58
|
-
addresses: extractAddresses(lines),
|
|
138
|
+
addresses: extractAddresses(lines, abLabels),
|
|
59
139
|
urls,
|
|
60
140
|
organization,
|
|
61
141
|
title,
|
|
@@ -64,6 +144,7 @@ export function parseVCard(data) {
|
|
|
64
144
|
birthday,
|
|
65
145
|
categories,
|
|
66
146
|
note,
|
|
147
|
+
socialProfiles: socialProfiles.length > 0 ? socialProfiles : undefined,
|
|
67
148
|
otherProperties,
|
|
68
149
|
};
|
|
69
150
|
}
|
|
@@ -120,6 +201,16 @@ export function buildVCard(contact) {
|
|
|
120
201
|
if (contact.note) {
|
|
121
202
|
lines.push(`NOTE:${contact.note}`);
|
|
122
203
|
}
|
|
204
|
+
if (contact.socialProfiles) {
|
|
205
|
+
for (const sp of contact.socialProfiles) {
|
|
206
|
+
const parts = [`type=${sp.type}`];
|
|
207
|
+
if (sp.handle)
|
|
208
|
+
parts.push(`x-user=${sp.handle}`);
|
|
209
|
+
const params = parts.join(";");
|
|
210
|
+
const value = sp.url ?? (sp.handle ? `x-apple:${sp.handle}` : "");
|
|
211
|
+
lines.push(`X-SOCIALPROFILE;${params}:${value}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
123
214
|
for (const raw of contact.otherProperties) {
|
|
124
215
|
lines.push(raw);
|
|
125
216
|
}
|
|
@@ -135,7 +226,8 @@ function unfoldLines(data) {
|
|
|
135
226
|
}
|
|
136
227
|
/** Extract first matching property value (ignoring parameters like ;TYPE=HOME) */
|
|
137
228
|
function extractFirst(lines, property) {
|
|
138
|
-
for (const
|
|
229
|
+
for (const rawLine of lines) {
|
|
230
|
+
const { canonical: line } = stripItemPrefix(rawLine);
|
|
139
231
|
const upper = line.toUpperCase();
|
|
140
232
|
if (upper.startsWith(`${property}:`) || upper.startsWith(`${property};`)) {
|
|
141
233
|
const colonIndex = line.indexOf(":");
|
|
@@ -147,9 +239,10 @@ function extractFirst(lines, property) {
|
|
|
147
239
|
return undefined;
|
|
148
240
|
}
|
|
149
241
|
/** Extract all values for a property with optional TYPE parameter */
|
|
150
|
-
function extractTypedAll(lines, property) {
|
|
242
|
+
function extractTypedAll(lines, property, abLabels) {
|
|
151
243
|
const results = [];
|
|
152
|
-
for (const
|
|
244
|
+
for (const rawLine of lines) {
|
|
245
|
+
const { canonical: line, group } = stripItemPrefix(rawLine);
|
|
153
246
|
const upper = line.toUpperCase();
|
|
154
247
|
if (upper.startsWith(`${property}:`) || upper.startsWith(`${property};`)) {
|
|
155
248
|
const colonIndex = line.indexOf(":");
|
|
@@ -157,20 +250,22 @@ function extractTypedAll(lines, property) {
|
|
|
157
250
|
continue;
|
|
158
251
|
const value = line.slice(colonIndex + 1).trim();
|
|
159
252
|
const paramSection = line.slice(property.length, colonIndex);
|
|
160
|
-
const
|
|
161
|
-
for (const match of paramSection.matchAll(/TYPE=([
|
|
162
|
-
|
|
253
|
+
const typeMatches = [];
|
|
254
|
+
for (const match of paramSection.matchAll(/TYPE=([^;:]+)/gi)) {
|
|
255
|
+
typeMatches.push(match[1]);
|
|
163
256
|
}
|
|
164
|
-
const
|
|
257
|
+
const labelOverride = group ? abLabels.get(group) : undefined;
|
|
258
|
+
const type = labelOverride ?? normalizeType(typeMatches.join(","));
|
|
165
259
|
results.push(type ? { type, value } : { value });
|
|
166
260
|
}
|
|
167
261
|
}
|
|
168
262
|
return results;
|
|
169
263
|
}
|
|
170
264
|
/** Extract ADR lines into PostalAddress objects */
|
|
171
|
-
function extractAddresses(lines) {
|
|
265
|
+
function extractAddresses(lines, abLabels) {
|
|
172
266
|
const results = [];
|
|
173
|
-
for (const
|
|
267
|
+
for (const rawLine of lines) {
|
|
268
|
+
const { canonical: line, group } = stripItemPrefix(rawLine);
|
|
174
269
|
const upper = line.toUpperCase();
|
|
175
270
|
if (!upper.startsWith("ADR:") && !upper.startsWith("ADR;"))
|
|
176
271
|
continue;
|
|
@@ -178,11 +273,12 @@ function extractAddresses(lines) {
|
|
|
178
273
|
if (colonIndex === -1)
|
|
179
274
|
continue;
|
|
180
275
|
const paramSection = line.slice(3, colonIndex);
|
|
181
|
-
const
|
|
182
|
-
for (const match of paramSection.matchAll(/TYPE=([
|
|
183
|
-
|
|
276
|
+
const typeMatches = [];
|
|
277
|
+
for (const match of paramSection.matchAll(/TYPE=([^;:]+)/gi)) {
|
|
278
|
+
typeMatches.push(match[1]);
|
|
184
279
|
}
|
|
185
|
-
const
|
|
280
|
+
const labelOverride = group ? abLabels.get(group) : undefined;
|
|
281
|
+
const type = labelOverride ?? normalizeType(typeMatches.join(","));
|
|
186
282
|
const parts = line.slice(colonIndex + 1).split(";");
|
|
187
283
|
const streetParts = [parts[0], parts[1], parts[2]].filter(Boolean);
|
|
188
284
|
const street = streetParts.join(", ") || undefined;
|
|
@@ -207,4 +303,31 @@ function extractAddresses(lines) {
|
|
|
207
303
|
}
|
|
208
304
|
return results;
|
|
209
305
|
}
|
|
306
|
+
/** Extract X-SOCIALPROFILE lines into SocialProfile objects */
|
|
307
|
+
function extractSocialProfiles(lines) {
|
|
308
|
+
const results = [];
|
|
309
|
+
for (const rawLine of lines) {
|
|
310
|
+
const { canonical: line } = stripItemPrefix(rawLine);
|
|
311
|
+
const upper = line.toUpperCase();
|
|
312
|
+
if (!upper.startsWith("X-SOCIALPROFILE;") && !upper.startsWith("X-SOCIALPROFILE:"))
|
|
313
|
+
continue;
|
|
314
|
+
const colonIndex = line.indexOf(":");
|
|
315
|
+
if (colonIndex === -1)
|
|
316
|
+
continue;
|
|
317
|
+
const paramSection = line.slice("X-SOCIALPROFILE".length, colonIndex);
|
|
318
|
+
const value = line.slice(colonIndex + 1).trim();
|
|
319
|
+
const typeMatch = /type=([^;:]+)/i.exec(paramSection);
|
|
320
|
+
const userMatch = /x-user=([^;:]+)/i.exec(paramSection);
|
|
321
|
+
const type = typeMatch ? typeMatch[1].trim().toLowerCase() : "";
|
|
322
|
+
if (!type)
|
|
323
|
+
continue;
|
|
324
|
+
const profile = { type };
|
|
325
|
+
if (userMatch)
|
|
326
|
+
profile.handle = userMatch[1].trim();
|
|
327
|
+
if (value && !/^x-apple:/i.test(value))
|
|
328
|
+
profile.url = value;
|
|
329
|
+
results.push(profile);
|
|
330
|
+
}
|
|
331
|
+
return results;
|
|
332
|
+
}
|
|
210
333
|
//# sourceMappingURL=vcard.js.map
|
package/dist/vcard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcard.js","sourceRoot":"","sources":["../src/vcard.ts"],"names":[],"mappings":"AAiCA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7F,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;QACpB,OAAO;QACP,KAAK;QACL,SAAS;QACT,KAAK;QACL,IAAI;QACJ,GAAG;QACH,OAAO;QACP,KAAK;QACL,KAAK;QACL,OAAO;QACP,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,UAAU;QACV,YAAY;QACZ,MAAM;KACP,CAAC,CAAC;IACH,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,SAA6B,CAAC;IAClC,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACjC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IACpC,CAAC;IAED,OAAO;QACL,GAAG;QACH,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM;QACN,MAAM;QACN,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC;QAClC,IAAI;QACJ,YAAY;QACZ,KAAK;QACL,IAAI;QACJ,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,IAAI;QACJ,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,KAAK,GAAa;QACtB,aAAa;QACb,aAAa;QACb,OAAO,OAAO,CAAC,GAAG,EAAE;QACpB,MAAM,OAAO,CAAC,QAAQ,EAAE;KACzB,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG;YACZ,EAAE;YACF,EAAE;YACF,IAAI,CAAC,MAAM,IAAI,EAAE;YACjB,IAAI,CAAC,IAAI,IAAI,EAAE;YACf,IAAI,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC,UAAU,IAAI,EAAE;YACrB,IAAI,CAAC,OAAO,IAAI,EAAE;SACnB,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,6CAA6C;AAC7C,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,OAAO,CAAC,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,SAAS,YAAY,CAAC,KAAe,EAAE,QAAgB;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qEAAqE;AACrE,SAAS,eAAe,CAAC,KAAe,EAAE,QAAgB;IACxD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,CAAC,CAAC;gBAAE,SAAS;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mDAAmD;AACnD,SAAS,gBAAgB,CAAC,KAAe;IACvC,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAS;QAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAEtC,MAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACjC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3B,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,IAAI,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7C,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"vcard.js","sourceRoot":"","sources":["../src/vcard.ts"],"names":[],"mappings":"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"}
|