@vcard/vcard4-generator v0.1.0-beta.1
@vcard/vcard4-generator
A library for generating v4 vCards
Heads Up!
This is still very much a WIP project and is not feature complete.
Install
npm install @vcard/vcard4-generatorUsage
import Vcard4Generator, { Vcard4GeneratorConfig } from '@vcard/vcard4-generator';
const config: Vcard4GeneratorConfig = {
    fn: 'Captain Awesome',
    email: 'hello@example.com',
    url: 'http://www.example.com/'
};
const vcard = new Vcard4Generator(config);
vcard.toString();
// >> BEGIN:VCARD
// >> VERSION:4.0
// >> EMAIL:hello@example.com
// >> FN:Captain Awesome
// >> URL:http://www.example.com/
// >> END:VCARDBuilding
From the monorepo root:
npx lerna --scope @vcard/vcard4-generator run buildTesting
From the monorepo root:
npm testTo-Do
- Properties- ADR- Line Folding
- Value Escaping
- VALUEParameter
- LABELParameter
- LANGUAGEParameter
- GEOParameter
- TZParameter
- ALTIDParameter
- PIDParameter
- PREFParameter
- TYPEParameter
 
- ANNIVERSARY- Line Folding
- Value Escaping
- VALUEParameter
- ALTIDParameter
- CALSCALEParameter (for- date-and-or-timetype only)
 
- BDAY- Line Folding
- Value Escaping
- VALUEParameter
- ALTIDParameter
- CALSCALEParameter (for- date-and-or-timetype only)
- LANGUAGEParameter (for- texttype only)
 
- BEGIN- No Parameters
 
- BIRTHPLACE(RFC6474)- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
 
- CALADRURI- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- CALURI- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- CATEGORIES- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- ALTIDParameter
- Implement Constructor ArrayArgument Support
 
- CLIENTPIDMAP- Line Folding
- Value Escaping
- No Parameters
- No VALUEParameter
- Implement Constructor ArrayArgument Support
 
- CONTACT-URI(RFC8605)- Line Folding
- Value Escaping
- VALUEParameter
- PREFParameter
 
- DEATHDATE(RFC6474)- Line Folding
- Value Escaping
- VALUEParameter
- CALSCALEParameter (for- date-and-or-timetype only)
- LANGUAGEParameter (for- texttype only)
- ALTIDParameter
 
- DEATHPLACE(RFC6474)- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
- ALTIDParameter
 
- EMAIL- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- ALTIDParameter
 
- END- No Parameters
 
- EXPERTISE(RFC6715)- Line Folding
- Value Escaping
- LEVELParameter
- INDEXParameter
- LANGUAGEParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- FBURL- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- ALTIDParameter
 
- FN- Line Folding
- Value Escaping
- VALUEParameter
- TYPEParameter
- LANGUAGEParameter
- ALTIDParameter
- PIDParameter
- PREFParameter
 
- GENDER- Line Folding
- Value Escaping
- VALUEParameter
- Implement Constructor ArrayArgument Support
 
- GEO- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- HOBBY(RFC6715)- Line Folding
- Value Escaping
- LEVELParameter
- INDEXParameter
- LANGUAGEParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- IMPP- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- INTEREST(RFC6715)- Line Folding
- Value Escaping
- LEVELParameter
- INDEXParameter
- LANGUAGEParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- KEY- Line Folding
- Value Escaping
- VALUEParameter
- MEDIATYPEParameter (for- URItype only)
- ALTIDParameter
- PIDParameter
- PREFParameter
- TYPEParameter
 
- KIND- Line Folding
- Value Escaping
- VALUEParameter
 
- LANG- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- LOGO- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- MEMBER- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
- MEDIATYPEParameter
 
- N- Line Folding
- Value Escaping
- VALUEParameter
- SORT-ASParameter
- LANGUAGEParameter
- ALTIDParameter
 
- NICKNAME- Line Folding
- Value Escaping
- VALUEParameter
- TYPEParameter
- LANGUAGEParameter
- ALTIDParameter
- PIDParameter
- PREFParameter
 
- NOTE- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- ALTIDParameter
 
- ORG- Line Folding
- Value Escaping
- VALUEParameter
- SORT-ASParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- ORG-DIRECTORY(RFC6715)- Line Folding
- Value Escaping
- INDEXParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- PHOTO- Line Folding
- Value Escaping
- VALUEParameter
- ALTIDParameter
- TYPEParameter
- MEDIATYPEParameter
- PREFParameter
- PIDParameter
 
