ngx-vcard
Version:
Generate an RFC compliant vCard and download it.
1 lines • 39.4 kB
Source Map (JSON)
{"version":3,"file":"ngx-vcard.mjs","sources":["../../../projects/ngx-vcard/src/lib/types/vCardEncoding.ts","../../../projects/ngx-vcard/src/lib/helpers.ts","../../../projects/ngx-vcard/src/lib/types/parameter/BasicPropertyParameters.type.ts","../../../projects/ngx-vcard/src/lib/ngx-vcard.formatter.ts","../../../projects/ngx-vcard/src/lib/download-vcard.directive.ts","../../../projects/ngx-vcard/src/lib/ngx-vcard.module.ts","../../../projects/ngx-vcard/src/public_api.ts","../../../projects/ngx-vcard/src/ngx-vcard.ts"],"sourcesContent":["export enum VCardEncoding {\n none = '',\n utf8 = ';CHARSET=utf-8',\n}\n","/**\n * Encodes string\n */\nexport function e(value: string | undefined): string {\n if (value) {\n if (typeof value !== 'string') {\n value = '' + value;\n }\n\n return (\n value\n // From https://datatracker.ietf.org/doc/html/rfc6350\n // Some properties may contain one or more values delimited by a COMMA\n // character (U+002C). Therefore, a COMMA character in a value MUST be\n // escaped with a BACKSLASH character (U+005C), even for properties that\n // don't allow multiple instances (for consistency).\n .replace(/,/g, ',')\n\n // Some properties (e.g., N and ADR) comprise multiple fields delimited\n // by a SEMICOLON character (U+003B). Therefore, a SEMICOLON in a field\n // of such a \"compound\" property MUST be escaped with a BACKSLASH\n // character. SEMICOLON characters in non-compound properties MAY be\n // escaped. On input, an escaped SEMICOLON character is never a field\n // separator. An unescaped SEMICOLON character may be a field\n // separator, depending on the property in which it appears.\n .replace(/;/g, ';')\n\n // Finally, BACKSLASH characters in values MUST be escaped with a\n // BACKSLASH character.\n\n .replace(/\\\\/g, '\\\\\\\\')\n\n // NEWLINE (U+000A) characters in values MUST be\n // encoded by two characters: a BACKSLASH followed by either an 'n'\n // (U+006E) or an 'N' (U+004E).\n .replace(/\\n/g, '\\\\n')\n\n // In all other cases, escaping MUST NOT be used.\n );\n }\n return '';\n}\n\n/**\n * Return new line characters\n */\nexport function nl(): string {\n return '\\n';\n}\n","import { Address } from '../vCard';\nimport { e } from '../../helpers';\n\n/**\n * A property can have attributes associated with it.\n * These \"property parameters\" contain meta-information about the property or the property value.\n * @link https://tools.ietf.org/html/rfc6350#section-5\n */\nexport interface BasicPropertyParameters {\n /**\n * The LANGUAGE property parameter is used to identify data in multiple languages.\n * @kind Property: LANGUAGE\n * @link https://tools.ietf.org/html/rfc6350#section-5.1\n *\n */\n language?: string;\n /**\n * The VALUE parameter is OPTIONAL, used to identify the value type (data type) and format of the value.\n * @kind Property: VALUE\n * @link https://tools.ietf.org/html/rfc6350#section-5.2\n */\n value?:\n | 'text'\n | 'uri'\n | 'date'\n | 'time'\n | 'date-time'\n | 'date-and-or-time'\n | 'timestamp'\n | 'boolean'\n | 'integer'\n | 'float'\n | 'utc-offset'\n | 'language-tag';\n /**\n * The PREF parameter is OPTIONAL and is used to indicate that the corresponding instance of a property is preferred by the vCard author.\n * Its value MUST be an integer between 1 and 100 that quantifies the level of preference.\n * Lower values correspond to a higher level of preference, with 1 being most preferred.\n * @kind Property: PREF\n * @link https://tools.ietf.org/html/rfc6350#section-5.3\n */\n pref?:\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40\n | 41\n | 42\n | 43\n | 44\n | 45\n | 46\n | 47\n | 48\n | 49\n | 50\n | 51\n | 52\n | 53\n | 54\n | 55\n | 56\n | 57\n | 58\n | 59\n | 60\n | 61\n | 62\n | 63\n | 64\n | 65\n | 66\n | 67\n | 68\n | 69\n | 70\n | 71\n | 72\n | 73\n | 74\n | 75\n | 76\n | 77\n | 78\n | 79\n | 80\n | 81\n | 82\n | 83\n | 84\n | 85\n | 86\n | 87\n | 88\n | 89\n | 90\n | 91\n | 92\n | 93\n | 94\n | 95\n | 96\n | 97\n | 98\n | 99\n | 100;\n /**\n * The ALTID parameter is used to \"tag\" property instances as being alternative representations of the same logical property.\n * For example, translations of a property in multiple languages generates multiple property instances\n * having different LANGUAGE parameter that are tagged with the same ALTID value.\n * @kind Property: ALTID\n * @link https://tools.ietf.org/html/rfc6350#section-5.4\n */\n altid?: string;\n /**\n * The PID parameter is used to identify a specific property among multiple instances.\n * @kind Property: PID\n * @link https://tools.ietf.org/html/rfc6350#section-5.5\n */\n pid?: string[];\n /**\n * The TYPE parameter has multiple, different uses.\n * In general, it is a way of specifying class characteristics of the associated property.\n * @kind Property: TYPE\n * @link https://tools.ietf.org/html/rfc6350#section-5.6\n */\n type?:\n | Array<\n | 'work'\n | 'home'\n | 'text'\n | 'voice'\n | 'fax'\n | 'cell'\n | 'video'\n | 'pager'\n | 'textphone'\n >\n | 'work'\n | 'home'\n | 'text'\n | 'voice'\n | 'fax'\n | 'cell'\n | 'video'\n | 'pager'\n | 'textphone';\n /**\n * The MEDIATYPE parameter is used with properties whose value is a URI.\n * @kind Property: MEDIATYPE\n * @link https://tools.ietf.org/html/rfc6350#section-5.7\n */\n mediatype?: string;\n /**\n * The CALSCALE parameter is used to define the calendar system in which a date or date-time value is expressed.\n * @kind Property: CALSCALE\n * @link https://tools.ietf.org/html/rfc6350#section-5.8\n */\n calscale?: 'gregorian';\n /**\n * The \"sort-as\" parameter is used to specify the string to be used for national-language-specific sorting.\n * Without this information, sorting algorithms could incorrectly sort this vCard within a sequence of sorted vCards.\n * @kind Property: SORT-AS\n * @link https://tools.ietf.org/html/rfc6350#section-5.9\n */\n sortas?: string[];\n /**\n * The GEO parameter can be used to indicate global positioning information that is specific to an address.\n * @kind Property: GEO\n * @link https://tools.ietf.org/html/rfc6350#section-5.10\n */\n geo?: string;\n /**\n * The TZ parameter can be used to indicate time zone information that is specific to an address.\n * @kind Property: TZ\n * @link https://tools.ietf.org/html/rfc6350#section-5.11\n */\n timezone?: string;\n}\n\nexport function propertyToVCardString(\n property: BasicPropertyParameters,\n): string {\n let str = '';\n if (property.language) {\n str += ';LANGUAGE=' + e(property.language);\n }\n if (property.value) {\n str += ';VALUE=' + e(property.value);\n }\n if (property.altid) {\n str += ';ALTID=' + e(property.altid);\n }\n if (property.pid) {\n str += ';PID=' + property.pid.map((s) => e(s)).join(',');\n }\n if (property.type) {\n if (Array.isArray(property.type)) {\n if (property.type.length === 1) {\n str += ';TYPE=' + property.type[0];\n } else {\n str +=\n ';TYPE=\"' + property.type.map((s) => s.toLowerCase()).join(',') + '\"';\n }\n } else {\n str += ';TYPE=' + property.type;\n }\n }\n if (property.mediatype) {\n str += ';MEDIATYPE=' + e(property.mediatype);\n }\n if (property.pref) {\n str += ';PREF=' + property.pref;\n }\n if (property.calscale) {\n str += ';CALSCALE=' + e(property.calscale);\n }\n if (property.sortas) {\n str += ';SORT-AS=\"' + property.sortas.map((s) => e(s)).join(',') + '\"';\n }\n if (property.geo) {\n str += ';GEO=' + e(property.geo);\n }\n if (property.timezone) {\n str += ';TZ=' + e(property.timezone);\n }\n\n return str;\n}\n\nexport function isPropertyWithParameters(\n object: any,\n): object is { value?: string; param?: BasicPropertyParameters } {\n const test = <{ value?: string; param?: BasicPropertyParameters }>object;\n if (test == null || test.param == null || test.value == null) {\n return false;\n }\n return (\n test.param.language !== undefined ||\n test.param.value !== undefined ||\n test.param.pref !== undefined ||\n test.param.altid !== undefined ||\n test.param.pid !== undefined ||\n test.param.type !== undefined ||\n test.param.mediatype !== undefined ||\n test.param.calscale !== undefined ||\n test.param.sortas !== undefined ||\n test.param.geo !== undefined ||\n test.param.timezone !== undefined\n );\n}\n\nexport function isPropertyWithParametersAddressValue(\n object: any,\n): object is { value?: Address; param?: BasicPropertyParameters } {\n const test = <{ value?: Address; param?: BasicPropertyParameters }>object;\n if (test == null || test.param == null || test.value == null) {\n return false;\n }\n return (\n test.param.language !== undefined ||\n test.param.value !== undefined ||\n test.param.pref !== undefined ||\n test.param.altid !== undefined ||\n test.param.pid !== undefined ||\n test.param.type !== undefined ||\n test.param.mediatype !== undefined ||\n test.param.calscale !== undefined ||\n test.param.sortas !== undefined ||\n test.param.geo !== undefined ||\n test.param.timezone !== undefined\n );\n}\n","import { VCard, Address } from './types/vCard';\nimport { VCardEncoding } from './types/vCardEncoding';\nimport {\n isPropertyWithParameters,\n propertyToVCardString,\n BasicPropertyParameters,\n isPropertyWithParametersAddressValue,\n} from './types/parameter/BasicPropertyParameters.type';\nimport { nl, e } from './helpers';\n\nexport class VCardFormatter {\n public static getVCardAsBlob(\n vCard: VCard,\n encoding: VCardEncoding = VCardEncoding.none,\n ): Blob {\n const data = VCardFormatter.getVCardAsString(vCard, encoding);\n return new Blob([data], { type: 'text/vcard' });\n }\n\n /**\n * Get formatted vCard in VCF format\n */\n public static getVCardAsString(\n vCard: VCard,\n encodingPrefix: VCardEncoding = VCardEncoding.none,\n ): string {\n if (!vCard.version) {\n vCard.version = '4.0';\n }\n const majorVersion = getMajorVersion(vCard.version);\n\n let formattedVCardString = '';\n formattedVCardString += 'BEGIN:VCARD' + nl();\n formattedVCardString += 'VERSION:' + vCard.version + nl();\n\n // const encodingPrefix = '';\n let formattedName = '';\n if (vCard.name == null) {\n vCard.name = {};\n }\n\n let nameArray = [];\n if (vCard.formattedName != null) {\n nameArray = [\n vCard.formattedName.firstNames,\n vCard.formattedName.addtionalNames,\n vCard.formattedName.lastNames,\n ];\n } else {\n nameArray = [\n vCard.name.firstNames,\n vCard.name.addtionalNames,\n vCard.name.lastNames,\n ];\n }\n\n formattedName = nameArray.filter((string) => string != null).join(' ');\n\n formattedVCardString +=\n 'FN' + encodingPrefix + ':' + e(formattedName) + nl();\n\n formattedVCardString +=\n 'N' +\n encodingPrefix +\n ':' +\n [\n e(vCard.name.lastNames),\n e(vCard.name.firstNames),\n e(vCard.name.addtionalNames),\n e(vCard.name.namePrefix),\n e(vCard.name.nameSuffix),\n ].join(';') +\n nl();\n\n if (vCard.nickname && majorVersion >= 3) {\n formattedVCardString +=\n 'NICKNAME' + encodingPrefix + ':' + e(vCard.nickname) + nl();\n }\n\n if (vCard.gender) {\n if (vCard.gender.sex) {\n formattedVCardString += 'GENDER:' + e(vCard.gender.sex);\n if (vCard.gender.text) {\n formattedVCardString += ';' + e(vCard.gender.text);\n }\n formattedVCardString += nl();\n } else {\n formattedVCardString += 'GENDER:;' + e(vCard.gender.text) + nl();\n }\n }\n\n if (vCard.uid) {\n formattedVCardString +=\n 'UID' + encodingPrefix + ':' + e(vCard.uid) + nl();\n }\n\n if (vCard.birthday) {\n formattedVCardString += 'BDAY:' + YYYYMMDD(vCard.birthday) + nl();\n }\n\n if (vCard.anniversary) {\n formattedVCardString +=\n 'ANNIVERSARY:' + YYYYMMDD(vCard.anniversary) + nl();\n }\n\n if (vCard.language) {\n vCard.language.forEach((language) => {\n if (isPropertyWithParameters(language)) {\n formattedVCardString +=\n 'LANG' +\n propertyToVCardString(language.param) +\n ':' +\n e(language.value) +\n nl();\n } else {\n formattedVCardString += 'LANG:' + e(language) + nl();\n }\n });\n }\n\n if (vCard.organization) {\n if (isPropertyWithParameters(vCard.organization)) {\n formattedVCardString +=\n 'ORG' +\n propertyToVCardString(vCard.organization.param) +\n ':' +\n e(vCard.organization.value) +\n nl();\n } else {\n formattedVCardString +=\n 'ORG' + encodingPrefix + ':' + e(vCard.organization) + nl();\n }\n }\n\n if (vCard.address) {\n vCard.address.forEach((address) => {\n if (isPropertyWithParametersAddressValue(address)) {\n formattedVCardString +=\n 'ADR' +\n propertyToVCardString(address.param as BasicPropertyParameters) +\n getFormattedAddress(address.value) +\n nl();\n } else {\n formattedVCardString += 'ADR' + getFormattedAddress(address) + nl();\n }\n });\n }\n\n if (vCard.telephone) {\n vCard.telephone.forEach((element) => {\n if (!isPropertyWithParameters(element)) {\n element = {\n value: element,\n param: {\n type: 'voice',\n },\n };\n }\n formattedVCardString +=\n 'TEL' +\n propertyToVCardString(element.param as BasicPropertyParameters) +\n ':' +\n e(element.value) +\n nl();\n });\n }\n\n if (vCard.email) {\n vCard.email.forEach((email) => {\n if (isPropertyWithParameters(email)) {\n formattedVCardString +=\n 'EMAIL' +\n propertyToVCardString(email.param) +\n ':' +\n e(email.value) +\n nl();\n } else {\n formattedVCardString += 'EMAIL:' + e(email) + nl();\n }\n });\n }\n\n if (vCard.title) {\n formattedVCardString +=\n 'TITLE' + encodingPrefix + ':' + e(vCard.title) + nl();\n }\n\n if (vCard.logo) {\n if (isPropertyWithParameters(vCard.logo)) {\n formattedVCardString +=\n 'LOGO' +\n propertyToVCardString(vCard.logo.param) +\n ':' +\n e(vCard.logo.value) +\n nl();\n } else {\n formattedVCardString += 'LOGO:' + e(vCard.logo) + nl();\n }\n }\n\n if (vCard.photo) {\n if (isPropertyWithParameters(vCard.photo)) {\n formattedVCardString +=\n 'PHOTO' +\n propertyToVCardString(vCard.photo.param) +\n ':' +\n e(vCard.photo.value) +\n nl();\n } else {\n formattedVCardString += 'PHOTO:' + e(vCard.photo) + nl();\n }\n }\n\n if (vCard.homeFax) {\n vCard.homeFax.forEach(function (number) {\n if (+majorVersion >= 4) {\n formattedVCardString +=\n 'TEL;VALUE=uri;TYPE=\"fax,home\":tel:' + e(number) + nl();\n } else {\n formattedVCardString += 'TEL;TYPE=HOME,FAX:' + e(number) + nl();\n }\n });\n }\n\n if (vCard.workFax) {\n vCard.workFax.forEach(function (number) {\n if (+majorVersion >= 4) {\n formattedVCardString +=\n 'TEL;VALUE=uri;TYPE=\"fax,work\":tel:' + e(number) + nl();\n } else {\n formattedVCardString += 'TEL;TYPE=WORK,FAX:' + e(number) + nl();\n }\n });\n }\n\n if (vCard.role) {\n formattedVCardString +=\n 'ROLE' + encodingPrefix + ':' + e(vCard.role) + nl();\n }\n\n if (vCard.url) {\n let urlNotSet = true;\n if (hasProp(vCard.url, 'home')) {\n formattedVCardString +=\n 'URL;type=HOME' +\n encodingPrefix +\n ':' +\n e((vCard.url as { home: string }).home) +\n nl();\n urlNotSet = false;\n }\n\n if (hasProp(vCard.url, 'work')) {\n formattedVCardString +=\n 'URL;type=WORK' +\n encodingPrefix +\n ':' +\n e((vCard.url as { work: string }).work) +\n nl();\n urlNotSet = false;\n }\n if (urlNotSet) {\n formattedVCardString +=\n 'URL' + encodingPrefix + ':' + e(vCard.url as string) + nl();\n }\n }\n\n if (vCard.note) {\n formattedVCardString +=\n 'NOTE' + encodingPrefix + ':' + e(vCard.note) + nl();\n }\n\n if (vCard.socialUrls) {\n for (const key in vCard.socialUrls) {\n if (vCard.socialUrls.hasOwnProperty(key) && vCard.socialUrls[key]) {\n formattedVCardString +=\n 'X-SOCIALPROFILE' +\n encodingPrefix +\n ';TYPE=' +\n key +\n ':' +\n e(vCard.socialUrls[key]) +\n nl();\n }\n }\n }\n\n if (vCard.source) {\n if (isPropertyWithParameters(vCard.source)) {\n formattedVCardString +=\n 'SOURCE' +\n encodingPrefix +\n propertyToVCardString(vCard.source.param) +\n ':' +\n e(vCard.source.value) +\n +nl();\n } else {\n formattedVCardString +=\n 'SOURCE' + encodingPrefix + ':' + e(vCard.source) + nl();\n }\n }\n if (vCard.rev) {\n formattedVCardString += 'REV:' + vCard.rev + nl();\n }\n formattedVCardString += 'END:VCARD' + nl();\n return formattedVCardString;\n }\n}\n\n/**\n * Get formatted photo\n * @param photoType Photo type (PHOTO, LOGO)\n * @param url URL to attach photo from\n * @param mediaType Media-type of photo (JPEG, PNG, GIF)\n */\nfunction getFormattedPhoto(\n photoType: 'PHOTO' | 'LOGO',\n url: string,\n mediaType: string,\n base64: boolean,\n majorVersion: number,\n) {\n let params;\n\n if (+majorVersion >= 4) {\n params = base64 ? ';ENCODING=b;MEDIATYPE=image/' : ';MEDIATYPE=image/';\n } else if (+majorVersion === 3) {\n params = base64 ? ';ENCODING=b;TYPE=' : ';TYPE=';\n } else {\n params = base64 ? ';ENCODING=BASE64;' : ';';\n }\n\n const formattedPhoto = photoType + params + mediaType + ':' + e(url) + nl();\n return formattedPhoto;\n}\n\n/**\n * Get formatted address\n */\nfunction getFormattedAddress(address: Address) {\n return (\n (address.label ? ';LABEL=\"' + e(address.label) + '\"' : '') +\n ':' +\n e(address.postOfficeBox) +\n ';' +\n e(address.extendedAddress) +\n ';' +\n e(address.street) +\n ';' +\n e(address.locality) +\n ';' +\n e(address.region) +\n ';' +\n e(address.postalCode) +\n ';' +\n e(address.countryName)\n );\n}\n\n/**\n * Convert date to YYYYMMDD format\n */\nfunction YYYYMMDD(date: Date | undefined): string {\n if (!date) {\n return '';\n }\n return date.toLocaleDateString('se').replace(/\\D/g, ''); // use Swedish date format\n}\n\n/**\n * Get major version from version string\n */\nexport function getMajorVersion(version: string): number {\n const majorVersionString = version ? version.slice(0, 1) : '4';\n if (!isNaN(+majorVersionString)) {\n return Number.parseInt(majorVersionString);\n }\n return 4;\n}\n\n/**\n * Determines if the object has the Property\n * @param obj Object to test\n * @param property Property to check\n */\nfunction hasProp(obj: any, property: string): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property);\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { VCardFormatter } from './ngx-vcard.formatter';\nimport { VCard } from './types/vCard';\nimport { VCardEncoding } from './types/vCardEncoding';\n\nconst ERROR_MESSAGE =\n \"ngx-vcard: No input specified. You must specify either 'vcdDownloadVCard' or 'generateVCardFunction'\";\n\n// TODO: Remove @Directive\n@Directive({\n selector: '[vcdDownloadVCard]',\n})\nexport class DownloadVCardDirective {\n constructor(private element: ElementRef) {}\n // This property is always specified as it is the selector,\n // which means it can't be undefined\n @Input('vcdDownloadVCard')\n vCard!: VCard | '';\n @Input('generateVCardFunction')\n generateVCardFunction: (() => VCard) | '' | undefined;\n @Input() public encoding: VCardEncoding = VCardEncoding.none;\n\n @HostListener('click')\n onclick() {\n if (this.vCard == '') {\n if (\n this.generateVCardFunction != undefined &&\n this.generateVCardFunction != ''\n ) {\n this.vCard = this.generateVCardFunction();\n } else {\n throw new Error(ERROR_MESSAGE);\n }\n }\n const blob = VCardFormatter.getVCardAsBlob(this.vCard, this.encoding);\n let filename = 'vCard';\n if (this.vCard.name != null) {\n filename =\n this.vCard.name.firstNames + ' ' + this.vCard.name.lastNames + '.vcf';\n }\n this.download(blob, filename);\n }\n\n private download(data: Blob, filename: string) {\n const a: HTMLAnchorElement = document.createElement('a');\n const url = URL.createObjectURL(data);\n (a as any).style.display = 'none';\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }\n\n ngOnInit() {\n if (\n this.vCard == '' &&\n (this.generateVCardFunction == '' ||\n this.generateVCardFunction == undefined)\n ) {\n throw new Error(ERROR_MESSAGE);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DownloadVCardDirective } from './download-vcard.directive';\n\n@NgModule({\n imports: [],\n declarations: [DownloadVCardDirective],\n exports: [DownloadVCardDirective],\n})\nexport class NgxVcardModule {}\n","/*\n * Public API Surface of ngx-vcard\n */\n\nexport * from './lib/ngx-vcard.module';\nexport * from './lib/ngx-vcard.formatter';\nexport * from './lib/download-vcard.directive';\nexport * from './lib/types/vCard';\nexport * from './lib/types/vCardEncoding';\nexport * from './lib/types/parameter/BasicPropertyParameters.type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}