@pipobscure/vcard 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.
- package/LICENSE +190 -0
- package/README.md +1079 -0
- package/dist/escape.d.ts +59 -0
- package/dist/escape.d.ts.map +1 -0
- package/dist/escape.js +136 -0
- package/dist/escape.js.map +1 -0
- package/dist/generator.d.ts +49 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +194 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +54 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +381 -0
- package/dist/parser.js.map +1 -0
- package/dist/property.d.ts +347 -0
- package/dist/property.d.ts.map +1 -0
- package/dist/property.js +854 -0
- package/dist/property.js.map +1 -0
- package/dist/tests/edgecases.test.d.ts +10 -0
- package/dist/tests/edgecases.test.d.ts.map +1 -0
- package/dist/tests/edgecases.test.js +950 -0
- package/dist/tests/edgecases.test.js.map +1 -0
- package/dist/tests/vcard.test.d.ts +6 -0
- package/dist/tests/vcard.test.d.ts.map +1 -0
- package/dist/tests/vcard.test.js +496 -0
- package/dist/tests/vcard.test.js.map +1 -0
- package/dist/types.d.ts +94 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/vcard.d.ts +177 -0
- package/dist/vcard.d.ts.map +1 -0
- package/dist/vcard.js +424 -0
- package/dist/vcard.js.map +1 -0
- package/package.json +39 -0
package/dist/vcard.js
ADDED
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VCard — the main vCard v4 container class (RFC 6350)
|
|
3
|
+
*
|
|
4
|
+
* Provides typed access to all RFC 6350 properties, plus methods for
|
|
5
|
+
* parsing and generating vCard text.
|
|
6
|
+
*/
|
|
7
|
+
import { VCardError, FNProperty, } from './property.js';
|
|
8
|
+
import { parseVCardText } from './parser.js';
|
|
9
|
+
import { serializeVCard } from './generator.js';
|
|
10
|
+
// ── VCard class ────────────────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* A vCard v4 object.
|
|
13
|
+
*
|
|
14
|
+
* Properties with cardinality `1*` are arrays that must have at least one
|
|
15
|
+
* element before generating. Properties with cardinality `*1` are single
|
|
16
|
+
* optional values. Properties with cardinality `*` are arrays.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* ```ts
|
|
20
|
+
* // Parse
|
|
21
|
+
* const [vcard] = VCard.parse(text);
|
|
22
|
+
*
|
|
23
|
+
* // Build
|
|
24
|
+
* const vcard = new VCard();
|
|
25
|
+
* vcard.fn.push(new FNProperty('Alice Example'));
|
|
26
|
+
* vcard.email.push(new EmailProperty('alice@example.com'));
|
|
27
|
+
* console.log(vcard.toString());
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export class VCard {
|
|
31
|
+
// ── Parsed version ─────────────────────────────────────────────────────
|
|
32
|
+
/** vCard version string (from parsing — always '4.0' when generating) */
|
|
33
|
+
parsedVersion = '4.0';
|
|
34
|
+
/** Warnings accumulated during parsing */
|
|
35
|
+
parseWarnings = [];
|
|
36
|
+
// ── Required: cardinality 1* ────────────────────────────────────────────
|
|
37
|
+
/** Formatted Name — required, at least one (RFC 6350 §6.2.1) */
|
|
38
|
+
fn = [];
|
|
39
|
+
// ── Optional singular: cardinality *1 ──────────────────────────────────
|
|
40
|
+
/** Structured Name (RFC 6350 §6.2.2) */
|
|
41
|
+
n;
|
|
42
|
+
/** Birthday (RFC 6350 §6.2.5) */
|
|
43
|
+
bday;
|
|
44
|
+
/** Anniversary (RFC 6350 §6.2.6) */
|
|
45
|
+
anniversary;
|
|
46
|
+
/** Gender (RFC 6350 §6.2.7) */
|
|
47
|
+
gender;
|
|
48
|
+
/** Product Identifier (RFC 6350 §6.7.3) */
|
|
49
|
+
prodid;
|
|
50
|
+
/** Revision timestamp (RFC 6350 §6.7.4) */
|
|
51
|
+
rev;
|
|
52
|
+
/** Unique Identifier (RFC 6350 §6.7.6) */
|
|
53
|
+
uid;
|
|
54
|
+
/** Kind (RFC 6350 §6.1.4) */
|
|
55
|
+
kind;
|
|
56
|
+
// ── Optional multiple: cardinality * ───────────────────────────────────
|
|
57
|
+
/** Nicknames (RFC 6350 §6.2.3) */
|
|
58
|
+
nickname = [];
|
|
59
|
+
/** Photos (RFC 6350 §6.2.4) */
|
|
60
|
+
photo = [];
|
|
61
|
+
/** Addresses (RFC 6350 §6.3.1) */
|
|
62
|
+
adr = [];
|
|
63
|
+
/** Telephone numbers (RFC 6350 §6.4.1) */
|
|
64
|
+
tel = [];
|
|
65
|
+
/** Email addresses (RFC 6350 §6.4.2) */
|
|
66
|
+
email = [];
|
|
67
|
+
/** Instant Messaging (RFC 6350 §6.4.3) */
|
|
68
|
+
impp = [];
|
|
69
|
+
/** Languages (RFC 6350 §6.4.4) */
|
|
70
|
+
lang = [];
|
|
71
|
+
/** Time zones (RFC 6350 §6.5.1) */
|
|
72
|
+
tz = [];
|
|
73
|
+
/** Geographic positions (RFC 6350 §6.5.2) */
|
|
74
|
+
geo = [];
|
|
75
|
+
/** Titles (RFC 6350 §6.6.1) */
|
|
76
|
+
title = [];
|
|
77
|
+
/** Roles (RFC 6350 §6.6.2) */
|
|
78
|
+
role = [];
|
|
79
|
+
/** Logos (RFC 6350 §6.6.3) */
|
|
80
|
+
logo = [];
|
|
81
|
+
/** Organizations (RFC 6350 §6.6.4) */
|
|
82
|
+
org = [];
|
|
83
|
+
/** Group members (RFC 6350 §6.6.5) */
|
|
84
|
+
member = [];
|
|
85
|
+
/** Related entities (RFC 6350 §6.6.6) */
|
|
86
|
+
related = [];
|
|
87
|
+
/** Categories (RFC 6350 §6.7.1) */
|
|
88
|
+
categories = [];
|
|
89
|
+
/** Notes (RFC 6350 §6.7.2) */
|
|
90
|
+
note = [];
|
|
91
|
+
/** Sounds (RFC 6350 §6.7.5) */
|
|
92
|
+
sound = [];
|
|
93
|
+
/** Client PID maps (RFC 6350 §6.7.7) */
|
|
94
|
+
clientpidmap = [];
|
|
95
|
+
/** URLs (RFC 6350 §6.7.8) */
|
|
96
|
+
url = [];
|
|
97
|
+
/** Public keys (RFC 6350 §6.8.1) */
|
|
98
|
+
key = [];
|
|
99
|
+
/** Free/Busy URLs (RFC 6350 §6.9.1) */
|
|
100
|
+
fburl = [];
|
|
101
|
+
/** Calendar User Address URIs (RFC 6350 §6.9.2) */
|
|
102
|
+
caladruri = [];
|
|
103
|
+
/** Calendar URIs (RFC 6350 §6.9.3) */
|
|
104
|
+
caluri = [];
|
|
105
|
+
/** Source URIs (RFC 6350 §6.1.3) */
|
|
106
|
+
source = [];
|
|
107
|
+
/** XML properties (RFC 6350 §6.1.5) */
|
|
108
|
+
xml = [];
|
|
109
|
+
/** Unknown / extended / vendor properties (stored for round-tripping) */
|
|
110
|
+
extended = [];
|
|
111
|
+
// ── Factory methods ─────────────────────────────────────────────────────
|
|
112
|
+
/**
|
|
113
|
+
* Parse one or more vCards from text.
|
|
114
|
+
* Tolerant: never throws, collects warnings instead.
|
|
115
|
+
*
|
|
116
|
+
* @returns Array of VCard instances (may be empty if input has no vCards)
|
|
117
|
+
*/
|
|
118
|
+
static parse(text) {
|
|
119
|
+
const { rawVCards } = parseVCardText(text);
|
|
120
|
+
return rawVCards.map(raw => VCard.fromRaw(raw.properties, raw.warnings, raw.version));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parse exactly one vCard from text.
|
|
124
|
+
* @throws Error if zero vCards are found
|
|
125
|
+
*/
|
|
126
|
+
static parseOne(text) {
|
|
127
|
+
const vcards = VCard.parse(text);
|
|
128
|
+
if (vcards.length === 0)
|
|
129
|
+
throw new Error('No vCard found in input');
|
|
130
|
+
return vcards[0];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Quick-create a vCard with just a formatted name.
|
|
134
|
+
* Useful for programmatic construction.
|
|
135
|
+
*/
|
|
136
|
+
static create(fn) {
|
|
137
|
+
const vc = new VCard();
|
|
138
|
+
vc.fn.push(new FNProperty(fn));
|
|
139
|
+
return vc;
|
|
140
|
+
}
|
|
141
|
+
/** Construct a VCard from a flat list of Property instances */
|
|
142
|
+
static fromRaw(properties, warnings, version) {
|
|
143
|
+
const vc = new VCard();
|
|
144
|
+
vc.parsedVersion = version;
|
|
145
|
+
vc.parseWarnings = warnings;
|
|
146
|
+
for (const prop of properties) {
|
|
147
|
+
vc.addProperty(prop);
|
|
148
|
+
}
|
|
149
|
+
return vc;
|
|
150
|
+
}
|
|
151
|
+
// ── Property management ─────────────────────────────────────────────────
|
|
152
|
+
/**
|
|
153
|
+
* Add a property to this vCard, routing it to the appropriate typed field.
|
|
154
|
+
* Unknown properties go to `extended`.
|
|
155
|
+
*/
|
|
156
|
+
addProperty(prop) {
|
|
157
|
+
switch (prop.name) {
|
|
158
|
+
case 'FN':
|
|
159
|
+
this.fn.push(prop);
|
|
160
|
+
break;
|
|
161
|
+
case 'N':
|
|
162
|
+
this.n = prop;
|
|
163
|
+
break;
|
|
164
|
+
case 'NICKNAME':
|
|
165
|
+
this.nickname.push(prop);
|
|
166
|
+
break;
|
|
167
|
+
case 'PHOTO':
|
|
168
|
+
this.photo.push(prop);
|
|
169
|
+
break;
|
|
170
|
+
case 'BDAY':
|
|
171
|
+
this.bday = prop;
|
|
172
|
+
break;
|
|
173
|
+
case 'ANNIVERSARY':
|
|
174
|
+
this.anniversary = prop;
|
|
175
|
+
break;
|
|
176
|
+
case 'GENDER':
|
|
177
|
+
this.gender = prop;
|
|
178
|
+
break;
|
|
179
|
+
case 'ADR':
|
|
180
|
+
this.adr.push(prop);
|
|
181
|
+
break;
|
|
182
|
+
case 'TEL':
|
|
183
|
+
this.tel.push(prop);
|
|
184
|
+
break;
|
|
185
|
+
case 'EMAIL':
|
|
186
|
+
this.email.push(prop);
|
|
187
|
+
break;
|
|
188
|
+
case 'IMPP':
|
|
189
|
+
this.impp.push(prop);
|
|
190
|
+
break;
|
|
191
|
+
case 'LANG':
|
|
192
|
+
this.lang.push(prop);
|
|
193
|
+
break;
|
|
194
|
+
case 'TZ':
|
|
195
|
+
this.tz.push(prop);
|
|
196
|
+
break;
|
|
197
|
+
case 'GEO':
|
|
198
|
+
this.geo.push(prop);
|
|
199
|
+
break;
|
|
200
|
+
case 'TITLE':
|
|
201
|
+
this.title.push(prop);
|
|
202
|
+
break;
|
|
203
|
+
case 'ROLE':
|
|
204
|
+
this.role.push(prop);
|
|
205
|
+
break;
|
|
206
|
+
case 'LOGO':
|
|
207
|
+
this.logo.push(prop);
|
|
208
|
+
break;
|
|
209
|
+
case 'ORG':
|
|
210
|
+
this.org.push(prop);
|
|
211
|
+
break;
|
|
212
|
+
case 'MEMBER':
|
|
213
|
+
this.member.push(prop);
|
|
214
|
+
break;
|
|
215
|
+
case 'RELATED':
|
|
216
|
+
this.related.push(prop);
|
|
217
|
+
break;
|
|
218
|
+
case 'CATEGORIES':
|
|
219
|
+
this.categories.push(prop);
|
|
220
|
+
break;
|
|
221
|
+
case 'NOTE':
|
|
222
|
+
this.note.push(prop);
|
|
223
|
+
break;
|
|
224
|
+
case 'PRODID':
|
|
225
|
+
this.prodid = prop;
|
|
226
|
+
break;
|
|
227
|
+
case 'REV':
|
|
228
|
+
this.rev = prop;
|
|
229
|
+
break;
|
|
230
|
+
case 'SOUND':
|
|
231
|
+
this.sound.push(prop);
|
|
232
|
+
break;
|
|
233
|
+
case 'UID':
|
|
234
|
+
this.uid = prop;
|
|
235
|
+
break;
|
|
236
|
+
case 'CLIENTPIDMAP':
|
|
237
|
+
this.clientpidmap.push(prop);
|
|
238
|
+
break;
|
|
239
|
+
case 'URL':
|
|
240
|
+
this.url.push(prop);
|
|
241
|
+
break;
|
|
242
|
+
case 'KEY':
|
|
243
|
+
this.key.push(prop);
|
|
244
|
+
break;
|
|
245
|
+
case 'FBURL':
|
|
246
|
+
this.fburl.push(prop);
|
|
247
|
+
break;
|
|
248
|
+
case 'CALADRURI':
|
|
249
|
+
this.caladruri.push(prop);
|
|
250
|
+
break;
|
|
251
|
+
case 'CALURI':
|
|
252
|
+
this.caluri.push(prop);
|
|
253
|
+
break;
|
|
254
|
+
case 'KIND':
|
|
255
|
+
this.kind = prop;
|
|
256
|
+
break;
|
|
257
|
+
case 'XML':
|
|
258
|
+
this.xml.push(prop);
|
|
259
|
+
break;
|
|
260
|
+
case 'SOURCE':
|
|
261
|
+
this.source.push(prop);
|
|
262
|
+
break;
|
|
263
|
+
default:
|
|
264
|
+
this.extended.push(prop);
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get all properties as a flat array, in logical order.
|
|
270
|
+
* Includes all typed properties and extended properties.
|
|
271
|
+
*/
|
|
272
|
+
allProperties() {
|
|
273
|
+
const all = [];
|
|
274
|
+
// Singular optional
|
|
275
|
+
const addOpt = (p) => { if (p)
|
|
276
|
+
all.push(p); };
|
|
277
|
+
// Multiple
|
|
278
|
+
const addMany = (arr) => all.push(...arr);
|
|
279
|
+
addMany(this.fn);
|
|
280
|
+
addOpt(this.n);
|
|
281
|
+
addMany(this.nickname);
|
|
282
|
+
addMany(this.photo);
|
|
283
|
+
addOpt(this.bday);
|
|
284
|
+
addOpt(this.anniversary);
|
|
285
|
+
addOpt(this.gender);
|
|
286
|
+
addMany(this.adr);
|
|
287
|
+
addMany(this.tel);
|
|
288
|
+
addMany(this.email);
|
|
289
|
+
addMany(this.impp);
|
|
290
|
+
addMany(this.lang);
|
|
291
|
+
addMany(this.tz);
|
|
292
|
+
addMany(this.geo);
|
|
293
|
+
addMany(this.title);
|
|
294
|
+
addMany(this.role);
|
|
295
|
+
addMany(this.logo);
|
|
296
|
+
addMany(this.org);
|
|
297
|
+
addMany(this.member);
|
|
298
|
+
addMany(this.related);
|
|
299
|
+
addMany(this.categories);
|
|
300
|
+
addMany(this.note);
|
|
301
|
+
addOpt(this.prodid);
|
|
302
|
+
addOpt(this.rev);
|
|
303
|
+
addMany(this.sound);
|
|
304
|
+
addOpt(this.uid);
|
|
305
|
+
addMany(this.clientpidmap);
|
|
306
|
+
addMany(this.url);
|
|
307
|
+
addMany(this.key);
|
|
308
|
+
addMany(this.fburl);
|
|
309
|
+
addMany(this.caladruri);
|
|
310
|
+
addMany(this.caluri);
|
|
311
|
+
addOpt(this.kind);
|
|
312
|
+
addMany(this.xml);
|
|
313
|
+
addMany(this.source);
|
|
314
|
+
addMany(this.extended);
|
|
315
|
+
return all;
|
|
316
|
+
}
|
|
317
|
+
// ── Convenience accessors ───────────────────────────────────────────────
|
|
318
|
+
/**
|
|
319
|
+
* Get the primary (most preferred or first) formatted name string.
|
|
320
|
+
*/
|
|
321
|
+
get displayName() {
|
|
322
|
+
const sorted = [...this.fn].sort((a, b) => (a.pref ?? 100) - (b.pref ?? 100));
|
|
323
|
+
return sorted[0]?.value ?? '';
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Get the primary email address string.
|
|
327
|
+
*/
|
|
328
|
+
get primaryEmail() {
|
|
329
|
+
const sorted = [...this.email].sort((a, b) => (a.pref ?? 100) - (b.pref ?? 100));
|
|
330
|
+
return sorted[0]?.value;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Get the primary telephone string.
|
|
334
|
+
*/
|
|
335
|
+
get primaryTel() {
|
|
336
|
+
const sorted = [...this.tel].sort((a, b) => (a.pref ?? 100) - (b.pref ?? 100));
|
|
337
|
+
return sorted[0]?.value;
|
|
338
|
+
}
|
|
339
|
+
// ── Generation ──────────────────────────────────────────────────────────
|
|
340
|
+
/**
|
|
341
|
+
* Generate RFC 6350-compliant vCard text.
|
|
342
|
+
* Uses strict CRLF line endings and 75-octet line folding.
|
|
343
|
+
*
|
|
344
|
+
* @throws VCardError if the vCard is invalid (e.g. missing FN)
|
|
345
|
+
*/
|
|
346
|
+
toString(options) {
|
|
347
|
+
return serializeVCard(this.allProperties(), options);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Generate without validation (useful for partial/draft vCards).
|
|
351
|
+
* Use with caution — output may not be RFC-compliant.
|
|
352
|
+
*/
|
|
353
|
+
toStringLenient() {
|
|
354
|
+
return serializeVCard(this.allProperties(), { validate: false });
|
|
355
|
+
}
|
|
356
|
+
// ── Validation ──────────────────────────────────────────────────────────
|
|
357
|
+
/**
|
|
358
|
+
* Validate this vCard against RFC 6350 requirements.
|
|
359
|
+
* Returns a result object rather than throwing.
|
|
360
|
+
*/
|
|
361
|
+
validate() {
|
|
362
|
+
const errors = [];
|
|
363
|
+
if (this.fn.length === 0) {
|
|
364
|
+
errors.push({ property: 'FN', message: 'Missing required property: FN (cardinality 1*)' });
|
|
365
|
+
}
|
|
366
|
+
for (const prop of this.allProperties()) {
|
|
367
|
+
const pref = prop.pref;
|
|
368
|
+
if (pref !== undefined && (pref < 1 || pref > 100 || !Number.isInteger(pref))) {
|
|
369
|
+
errors.push({
|
|
370
|
+
property: prop.name,
|
|
371
|
+
message: `PREF parameter must be an integer 1–100, got: ${pref}`,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
if (this.gender) {
|
|
376
|
+
const valid = ['M', 'F', 'O', 'N', 'U', ''];
|
|
377
|
+
if (!valid.includes(this.gender.value.sex)) {
|
|
378
|
+
errors.push({
|
|
379
|
+
property: 'GENDER',
|
|
380
|
+
message: `Invalid sex component: ${this.gender.value.sex}`,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return { valid: errors.length === 0, errors };
|
|
385
|
+
}
|
|
386
|
+
// ── Cloning ─────────────────────────────────────────────────────────────
|
|
387
|
+
/**
|
|
388
|
+
* Deep-clone by round-tripping through text serialization.
|
|
389
|
+
* Produces a clean v4 vCard from whatever version was parsed.
|
|
390
|
+
*/
|
|
391
|
+
clone() {
|
|
392
|
+
return VCard.parseOne(this.toString({ validate: false }));
|
|
393
|
+
}
|
|
394
|
+
// ── JSON ────────────────────────────────────────────────────────────────
|
|
395
|
+
/**
|
|
396
|
+
* Convert to a plain object suitable for JSON serialization (jCard-ish).
|
|
397
|
+
* This is a simplified representation, not full jCard (RFC 7095).
|
|
398
|
+
*/
|
|
399
|
+
toJSON() {
|
|
400
|
+
return {
|
|
401
|
+
version: '4.0',
|
|
402
|
+
fn: this.fn.map(p => p.value),
|
|
403
|
+
n: this.n ? this.n.value : undefined,
|
|
404
|
+
nickname: this.nickname.flatMap(p => p.values),
|
|
405
|
+
email: this.email.map(p => ({ value: p.value, type: p.type, pref: p.pref })),
|
|
406
|
+
tel: this.tel.map(p => ({ value: p.value, type: p.type, pref: p.pref })),
|
|
407
|
+
adr: this.adr.map(p => ({ value: p.value, type: p.type, label: p.label })),
|
|
408
|
+
org: this.org.map(p => p.value),
|
|
409
|
+
title: this.title.map(p => p.value),
|
|
410
|
+
role: this.role.map(p => p.value),
|
|
411
|
+
url: this.url.map(p => p.value),
|
|
412
|
+
note: this.note.map(p => p.value),
|
|
413
|
+
categories: this.categories.flatMap(p => p.values),
|
|
414
|
+
bday: this.bday?.dateValue ?? this.bday?.textValue,
|
|
415
|
+
anniversary: this.anniversary?.dateValue ?? this.anniversary?.textValue,
|
|
416
|
+
gender: this.gender?.value,
|
|
417
|
+
uid: this.uid?.value,
|
|
418
|
+
rev: this.rev?.value instanceof Date ? this.rev.value.toISOString() : this.rev?.value,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// Re-export VCardError for convenience
|
|
423
|
+
export { VCardError };
|
|
424
|
+
//# sourceMappingURL=vcard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcard.js","sourceRoot":"","sources":["../src/vcard.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pipobscure/vcard",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "A fully featured and compliant vCard v4 (RFC 6350) library for parsing and generating vCard data, designed for use with CardDAV",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"typecheck": "tsc --noEmit",
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"build:watch": "tsc --watch",
|
|
21
|
+
"test": "node --test dist/tests/*.js",
|
|
22
|
+
"test:src": "npx tsx --test src/tests/*.test.ts",
|
|
23
|
+
"prepublishOnly": "npm run build",
|
|
24
|
+
"postversion": "git push --follow-tags"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"vcard",
|
|
28
|
+
"vcard4",
|
|
29
|
+
"carddav",
|
|
30
|
+
"contacts",
|
|
31
|
+
"rfc6350"
|
|
32
|
+
],
|
|
33
|
+
"author": "pipobscure",
|
|
34
|
+
"license": "EUPL-1.2",
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^25.3.0",
|
|
37
|
+
"typescript": "^5.7.0"
|
|
38
|
+
}
|
|
39
|
+
}
|