- PRODID- Line Folding
- Value Escaping
- VALUEParameter
 
- RELATED- Line Folding
- Value Escaping
- VALUEParameter
- MEDIATYPEParameter (for- URItype only)
- LANGUAGEParameter (for- texttype only)
- PIDParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- REV- Line Folding
- Value Escaping
- VALUEParameter
 
- ROLE- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- ALTIDParameter
 
- SOUND- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- SOURCE- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
- MEDIATYPEParameter
 
- TEL- Line Folding
- Value Escaping
- VALUEParameter
- MEDIATYPEParameter (for- URItype only)
- TYPEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
 
- TITLE- Line Folding
- Value Escaping
- VALUEParameter
- LANGUAGEParameter
- PIDParameter
- PREFParameter
- ALTIDParameter
- TYPEParameter
 
- TZ- Line Folding
- Value Escaping
- VALUEParameter
- ALTIDParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
 
- UID- Line Folding
- Value Escaping
- VALUEParameter
 
- URL- Line Folding
- Value Escaping
- VALUEParameter
- PIDParameter
- PREFParameter
- TYPEParameter
- MEDIATYPEParameter
- ALTIDParameter
 
- VERSION- No Parameters
 
- XML- Line Folding
- Value Escaping
- VALUEParameter
- ALTIDParameter
 
 
- Implement Parameter Value Encoding as Specified in RFC6868
Reference
Property Cardinalities
Property cardinalities are indicated using the following notation, which is based on ABNF (see RFC5234, Section 3.6):
| Cardinality | Meaning | 
|---|---|
| 1 | Exactly one instance per vCard MUST be present. | 
| *1 | Exactly one instance per vCard MAY be present. | 
| 1* | One or more instances per vCard MUST be present. | 
| * | One or more instances per vCard MAY be present. | 
Properties defined in a vCard instance may have multiple values depending on the property cardinality. The general rule for encoding multi-valued properties is to simply create a new content line for each value (including the property name). However, it should be noted that some value types support encoding multiple values in a single content line by separating the values with a comma ",". This approach has been taken for several of the content types defined below (date, time, integer, float).
Property Parameters
A property can have attributes associated with it. These "property parameters" contain meta-information about the property or the property value. In some cases, the property parameter can be multi- valued in which case the property parameter value elements are separated by a COMMA (U+002C).
Property parameter value elements that contain the COLON (U+003A), SEMICOLON (U+003B), or COMMA (U+002C) character separators MUST be specified as quoted-string text values. Property parameter values MUST NOT contain the DQUOTE (U+0022) character. The DQUOTE character is used as a delimiter for parameter values that contain restricted characters or URI text.
Applications MUST ignore x-param and iana-param values they don't recognize.
Property Value Escaping
Some properties may contain one or more values delimited by a COMMA character (U+002C). Therefore, a COMMA character in a value MUST be escaped with a BACKSLASH character (U+005C), even for properties that don't allow multiple instances (for consistency).
Some properties (e.g., N and ADR) comprise multiple fields delimited by a SEMICOLON character (U+003B). Therefore, a SEMICOLON in a field of such a "compound" property MUST be escaped with a BACKSLASH character. SEMICOLON characters in non-compound properties MAY be escaped. On input, an escaped SEMICOLON character is never a field separator. An unescaped SEMICOLON character may be a field separator, depending on the property in which it appears.
Furthermore, some fields of compound properties may contain a list of values delimited by a COMMA character. Therefore, a COMMA character in one of a field's values MUST be escaped with a BACKSLASH character, even for fields that don't allow multiple values (for consistency). Compound properties allowing multiple instances MUST NOT be encoded in a single content line.
Finally, BACKSLASH characters in values MUST be escaped with a BACKSLASH character. NEWLINE (U+000A) characters in values MUST be encoded by two characters: a BACKSLASH followed by either an 'n' (U+006E) or an 'N' (U+004E).
In all other cases, escaping MUST NOT be used.
Links
- vCard Format Specification
- vCard KIND:application
- vCard Format Extensions: Place of Birth, Place and Date of Death
- vCard Format Extensions: Representing vCard Extensions Defined by the Open Mobile Alliance (OMA) Converged Address Book (CAB) Group
- Additional Data Related to an Emergency Call § vCard Parameter Value Registration
- vCard Format Extensions: ICANN Extensions for the Registration Data Access Protocol (RDAP)
- vCard Elements (IANA Protocol Registry)
License
The MIT License (Expat). See the license file for details.
3 years ago