@liquid-js/qr-code-styling 5.5.1-2 → 5.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.
- package/lib/event-plugin.js +1 -1
- package/lib/event-plugin.js.map +1 -1
- package/lib/qr-code-styling-node.js.map +1 -1
- package/lib/qr-code-styling.js +1 -1
- package/lib/qr-code-styling.js.map +1 -1
- package/lib/tools/browser-utils.d.ts +2 -2
- package/lib/vcard-plugin.js +1 -1
- package/lib/vcard-plugin.js.map +1 -1
- package/package.json +6 -3
|
@@ -14,5 +14,5 @@ export declare function drawToCanvas(qrCode: QRCodeStyling, options?: RecursiveP
|
|
|
14
14
|
export declare function download(qrCode: QRCodeStyling, downloadOptions?: {
|
|
15
15
|
name?: string;
|
|
16
16
|
extension: `${FileExtension}`;
|
|
17
|
-
}, options?: RecursivePartial<CanvasOptions
|
|
18
|
-
export declare function downloadURI(uri: string, name: string): void;
|
|
17
|
+
}, options?: RecursivePartial<CanvasOptions>, share?: boolean): Promise<void>;
|
|
18
|
+
export declare function downloadURI(uri: string | Blob, name: string, share?: boolean): void;
|
package/lib/vcard-plugin.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function r(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var r=e.default;if("function"==typeof r){var t=function e(){return this instanceof e?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}),t}var t=r(Object.freeze({__proto__:null,default:{}}));function n(e,r){for(var t=0,n=e.length-1;n>=0;n--){var a=e[n];"."===a?e.splice(n,1):".."===a?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t--;t)e.unshift("..");return e}var a=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;function o(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var a=t>=0?arguments[t]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,r="/"===a.charAt(0))}return(r?"/":"")+(e=n(d(e.split("/"),function(e){return!!e}),!r).join("/"))||"."}function i(e){var r=s(e),t="/"===g(e,-1);return(e=n(d(e.split("/"),function(e){return!!e}),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e}function s(e){return"/"===e.charAt(0)}function l(){return i(d(Array.prototype.slice.call(arguments,0),function(e){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function u(e,r){function t(e){for(var r=0;r<e.length&&""===e[r];r++);for(var t=e.length-1;t>=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=o(e).substr(1),r=o(r).substr(1),e=t(e.split("/")),r=t(r.split("/"));for(var n=Math.min(e.length,r.length),a=n,i=0;i<n;i++)if(e[i]!==r[i]){a=i;break}for(n=[],i=a;i<e.length;i++)n.push("..");return(n=n.concat(r.slice(a))).join("/")}function c(e){var r=a.exec(e).slice(1);return e=r[0],r=r[1],e||r?(r&&=r.substr(0,r.length-1),e+r):"."}function p(e,r){return e=a.exec(e).slice(1)[2],r&&e.substr(-1*r.length)===r&&(e=e.substr(0,e.length-r.length)),e}function h(e){return a.exec(e).slice(1)[3]}var f={extname:h,basename:p,dirname:c,sep:"/",delimiter:":",relative:u,join:l,isAbsolute:s,normalize:i,resolve:o};function d(e,r){if(e.filter)return e.filter(r);for(var t=[],n=0;n<e.length;n++)r(e[n],n,e)&&t.push(e[n]);return t}var m,y,E,g="b"==="ab".substr(-1)?function(e,r,t){return e.substr(r,t)}:function(e,r,t){return r<0&&(r=e.length+r),e.substr(r,t)},v=r(Object.freeze({__proto__:null,basename:p,default:f,delimiter:":",dirname:c,extname:h,isAbsolute:s,join:l,normalize:i,relative:u,resolve:o,sep:"/"})),A={exports:{}};function b(){return m||(m=1,function(){function e(e){return e?("string"!=typeof e&&(e=""+e),e.replace(/\n/g,"\\n").replace(/,/g,"\\,").replace(/;/g,"\\;")):""}function r(){return"\r\n"}function t(r,t,n,o){return r+(a>=4?o?";ENCODING=b;MEDIATYPE=image/":";MEDIATYPE=image/":3===a?o?";ENCODING=b;TYPE=":";TYPE=":o?";ENCODING=BASE64;":";")+n+":"+e(t)+"\r\n"}function n(e){return e.getFullYear()+("0"+(e.getMonth()+1)).slice(-2)+("0"+e.getDate()).slice(-2)}var a="3";A.exports={getFormattedString:function(o){a=o.getMajorVersion();var i="";i+="BEGIN:VCARD\r\n",i+="VERSION:"+o.version+"\r\n";var s=a>=4?"":";CHARSET=UTF-8",l=o.formattedName;if(l||(l="",[o.firstName,o.middleName,o.lastName].forEach(function(e){e&&l&&(l+=" "),l+=e})),i+="FN"+s+":"+e(l)+"\r\n",i+="N"+s+":"+e(o.lastName)+";"+e(o.firstName)+";"+e(o.middleName)+";"+e(o.namePrefix)+";"+e(o.nameSuffix)+"\r\n",o.nickname&&a>=3&&(i+="NICKNAME"+s+":"+e(o.nickname)+"\r\n"),o.gender&&(i+="GENDER:"+e(o.gender)+"\r\n"),o.uid&&(i+="UID"+s+":"+e(o.uid)+"\r\n"),o.birthday&&(i+="BDAY:"+n(o.birthday)+"\r\n"),o.anniversary&&(i+="ANNIVERSARY:"+n(o.anniversary)+"\r\n"),o.email&&(Array.isArray(o.email)||(o.email=[o.email]),o.email.forEach(function(r){i=a>=4?i+"EMAIL"+s+";type=HOME:"+e(r)+"\r\n":a>=3&&a<4?i+"EMAIL"+s+";type=HOME,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";HOME;INTERNET:"+e(r)+"\r\n"})),o.workEmail&&(Array.isArray(o.workEmail)||(o.workEmail=[o.workEmail]),o.workEmail.forEach(function(r){i=a>=4?i+"EMAIL"+s+";type=WORK:"+e(r)+"\r\n":a>=3&&a<4?i+"EMAIL"+s+";type=WORK,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";WORK;INTERNET:"+e(r)+"\r\n"})),o.otherEmail&&(Array.isArray(o.otherEmail)||(o.otherEmail=[o.otherEmail]),o.otherEmail.forEach(function(r){i=a>=4?i+"EMAIL"+s+";type=OTHER:"+e(r)+"\r\n":a>=3&&a<4?i+"EMAIL"+s+";type=OTHER,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";OTHER;INTERNET:"+e(r)+"\r\n"})),o.logo.url&&(i+=t("LOGO",o.logo.url,o.logo.mediaType,o.logo.base64)),o.photo.url&&(i+=t("PHOTO",o.photo.url,o.photo.mediaType,o.photo.base64)),o.cellPhone&&(Array.isArray(o.cellPhone)||(o.cellPhone=[o.cellPhone]),o.cellPhone.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="voice,cell":tel:'+e(r)+"\r\n":i+"TEL;TYPE=CELL:"+e(r)+"\r\n"})),o.pagerPhone&&(Array.isArray(o.pagerPhone)||(o.pagerPhone=[o.pagerPhone]),o.pagerPhone.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="pager,cell":tel:'+e(r)+"\r\n":i+"TEL;TYPE=PAGER:"+e(r)+"\r\n"})),o.homePhone&&(Array.isArray(o.homePhone)||(o.homePhone=[o.homePhone]),o.homePhone.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="voice,home":tel:'+e(r)+"\r\n":i+"TEL;TYPE=HOME,VOICE:"+e(r)+"\r\n"})),o.workPhone&&(Array.isArray(o.workPhone)||(o.workPhone=[o.workPhone]),o.workPhone.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="voice,work":tel:'+e(r)+"\r\n":i+"TEL;TYPE=WORK,VOICE:"+e(r)+"\r\n"})),o.homeFax&&(Array.isArray(o.homeFax)||(o.homeFax=[o.homeFax]),o.homeFax.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="fax,home":tel:'+e(r)+"\r\n":i+"TEL;TYPE=HOME,FAX:"+e(r)+"\r\n"})),o.workFax&&(Array.isArray(o.workFax)||(o.workFax=[o.workFax]),o.workFax.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="fax,work":tel:'+e(r)+"\r\n":i+"TEL;TYPE=WORK,FAX:"+e(r)+"\r\n"})),o.otherPhone&&(Array.isArray(o.otherPhone)||(o.otherPhone=[o.otherPhone]),o.otherPhone.forEach(function(r){i=a>=4?i+'TEL;VALUE=uri;TYPE="voice,other":tel:'+e(r)+"\r\n":i+"TEL;TYPE=OTHER:"+e(r)+"\r\n"})),[{details:o.homeAddress,type:"HOME"},{details:o.workAddress,type:"WORK"}].forEach(function(r){var t=i,n="";(r.details.label||r.details.street||r.details.city||r.details.stateProvince||r.details.postalCode||r.details.countryRegion)&&(a>=4?n="ADR"+s+";TYPE="+r.type+(r.details.label?';LABEL="'+e(r.details.label)+'"':"")+":;;"+e(r.details.street)+";"+e(r.details.city)+";"+e(r.details.stateProvince)+";"+e(r.details.postalCode)+";"+e(r.details.countryRegion)+"\r\n":(r.details.label&&(n="LABEL"+s+";TYPE="+r.type+":"+e(r.details.label)+"\r\n"),n+="ADR"+s+";TYPE="+r.type+":;;"+e(r.details.street)+";"+e(r.details.city)+";"+e(r.details.stateProvince)+";"+e(r.details.postalCode)+";"+e(r.details.countryRegion)+"\r\n")),i=t+n}),o.title&&(i+="TITLE"+s+":"+e(o.title)+"\r\n"),o.role&&(i+="ROLE"+s+":"+e(o.role)+"\r\n"),o.organization&&(i+="ORG"+s+":"+e(o.organization)+"\r\n"),o.url&&(i+="URL"+s+":"+e(o.url)+"\r\n"),o.workUrl&&(i+="URL;type=WORK"+s+":"+e(o.workUrl)+"\r\n"),o.note&&(i+="NOTE"+s+":"+e(o.note)+"\r\n"),o.socialUrls)for(var u in o.socialUrls)o.socialUrls.hasOwnProperty(u)&&o.socialUrls[u]&&(i+="X-SOCIALPROFILE"+s+";TYPE="+u+":"+e(o.socialUrls[u])+r());return o.source&&(i+="SOURCE"+s+":"+e(o.source)+"\r\n"),i+="REV:"+(new Date).toISOString()+"\r\n",o.isOrganization&&(i+="X-ABShowAs:COMPANY\r\n"),i+="END:VCARD\r\n"}}}()),A.exports}E||(E=1,y=function(){function e(){return{url:"",mediaType:"",base64:!1,attachFromUrl:function(e,r){this.url=e,this.mediaType=r,this.base64=!1},embedFromFile:function(e){this.mediaType=v.extname(e).toUpperCase().replace(/\./g,""),this.url=t.readFileSync(e).toString("base64"),this.base64=!0},embedFromString:function(e,r){this.mediaType=r,this.url=e,this.base64=!0}}}return{uid:"",birthday:"",cellPhone:"",pagerPhone:"",email:"",workEmail:"",firstName:"",formattedName:"",gender:"",homeAddress:{label:"",street:"",city:"",stateProvince:"",postalCode:"",countryRegion:""},homePhone:"",homeFax:"",lastName:"",logo:e(),middleName:"",namePrefix:"",nameSuffix:"",nickname:"",note:"",organization:"",photo:e(),role:"",socialUrls:{facebook:"",linkedIn:"",twitter:"",flickr:""},source:"",title:"",url:"",workUrl:"",workAddress:{label:"",street:"",city:"",stateProvince:"",postalCode:"",countryRegion:""},workPhone:"",workFax:"",version:"3.0",getMajorVersion:function(){var e=this.version?this.version.split(".")[0]:"4";return isNaN(e)?4:parseInt(e)},getFormattedString:function(){return b().getFormattedString(this)},saveToFile:function(e){var r=b().getFormattedString(this);t.writeFileSync(e,r,{encoding:"utf8"})}}});var w,P,O=e(y);var x,T,k,L,N,C={exports:{}};function S(){function e(r,t,n){if(!(this instanceof e))return new e(t);null!=n&&Object.assign(this,n),this._field=r,this._data=t,Object.defineProperty(this,"_field",{enumerable:!1}),Object.defineProperty(this,"_data",{enumerable:!1})}function r(e){return e.replace(/([A-Z])/g,"-$1").toUpperCase()}return k?T:(k=1,e.fromJSON=function(r){var t=r[0],n=r[1];return/text/i.test(r[2])||(n.value=r[2]),new e(t,r=Array.isArray(r[3])?r[3].join(";"):r[3],n)},e.prototype={constructor:e,is:function(e){return e=(e+"").toLowerCase(),Array.isArray(this.type)?this.type.indexOf(e)>=0:this.type===e},isEmpty:function(){return null==this._data&&0===Object.keys(this).length},clone:function(){return new e(this._field,this._data,this)},toString:function(e){for(var t=(this.group?this.group+".":"")+r(this._field),n=Object.keys(this),a=[],o=0;o<n.length;o++)if("group"!==n[o])switch(t){case"TEL":case"ADR":case"EMAIL":"2.1"===e?Array.isArray(this[n[o]])?a.push(this[n[o]].join(";")):a.push(this[n[o]]):a.push(r(n[o])+"="+this[n[o]]);break;default:a.push(r(n[o])+"="+this[n[o]])}return"2.1"===e||"3.0"===e?t+(a.length?";"+a.join(";").toUpperCase():a.toString().toUpperCase())+":"+(Array.isArray(this._data)?this._data.join(";"):this._data):t+(a.length?";"+a.join(";"):a)+":"+(Array.isArray(this._data)?this._data.join(";"):this._data)},valueOf:function(){return this._data},toJSON:function(){var e=Object.assign({},this);switch("text"===e.value&&(e.value=void 0,delete e.value),e=[this._field,e,this.value||"text"],this._field){default:e.push(this._data);break;case"adr":case"n":e.push(this._data.split(";"))}return e}},T=e)}function R(){function e(e,r,t){Array.isArray(e[r])?e[r].push(t):e[r]=null!=e[r]?[e[r],t]:t}function r(r,n){n=n.split("=");var a=t(n[0]),o=n[1];return null!=o&&""!==o||(o=n[0],a="type"),"type"===a?('"'===o[0]&&'"'===o[o.length-1]&&-1!==o.indexOf(",")&&(o=o.slice(1,-1)),o.toLowerCase().split(",").forEach(function(t){e(r,a,t)}),r):(e(r,a,o),r)}if(N)return L;N=1;var t=function(){if(x)return C.exports;x=1;var e=(e,r)=>{if("string"!=typeof e&&!Array.isArray(e))throw new TypeError("Expected the input to be `string | string[]`");return r=Object.assign({pascalCase:!1},r),e=Array.isArray(e)?e.map(e=>e.trim()).filter(e=>e.length).join("-"):e.trim(),0===e.length?"":1===e.length?r.pascalCase?e.toUpperCase():e.toLowerCase():(e!==e.toLowerCase()&&(e=(e=>{var r=!1,t=!1,n=!1;for(let a=0;a<e.length;a++){let o=e[a];r&&/[a-zA-Z]/.test(o)&&o.toUpperCase()===o?(e=e.slice(0,a)+"-"+e.slice(a),r=!1,n=t,t=!0,a++):t&&n&&/[a-zA-Z]/.test(o)&&o.toLowerCase()===o?(e=e.slice(0,a-1)+"-"+e.slice(a-1),n=t,t=!1,r=!0):(r=o.toLowerCase()===o&&o.toUpperCase()!==o,n=t,t=o.toUpperCase()===o&&o.toLowerCase()!==o)}return e})(e)),e=e.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(e,r)=>r.toUpperCase()).replace(/\d+(\w|$)/g,e=>e.toUpperCase()),t=e,r.pascalCase?t.charAt(0).toUpperCase()+t.slice(1):t);var t};return C.exports=e,C.exports.default=e,C.exports}(),n=S();return L=function(a){for(var o,i={},s=/^([^;:]+)((?:;(?:[^;:]+))*)(?::([\s\S]+))?$/i,l=a.length-1,u=1;u<l;u++){o=a[u];var c=s.exec(o);if(c){var p=c[1].split(".");o=p.pop();var h=p.pop();p=c[3],c=(c[2]?c[2].replace(/^;|;$/g,"").split(";"):[]).reduce(r,h?{group:h}:{}),e(i,o=t(o),p=new n(o,p,c))}}return i}}var I,U,j,F=e(function(){function e(){if(!(this instanceof e))return new e;this.version=e.versions[e.versions.length-1],this.data={}}return U?I:(U=1,e.mimeType="text/vcard",e.extension=".vcf",e.versions=["2.1","3.0","4.0"],e.EOL="\r\n",e.foldLine=function(){function e(e,r,t){if(null!=r&&r<2)throw Error("Maximum length must not be less than 2");if(null!=r&&r>998)throw Error("Maximum length must not exceed 998");if(r=r||78,(e=e.replace(/[\r\n]+/g,"")).length<=r)return e;for(var n="",a=0,o=0,i=e.length,s=0,l=0;a<i;){if(!t&&~(o=e.lastIndexOf(" ",a+r))?o>a?(n+=e.slice(a,o)+"\r\n ",a=o):(n+=e.slice(a,a+r-l)+"\r\n ",a=a+r-l,t=!0):(n+=e.slice(a,a+r-l)+"\r\n ",a=a+r-l),i-a<r){n+=e.slice(a);break}0===s&&(l=1),s++}return n}return P?w:(P=1,e.unfold=function(e){return e.replace(/\r\n\s/gm,"")},w=e)}(),e.normalize=function(e){return(e+"").replace(/^[\s\r\n]+|[\s\r\n]+$/g,"").replace(/(\r\n)[\x09\x20]?(\r\n)|$/g,"$1").replace(/\r\n[\x20\x09]/g,"")},e.isSupported=function(r){return/^\d\.\d$/.test(r)&&-1!==e.versions.indexOf(r)},e.parse=function(r){r=(r+"").split(/(?=BEGIN:VCARD)/gi);for(var t=[],n=0;n<r.length;n++)t.push((new e).parse(r[n]));return t},e.parseLines=R(),e.fromJSON=function(r){if(null==(r="string"==typeof r?JSON.parse(r):r)||!Array.isArray(r))return new e;if(!/vcard/i.test(r[0]))throw Error("Object not in jCard format");var t=new e;return r[1].forEach(function(r){t.addProperty(e.Property.fromJSON(r))}),t},e.format=function(r,t){if(t=t||r.version||e.versions[e.versions.length-1],!e.isSupported(t))throw Error('Unsupported vCard version "'+t+'"');var n=[];n.push("BEGIN:VCARD"),n.push("VERSION:"+t);for(var a,o=Object.keys(r.data),i=0;i<o.length;i++)if("version"!==o[i])if(a=r.data[o[i]],Array.isArray(a))for(var s=0;s<a.length;s++)a[s].isEmpty()||n.push(e.foldLine(a[s].toString(t),75));else a.isEmpty()||n.push(e.foldLine(a.toString(t),75));return n.push("END:VCARD"),n.join(e.EOL)},e.Property=S(),e.prototype={constructor:e,get:function(e){return null==this.data[e]?this.data[e]:Array.isArray(this.data[e])?this.data[e].map(function(e){return e.clone()}):this.data[e].clone()},set:function(r,t,n){return this.setProperty(new e.Property(r,t,n))},add:function(r,t,n){return r=new e.Property(r,t,n),this.addProperty(r),this},setProperty:function(e){return this.data[e._field]=e,this},addProperty:function(e){var r=e._field;return Array.isArray(this.data[r])?this.data[r].push(e):this.data[r]=null!=this.data[r]?[this.data[r],e]:e,this},parse:function(r){var t=(r=e.normalize(r).split(/\r\n/g))[0],n=r[1],a=r[r.length-1],o=/VERSION:\d\.\d/i;if(!/BEGIN:VCARD/i.test(t))throw new SyntaxError('Invalid vCard: Expected "BEGIN:VCARD" but found "'+t+'"');if(!/END:VCARD/i.test(a))throw new SyntaxError('Invalid vCard: Expected "END:VCARD" but found "'+a+'"');if(!o.test(n)&&!(n=r.find(e=>o.test(e))))throw new SyntaxError('Invalid vCard: Expected "VERSION:\\d.\\d" but none found');if(this.version=n.substring(8,11),!e.isSupported(this.version))throw Error('Unsupported version "'+this.version+'"');return this.data=e.parseLines(r),this},toString:function(r){return r=r||this.version,e.format(this,r)},toJCard:function(e){e=e||"4.0";var r=Object.keys(this.data);e=[["version",{},"text",e]];for(var t,n=0;n<r.length;n++)if("version"!==r[n])if(t=this.data[r[n]],Array.isArray(t))for(var a=0;a<t.length;a++)e.push(t[a].toJSON());else e.push(t.toJSON());return["vcard",e]},toJSON:function(){return this.toJCard(this.version)}},I=e)}()),_=j||={};_.Home="home",_.Work="work";var M,D=M||={};D.Home="home",D.Work="work",D.Cell="cell",D.Pager="pager";var V,Y=V||={};Y.Messenger="messenger",Y.Twitter="twitter",Y.Facebook="facebook",Y.LinkedIn="linkedin",Y.SinaWeibo="weibo",Y.Jabber="jabber",Y.QQ="qq",Y.GaduGadu="gadu-gadu";var J={[V.Twitter]:"https://x.com/",[V.Facebook]:"https://www.facebook.com/",[V.LinkedIn]:"https://www.linkedin.com/in/",[V.SinaWeibo]:"https://weibo.com/n/",[V.Messenger]:"https://www.messenger.com/t/"};export default class{pluginOptions;uuid;constructor(e,r){this.pluginOptions=e,this.uuid=r}configure(e){return e.data=this.generateVCard(),e.qrOptions.mode=void 0,e}generateVCard(){var e=this.pluginOptions,r=O();r.version="3.0",r.formattedName=e.fullName;var t=[],n=1;if(e.name){let n=e.name;n.first&&(r.firstName=n.first),n.last&&(r.lastName=n.last),n.middle&&(r.middleName=n.middle),n.nick&&(r.nickname=n.nick,t.push(F.Property.fromJSON(["xAndroidCustom",{},"text",["vnd.android.cursor.item/nickname",n.nick,"1","","","","","","","","","","","","",""]]))),n.prefix&&(r.namePrefix=n.prefix),n.suffix&&(r.nameSuffix=n.suffix)}e.title&&(r.title=e.title),e.birthday&&(r.birthday=function(e){if(e)return"string"==typeof e?new Date(e):e}(e.birthday)),e.phone?.forEach(e=>{var t="otherPhone";switch(e.type){case M.Work:t="workPhone";break;case M.Cell:t="cellPhone";break;case M.Pager:t="pagerPhone";break;case M.Home:t="homePhone"}var n=r[t];e.value&&(Array.isArray(n)?n.push(e.value):r[t]=[e.value])}),e.email?.forEach(e=>{var t="otherEmail";switch(e.type){case j.Work:t="workEmail";break;case j.Home:t="email"}var n=r[t];e.value&&(Array.isArray(n)?n.push(e.value):r[t]=[e.value])}),e.address&&Object.entries(e.address).forEach(([e,t])=>{var n="homeAddress";switch(e){case"home":n="homeAddress";break;case"work":n="workAddress"}t.streetAddress&&(r[n].street=t.streetAddress),t.locality&&(r[n].city=t.locality),t.postalCode&&(r[n].postalCode=t.postalCode),t.stateProvince&&(r[n].stateProvince=t.stateProvince),e=[],t.region&&e.push(t.region),t.country&&e.push(t.country),(t=e.map(e=>e.trim()).filter(e=>!!e).join(", "))&&(r[n].countryRegion=t)}),e.note&&(r.note=e.note),e.company&&(r.organization=e.company);var a=(e,r,a,o)=>{var i="item"+n++;t.push(F.Property.fromJSON([r,{group:i},"text",e])),t.push(F.Property.fromJSON(["xAbLabel",{group:i},"text",o])),i="item"+n++,t.push(F.Property.fromJSON(["impp",{group:i,xServiceType:o},"text",`${a}:${e}`])),t.push(F.Property.fromJSON(["xAbLabel",{group:i},"text",o]))};e.social&&e.social.forEach(e=>{if(e.value&&e.type)switch(e.type){case V.Messenger:t.push(F.Property.fromJSON(["xSocialprofile",{type:"messenger",xUser:e.value},"text","x-apple:messenger"]));var o="item"+n++;t.push(F.Property.fromJSON(["impp",{group:o,xServiceType:"Facebook"},"text",`xmpp:${e.value}`])),t.push(F.Property.fromJSON(["xAbLabel",{group:o},"text","Facebook"]));break;case V.Twitter:case V.Facebook:case V.LinkedIn:case V.SinaWeibo:(o=function({value:e,type:r}){if(e=e?.trim(),!e?.match(/^https?:\/\//im))try{let t=new URL(J[r]);t.pathname=(t.pathname+"/"+e).replace(/[\/\\]+/g,"/"),e=t.toString()}catch{return}return e}(e))&&(r.socialUrls[e.type]=o);break;case V.Jabber:a(e.value,"xJabber","xmpp","Jabber");break;case V.QQ:a(e.value,"xQq","x-apple","QQ");break;case V.GaduGadu:a(e.value,"xGaduGadu","x-apple","GaduGadu")}}),e.website?.company&&(r.workUrl=e.website.company),e.website?.personal&&(r.url=e.website.personal),this.uuid&&(r.uid=this.uuid);var o=F.parse(r.getFormattedString())[0];return t.forEach(e=>o.addProperty(e)),o.toString("3.0").replace(/X-SOCIALPROFILE;CHARSET=UTF-8;/gi,"X-SOCIALPROFILE;").replace(/X-AB-LABEL/gi,"X-ABLabel").replace(/X-SOCIALPROFILE;(TYPE=[^:]*?):/gi,(e,r)=>e.replace(r,r.toLowerCase().replace("type=messenger","type=Messenger"))).replace(/;TYPE=OTHER[^;:]*?([;:])/gi,(e,r)=>r)}}export{j as AddressType,M as PhoneType,V as SocialType};
|
|
1
|
+
function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function r(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var r=e.default;if("function"==typeof r){var t=function e(){return this instanceof e?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}),t}var t=r(Object.freeze({__proto__:null,default:{}}));function o(e,r){for(var t=0,o=e.length-1;o>=0;o--){var n=e[o];"."===n?e.splice(o,1):".."===n?(e.splice(o,1),t++):t&&(e.splice(o,1),t--)}if(r)for(;t--;t)e.unshift("..");return e}var n=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;function a(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:"/";if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");n&&(e=n+"/"+e,r="/"===n.charAt(0))}return(r?"/":"")+(e=o(d(e.split("/"),function(e){return!!e}),!r).join("/"))||"."}function i(e){var r=s(e),t="/"===v(e,-1);return(e=o(d(e.split("/"),function(e){return!!e}),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e}function s(e){return"/"===e.charAt(0)}function u(){return i(d(Array.prototype.slice.call(arguments,0),function(e){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function l(e,r){function t(e){for(var r=0;r<e.length&&""===e[r];r++);for(var t=e.length-1;t>=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=a(e).substr(1),r=a(r).substr(1),e=t(e.split("/")),r=t(r.split("/"));for(var o=Math.min(e.length,r.length),n=o,i=0;i<o;i++)if(e[i]!==r[i]){n=i;break}for(o=[],i=n;i<e.length;i++)o.push("..");return(o=o.concat(r.slice(n))).join("/")}function p(e){var r=n.exec(e).slice(1);return e=r[0],r=r[1],e||r?(r&&=r.substr(0,r.length-1),e+r):"."}function h(e,r){return e=n.exec(e).slice(1)[2],r&&e.substr(-1*r.length)===r&&(e=e.substr(0,e.length-r.length)),e}function c(e){return n.exec(e).slice(1)[3]}var f={extname:c,basename:h,dirname:p,sep:"/",delimiter:":",relative:l,join:u,isAbsolute:s,normalize:i,resolve:a};function d(e,r){if(e.filter)return e.filter(r);for(var t=[],o=0;o<e.length;o++)r(e[o],o,e)&&t.push(e[o]);return t}var m,y,g,v="b"==="ab".substr(-1)?function(e,r,t){return e.substr(r,t)}:function(e,r,t){return r<0&&(r=e.length+r),e.substr(r,t)},E=r(Object.freeze({__proto__:null,basename:h,default:f,delimiter:":",dirname:p,extname:c,isAbsolute:s,join:u,normalize:i,relative:l,resolve:a,sep:"/"})),b={exports:{}};function A(){return m||(m=1,function(){function e(e){return e?("string"!=typeof e&&(e=""+e),e.replace(/\\/g,"\\\\").replace(/\n/g,"\\n").replace(/,/g,"\\,")):""}function r(r){return r?e(r).replace(/;/g,"\\;"):""}function t(e,r,t){if(e=e+((r=r.filter(Boolean).join(";"))?";"+r:"")+":"+t,s<3)return e+"\r\n";for(t=75,r=[];e.length>t;)r.push(e.slice(0,t)),e=e.slice(t),t=74;return r.push(e),r.join("\r\n ")+"\r\n"}function o(r,o){var n=[],a=o.mediaType,i=a;if(a.includes("/")?a=a.split("/")[1]:i="image/"+a,s>=4){if(n.push("VALUE=uri"),n.push("MEDIATYPE="+i),o.base64)return t(r,n,e("data:"+i+";base64,"+o.url))}else 3===s?(o.base64?n.push("ENCODING=b"):n.push("VALUE=uri"),n.push("TYPE="+a.toUpperCase())):o.base64?(n.push("ENCODING=b"),n.push("TYPE="+a.toUpperCase())):n.push("VALUE=URL");return r=t(r,n,e(o.url)),o.base64&&s<3?r+"\r\n":r}function n(e,r){return t(e,s>=4?["VALUE=date-and-or-time"]:[],""+r.getFullYear()+"-"+("0"+(r.getMonth()+1)).slice(-2)+"-"+(r=("0"+r.getDate()).slice(-2)))}function a(r,o,n=!1){var a=[];return s>=4?(a.push("TYPE="+r.toUpperCase()),n&&a.push("PREF=1")):s>=3?((r=[r.toUpperCase()]).push("INTERNET"),n&&r.push("PREF"),a.push("TYPE="+r.join(","))):("other"!=r&&a.push(r.toUpperCase()),a.push("INTERNET"),n&&a.push("PREF"),a.push("CHARSET=utf-8")),t("EMAIL",a,e(o))}function i(r,o,n,a=!1){var i=[];return s>=4?(i.push("TYPE="+(n?'"'+n.toUpperCase()+","+r.toUpperCase()+'"':r.toUpperCase())),a&&i.push("PREF=1"),i.push("VALUE=uri"),t("TEL",i,"tel:"+e(o))):(s>=3?(r=[r.toUpperCase()],n&&r.unshift(n.toUpperCase()),a&&r.push("PREF"),i.push("TYPE="+r.join(","))):(i.push(r.toUpperCase()),n&&i.unshift(n.toUpperCase()),a&&i.push("PREF")),t("TEL",i,e(o)))}var s=3;b.exports={getFormattedString:function(u){s=u.getMajorVersion();var l="";l+=t("BEGIN",[],"VCARD"),l+=t("VERSION",[],u.version);var p=s>=3?[]:["CHARSET=utf-8"],h=u.formattedName;if(h||=[u.firstName,u.middleName,u.lastName].filter(Boolean).join(" "),l+=t("FN",p,e(h)),l+=t("N",p,[u.lastName,u.firstName,u.middleName,u.namePrefix,u.nameSuffix].map(r).join(";")),u.nickname&&s>=3&&(l+=t("NICKNAME",p,e(u.nickname))),u.gender&&s>=4&&(l+=t("GENDER",p,e(u.gender))),u.uid&&(l+=t("UID",p,e(u.uid))),u.birthday&&(l+=n("BDAY",u.birthday)),u.anniversary&&s>=4&&(l+=n("ANNIVERSARY",u.anniversary)),u.email&&(Array.isArray(u.email)||(u.email=[u.email]),u.email.forEach(function(e){l+=a("home",e)})),u.workEmail&&(Array.isArray(u.workEmail)||(u.workEmail=[u.workEmail]),u.workEmail.forEach(function(e){l+=a("work",e)})),u.otherEmail&&(Array.isArray(u.otherEmail)||(u.otherEmail=[u.otherEmail]),u.otherEmail.forEach(function(e){l+=a("other",e)})),u.logo.url&&(l+=o("LOGO",u.logo)),u.photo.url&&(l+=o("PHOTO",u.photo)),u.cellPhone&&(Array.isArray(u.cellPhone)||(u.cellPhone=[u.cellPhone]),u.cellPhone.forEach(function(e){l+=i("cell",e)})),u.pagerPhone&&(Array.isArray(u.pagerPhone)||(u.pagerPhone=[u.pagerPhone]),u.pagerPhone.forEach(function(e){l+=i("pager",e)})),u.homePhone&&(Array.isArray(u.homePhone)||(u.homePhone=[u.homePhone]),u.homePhone.forEach(function(e){l+=i("voice",e,"home")})),u.workPhone&&(Array.isArray(u.workPhone)||(u.workPhone=[u.workPhone]),u.workPhone.forEach(function(e){l+=i("voice",e,"work")})),u.homeFax&&(Array.isArray(u.homeFax)||(u.homeFax=[u.homeFax]),u.homeFax.forEach(function(e){l+=i("fax",e,"home")})),u.workFax&&(Array.isArray(u.workFax)||(u.workFax=[u.workFax]),u.workFax.forEach(function(e){l+=i("fax",e,"work")})),u.otherPhone&&(Array.isArray(u.otherPhone)||(u.otherPhone=[u.otherPhone]),u.otherPhone.forEach(function(e){l+=i("voice",e)})),[{details:u.homeAddress,type:"home"},{details:u.workAddress,type:"work"}].forEach(function(o){l+=function(o,n,a=!1){var i=[];if(n.label||n.street||n.city||n.stateProvince||n.postalCode||n.countryRegion){let u=[];s>=4?(u.push("TYPE="+o.toUpperCase()),a&&u.push("PREF=1"),n.label&&u.push('LABEL="'+e(n.label)+'"')):(s>=3?(o=[o.toUpperCase()],a&&o.push("PREF"),u.push("TYPE="+o.join(","))):(u.push(o.toUpperCase()),a&&u.push("PREF"),u.push("CHARSET=utf-8")),n.label&&i.push(t("LABEL",u,e(n.label)))),i.push(t("ADR",u,["","",n.street,n.city,n.stateProvince,n.postalCode,n.countryRegion].map(r).join(";")))}return i.join("")}(o.type,o.details)}),u.title&&(l+=t("TITLE",p,e(u.title))),u.role&&(l+=t("ROLE",p,e(u.role))),u.organization&&(l+=t("ORG",p,e(u.organization))),u.url&&(Array.isArray(u.url)||(u.url=[u.url]),u.url.forEach(r=>{l+=t("URL",p,e(r))})),u.workUrl&&(l+=t("URL",["TYPE=WORK"].concat(p),e(u.workUrl))),u.note&&(l+=t("NOTE",p,e(u.note))),u.socialUrls)for(let r in u.socialUrls)u.socialUrls.hasOwnProperty(r)&&u.socialUrls[r]&&(l+=t("X-SOCIALPROFILE",["TYPE="+r],e(u.socialUrls[r])));return u.source&&(l+=t("SOURCE",p,e(u.source))),l+=t("REV",[],(new Date).toISOString()),u.isOrganization&&(l+=t("X-ABShowAs",[],"COMPANY")),l+=t("END",[],"VCARD")}}}()),b.exports}g||(g=1,y=function(){function e(){return{url:"",mediaType:"",base64:!1,attachFromUrl:function(e,r){this.url=e,this.mediaType=r,this.base64=!1},embedFromFile:function(e){this.mediaType=E.extname(e).replace(/\./g,""),this.url=t.readFileSync(e).toString("base64"),this.base64=!0},embedFromString:function(e,r){this.mediaType=r,this.url=e,this.base64=!0}}}return{uid:"",anniversary:void 0,birthday:void 0,cellPhone:"",pagerPhone:"",email:"",workEmail:"",firstName:"",formattedName:"",gender:void 0,homeAddress:{label:"",street:"",city:"",stateProvince:"",postalCode:"",countryRegion:""},homePhone:"",homeFax:"",lastName:"",logo:e(),middleName:"",namePrefix:"",nameSuffix:"",nickname:void 0,note:"",organization:"",photo:e(),role:"",socialUrls:{facebook:"",linkedIn:"",twitter:"",flickr:""},source:"",title:"",url:"",workUrl:"",workAddress:{label:"",street:"",city:"",stateProvince:"",postalCode:"",countryRegion:""},workPhone:"",workFax:"",version:"3.0",getMajorVersion:function(){var e=this.version?this.version.split(".")[0]:"4";return isNaN(e)?4:parseInt(e)},getFormattedString:function(){return A().getFormattedString(this)},saveToFile:function(e){var r=A().getFormattedString(this);t.writeFileSync(e,r,{encoding:"utf8"})}}});var w,P,x=e(y);var k,C,O,S,N,L={exports:{}};function R(){function e(r,t,o){if(!(this instanceof e))return new e(t);null!=o&&Object.assign(this,o),this._field=r,this._data=t,Object.defineProperty(this,"_field",{enumerable:!1}),Object.defineProperty(this,"_data",{enumerable:!1})}function r(e){return e.replace(/([A-Z])/g,"-$1").toUpperCase()}return O?C:(O=1,e.fromJSON=function(r){var t=r[0],o=r[1];return/text/i.test(r[2])||(o.value=r[2]),new e(t,r=Array.isArray(r[3])?r[3].join(";"):r[3],o)},e.prototype={constructor:e,is:function(e){return e=(e+"").toLowerCase(),Array.isArray(this.type)?this.type.indexOf(e)>=0:this.type===e},isEmpty:function(){return null==this._data&&0===Object.keys(this).length},clone:function(){return new e(this._field,this._data,this)},toString:function(e){for(var t=(this.group?this.group+".":"")+r(this._field),o=Object.keys(this),n=[],a=0;a<o.length;a++)if("group"!==o[a])switch(t){case"TEL":case"ADR":case"EMAIL":"2.1"===e?Array.isArray(this[o[a]])?n.push(this[o[a]].join(";")):n.push(this[o[a]]):n.push(r(o[a])+"="+this[o[a]]);break;default:n.push(r(o[a])+"="+this[o[a]])}return"2.1"===e||"3.0"===e?t+(n.length?";"+n.join(";").toUpperCase():n.toString().toUpperCase())+":"+(Array.isArray(this._data)?this._data.join(";"):this._data):t+(n.length?";"+n.join(";"):n)+":"+(Array.isArray(this._data)?this._data.join(";"):this._data)},valueOf:function(){return this._data},toJSON:function(){var e=Object.assign({},this);switch("text"===e.value&&(e.value=void 0,delete e.value),e=[this._field,e,this.value||"text"],this._field){default:e.push(this._data);break;case"adr":case"n":e.push(this._data.split(";"))}return e}},C=e)}function U(){function e(e,r,t){Array.isArray(e[r])?e[r].push(t):e[r]=null!=e[r]?[e[r],t]:t}function r(r,o){o=o.split("=");var n=t(o[0]),a=o[1];return null!=a&&""!==a||(a=o[0],n="type"),"type"===n?('"'===a[0]&&'"'===a[a.length-1]&&-1!==a.indexOf(",")&&(a=a.slice(1,-1)),a.toLowerCase().split(",").forEach(function(t){e(r,n,t)}),r):(e(r,n,a),r)}if(N)return S;N=1;var t=function(){if(k)return L.exports;k=1;var e=(e,r)=>{if("string"!=typeof e&&!Array.isArray(e))throw new TypeError("Expected the input to be `string | string[]`");return r=Object.assign({pascalCase:!1},r),e=Array.isArray(e)?e.map(e=>e.trim()).filter(e=>e.length).join("-"):e.trim(),0===e.length?"":1===e.length?r.pascalCase?e.toUpperCase():e.toLowerCase():(e!==e.toLowerCase()&&(e=(e=>{var r=!1,t=!1,o=!1;for(let n=0;n<e.length;n++){let a=e[n];r&&/[a-zA-Z]/.test(a)&&a.toUpperCase()===a?(e=e.slice(0,n)+"-"+e.slice(n),r=!1,o=t,t=!0,n++):t&&o&&/[a-zA-Z]/.test(a)&&a.toLowerCase()===a?(e=e.slice(0,n-1)+"-"+e.slice(n-1),o=t,t=!1,r=!0):(r=a.toLowerCase()===a&&a.toUpperCase()!==a,o=t,t=a.toUpperCase()===a&&a.toLowerCase()!==a)}return e})(e)),e=e.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(e,r)=>r.toUpperCase()).replace(/\d+(\w|$)/g,e=>e.toUpperCase()),t=e,r.pascalCase?t.charAt(0).toUpperCase()+t.slice(1):t);var t};return L.exports=e,L.exports.default=e,L.exports}(),o=R();return S=function(n){for(var a,i={},s=/^([^;:]+)((?:;(?:[^;:]+))*)(?::([\s\S]+))?$/i,u=n.length-1,l=1;l<u;l++){a=n[l];var p=s.exec(a);if(p){var h=p[1].split(".");a=h.pop();var c=h.pop();h=p[3],p=(p[2]?p[2].replace(/^;|;$/g,"").split(";"):[]).reduce(r,c?{group:c}:{}),e(i,a=t(a),h=new o(a,h,p))}}return i}}var j,T,F,I=e(function(){function e(){if(!(this instanceof e))return new e;this.version=e.versions[e.versions.length-1],this.data={}}return T?j:(T=1,e.mimeType="text/vcard",e.extension=".vcf",e.versions=["2.1","3.0","4.0"],e.EOL="\r\n",e.foldLine=function(){function e(e,r,t){if(null!=r&&r<2)throw Error("Maximum length must not be less than 2");if(null!=r&&r>998)throw Error("Maximum length must not exceed 998");if(r=r||78,(e=e.replace(/[\r\n]+/g,"")).length<=r)return e;for(var o="",n=0,a=0,i=e.length,s=0,u=0;n<i;){if(!t&&~(a=e.lastIndexOf(" ",n+r))?a>n?(o+=e.slice(n,a)+"\r\n ",n=a):(o+=e.slice(n,n+r-u)+"\r\n ",n=n+r-u,t=!0):(o+=e.slice(n,n+r-u)+"\r\n ",n=n+r-u),i-n<r){o+=e.slice(n);break}0===s&&(u=1),s++}return o}return P?w:(P=1,e.unfold=function(e){return e.replace(/\r\n\s/gm,"")},w=e)}(),e.normalize=function(e){return(e+"").replace(/^[\s\r\n]+|[\s\r\n]+$/g,"").replace(/(\r\n)[\x09\x20]?(\r\n)|$/g,"$1").replace(/\r\n[\x20\x09]/g,"")},e.isSupported=function(r){return/^\d\.\d$/.test(r)&&-1!==e.versions.indexOf(r)},e.parse=function(r){r=(r+"").split(/(?=BEGIN:VCARD)/gi);for(var t=[],o=0;o<r.length;o++)t.push((new e).parse(r[o]));return t},e.parseLines=U(),e.fromJSON=function(r){if(null==(r="string"==typeof r?JSON.parse(r):r)||!Array.isArray(r))return new e;if(!/vcard/i.test(r[0]))throw Error("Object not in jCard format");var t=new e;return r[1].forEach(function(r){t.addProperty(e.Property.fromJSON(r))}),t},e.format=function(r,t){if(t=t||r.version||e.versions[e.versions.length-1],!e.isSupported(t))throw Error('Unsupported vCard version "'+t+'"');var o=[];o.push("BEGIN:VCARD"),o.push("VERSION:"+t);for(var n,a=Object.keys(r.data),i=0;i<a.length;i++)if("version"!==a[i])if(n=r.data[a[i]],Array.isArray(n))for(var s=0;s<n.length;s++)n[s].isEmpty()||o.push(e.foldLine(n[s].toString(t),75));else n.isEmpty()||o.push(e.foldLine(n.toString(t),75));return o.push("END:VCARD"),o.join(e.EOL)},e.Property=R(),e.prototype={constructor:e,get:function(e){return null==this.data[e]?this.data[e]:Array.isArray(this.data[e])?this.data[e].map(function(e){return e.clone()}):this.data[e].clone()},set:function(r,t,o){return this.setProperty(new e.Property(r,t,o))},add:function(r,t,o){return r=new e.Property(r,t,o),this.addProperty(r),this},setProperty:function(e){return this.data[e._field]=e,this},addProperty:function(e){var r=e._field;return Array.isArray(this.data[r])?this.data[r].push(e):this.data[r]=null!=this.data[r]?[this.data[r],e]:e,this},parse:function(r){var t=(r=e.normalize(r).split(/\r\n/g))[0],o=r[1],n=r[r.length-1],a=/VERSION:\d\.\d/i;if(!/BEGIN:VCARD/i.test(t))throw new SyntaxError('Invalid vCard: Expected "BEGIN:VCARD" but found "'+t+'"');if(!/END:VCARD/i.test(n))throw new SyntaxError('Invalid vCard: Expected "END:VCARD" but found "'+n+'"');if(!a.test(o)&&!(o=r.find(e=>a.test(e))))throw new SyntaxError('Invalid vCard: Expected "VERSION:\\d.\\d" but none found');if(this.version=o.substring(8,11),!e.isSupported(this.version))throw Error('Unsupported version "'+this.version+'"');return this.data=e.parseLines(r),this},toString:function(r){return r=r||this.version,e.format(this,r)},toJCard:function(e){e=e||"4.0";var r=Object.keys(this.data);e=[["version",{},"text",e]];for(var t,o=0;o<r.length;o++)if("version"!==r[o])if(t=this.data[r[o]],Array.isArray(t))for(var n=0;n<t.length;n++)e.push(t[n].toJSON());else e.push(t.toJSON());return["vcard",e]},toJSON:function(){return this.toJCard(this.version)}},j=e)}()),_=F||={};_.Home="home",_.Work="work";var D,V=D||={};V.Home="home",V.Work="work",V.Cell="cell",V.Pager="pager";var J,G=J||={};G.Messenger="messenger",G.Twitter="twitter",G.Facebook="facebook",G.LinkedIn="linkedin",G.SinaWeibo="weibo",G.Jabber="jabber",G.QQ="qq",G.GaduGadu="gadu-gadu";var M={[J.Twitter]:"https://x.com/",[J.Facebook]:"https://www.facebook.com/",[J.LinkedIn]:"https://www.linkedin.com/in/",[J.SinaWeibo]:"https://weibo.com/n/",[J.Messenger]:"https://www.messenger.com/t/"};export default class{pluginOptions;uuid;constructor(e,r){this.pluginOptions=e,this.uuid=r}configure(e){return e.data=this.generateVCard(),e.qrOptions.mode=void 0,e}generateVCard(){var e=this.pluginOptions,r=x();r.version="3.0",r.formattedName=e.fullName;var t=[],o=1;if(e.name){let o=e.name;o.first&&(r.firstName=o.first),o.last&&(r.lastName=o.last),o.middle&&(r.middleName=o.middle),o.nick&&(r.nickname=o.nick,t.push(I.Property.fromJSON(["xAndroidCustom",{},"text",["vnd.android.cursor.item/nickname",o.nick,"1","","","","","","","","","","","","",""]]))),o.prefix&&(r.namePrefix=o.prefix),o.suffix&&(r.nameSuffix=o.suffix)}e.title&&(r.title=e.title),e.birthday&&(r.birthday=function(e){if(e)return"string"==typeof e?new Date(e):e}(e.birthday)),e.phone?.forEach(e=>{var t="otherPhone";switch(e.type){case D.Work:t="workPhone";break;case D.Cell:t="cellPhone";break;case D.Pager:t="pagerPhone";break;case D.Home:t="homePhone"}var o=r[t];e.value&&(Array.isArray(o)?o.push(e.value):r[t]=[e.value])}),e.email?.forEach(e=>{var t="otherEmail";switch(e.type){case F.Work:t="workEmail";break;case F.Home:t="email"}var o=r[t];e.value&&(Array.isArray(o)?o.push(e.value):r[t]=[e.value])}),e.address&&Object.entries(e.address).forEach(([e,t])=>{var o="homeAddress";switch(e){case"home":o="homeAddress";break;case"work":o="workAddress"}t.streetAddress&&(r[o].street=t.streetAddress),t.locality&&(r[o].city=t.locality),t.postalCode&&(r[o].postalCode=t.postalCode),t.stateProvince&&(r[o].stateProvince=t.stateProvince),e=[],t.region&&e.push(t.region),t.country&&e.push(t.country),(t=e.map(e=>e.trim()).filter(e=>!!e).join(", "))&&(r[o].countryRegion=t)}),e.note&&(r.note=e.note),e.company&&(r.organization=e.company);var n=(e,r,n,a)=>{var i="item"+o++;t.push(I.Property.fromJSON([r,{group:i},"text",e])),t.push(I.Property.fromJSON(["xAbLabel",{group:i},"text",a])),i="item"+o++,t.push(I.Property.fromJSON(["impp",{group:i,xServiceType:a},"text",`${n}:${e}`])),t.push(I.Property.fromJSON(["xAbLabel",{group:i},"text",a]))};e.social&&e.social.forEach(e=>{if(e.value&&e.type)switch(e.type){case J.Messenger:t.push(I.Property.fromJSON(["xSocialprofile",{type:"messenger",xUser:e.value},"text","x-apple:messenger"]));var a="item"+o++;t.push(I.Property.fromJSON(["impp",{group:a,xServiceType:"Facebook"},"text",`xmpp:${e.value}`])),t.push(I.Property.fromJSON(["xAbLabel",{group:a},"text","Facebook"]));break;case J.Twitter:case J.Facebook:case J.LinkedIn:case J.SinaWeibo:(a=function({value:e,type:r}){if(e=e?.trim(),!e?.match(/^https?:\/\//im))try{let t=new URL(M[r]);t.pathname=(t.pathname+"/"+e).replace(/[\/\\]+/g,"/"),e=t.toString()}catch{return}return e}(e))&&(r.socialUrls[e.type]=a);break;case J.Jabber:n(e.value,"xJabber","xmpp","Jabber");break;case J.QQ:n(e.value,"xQq","x-apple","QQ");break;case J.GaduGadu:n(e.value,"xGaduGadu","x-apple","GaduGadu")}}),e.website?.company&&(r.workUrl=e.website.company),e.website?.personal&&(r.url=e.website.personal),this.uuid&&(r.uid=this.uuid);var a=I.parse(r.getFormattedString())[0];return t.forEach(e=>a.addProperty(e)),a.toString("3.0").replace(/X-SOCIALPROFILE;CHARSET=UTF-8;/gi,"X-SOCIALPROFILE;").replace(/X-AB-LABEL/gi,"X-ABLabel").replace(/X-SOCIALPROFILE;(TYPE=[^:]*?):/gi,(e,r)=>e.replace(r,r.toLowerCase().replace("type=messenger","type=Messenger"))).replace(/;TYPE=OTHER[^;:]*?([;:])/gi,(e,r)=>r)}}export{F as AddressType,D as PhoneType,J as SocialType};
|
|
2
2
|
//# sourceMappingURL=vcard-plugin.js.map
|
package/lib/vcard-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcard-plugin.js","sources":["../node_modules/vcards-js/lib/vCardFormatter.js","../node_modules/vcards-js/index.js","../node_modules/vcf/lib/property.js","../node_modules/vcf/lib/parse-lines.js","../node_modules/camelcase/index.js","../src/plugins/vcard.ts","../node_modules/vcf/lib/vcard.js","../node_modules/foldline/foldline.js"],"sourcesContent":["/********************************************************************************\n vCards-js, Eric J Nesser, November 2014,\n ********************************************************************************/\n/*jslint node: true */\n'use strict';\n\n/**\n * vCard formatter for formatting vCards in VCF format\n */\n(function vCardFormatter() {\n\tvar majorVersion = '3';\n\n\t/**\n\t * Encode string\n\t * @param {String} value to encode\n\t * @return {String} encoded string\n\t */\n\tfunction e(value) {\n\t\tif (value) {\n\t\t\tif (typeof(value) !== 'string') {\n\t\t\t\tvalue = '' + value;\n\t\t\t}\n\t\t\treturn value.replace(/\\n/g, '\\\\n').replace(/,/g, '\\\\,').replace(/;/g, '\\\\;');\n\t\t}\n\t\treturn '';\n\t}\n\n\t/**\n\t * Return new line characters\n\t * @return {String} new line characters\n\t */\n\tfunction nl() {\n\t\treturn '\\r\\n';\n\t}\n\n\t/**\n\t * Get formatted photo\n\t * @param {String} photoType Photo type (PHOTO, LOGO)\n\t * @param {String} url URL to attach photo from\n\t * @param {String} mediaType Media-type of photo (JPEG, PNG, GIF)\n\t * @return {String} Formatted photo\n\t */\n\tfunction getFormattedPhoto(photoType, url, mediaType, base64) {\n\n\t\tvar params;\n\n\t\tif (majorVersion >= 4) {\n\t\t\tparams = base64 ? ';ENCODING=b;MEDIATYPE=image/' : ';MEDIATYPE=image/';\n\t\t} else if (majorVersion === 3) {\n\t\t\tparams = base64 ? ';ENCODING=b;TYPE=' : ';TYPE=';\n\t\t} else {\n\t\t\tparams = base64 ? ';ENCODING=BASE64;' : ';';\n\t\t}\n\n\t\tvar formattedPhoto = photoType + params + mediaType + ':' + e(url) + nl();\n\t\treturn formattedPhoto;\n\t}\n\n\t/**\n\t * Get formatted address\n\t * @param {object} address\n\t * @param {object} encoding prefix\n\t * @return {String} Formatted address\n\t */\n\tfunction getFormattedAddress(encodingPrefix, address) {\n\n\t\tvar formattedAddress = '';\n\n\t\tif (address.details.label ||\n\t\t\taddress.details.street ||\n\t\t\taddress.details.city ||\n\t\t\taddress.details.stateProvince ||\n\t\t\taddress.details.postalCode ||\n\t\t\taddress.details.countryRegion) {\n\n\t\t\tif (majorVersion >= 4) {\n\t\t\t\tformattedAddress = 'ADR' + encodingPrefix + ';TYPE=' + address.type +\n\t\t\t\t\t(address.details.label ? ';LABEL=\"' + e(address.details.label) + '\"' : '') + ':;;' +\n\t\t\t\t\te(address.details.street) + ';' +\n\t\t\t\t\te(address.details.city) + ';' +\n\t\t\t\t\te(address.details.stateProvince) + ';' +\n\t\t\t\t\te(address.details.postalCode) + ';' +\n\t\t\t\t\te(address.details.countryRegion) + nl();\n\t\t\t} else {\n\t\t\t\tif (address.details.label) {\n\t\t\t\t\tformattedAddress = 'LABEL' + encodingPrefix + ';TYPE=' + address.type + ':' + e(address.details.label) + nl();\n\t\t\t\t}\n\t\t\t\tformattedAddress += 'ADR' + encodingPrefix + ';TYPE=' + address.type + ':;;' +\n\t\t\t\t\te(address.details.street) + ';' +\n\t\t\t\t\te(address.details.city) + ';' +\n\t\t\t\t\te(address.details.stateProvince) + ';' +\n\t\t\t\t\te(address.details.postalCode) + ';' +\n\t\t\t\t\te(address.details.countryRegion) + nl();\n\n\t\t\t}\n\t\t}\n\n\t\treturn formattedAddress;\n\t}\n\n\t/**\n\t * Convert date to YYYYMMDD format\n\t * @param {Date} date to encode\n\t * @return {String} encoded date\n\t */\n\tfunction YYYYMMDD(date) {\n\t\treturn date.getFullYear() + ('0' + (date.getMonth()+1)).slice(-2) + ('0' + date.getDate()).slice(-2);\n\t}\n\n\tmodule.exports = {\n\n\t\t/**\n\t\t * Get formatted vCard in VCF format\n\t\t * @param {object} vCard object\n\t\t * @return {String} Formatted vCard in VCF format\n\t\t */\n\t\tgetFormattedString: function(vCard) {\n\n\t\t\tmajorVersion = vCard.getMajorVersion();\n\n\t\t\tvar formattedVCardString = '';\n\t\t\tformattedVCardString += 'BEGIN:VCARD' + nl();\n\t\t\tformattedVCardString += 'VERSION:' + vCard.version + nl();\n\n\t\t\tvar encodingPrefix = majorVersion >= 4 ? '' : ';CHARSET=UTF-8';\n\t\t\tvar formattedName = vCard.formattedName;\n\n\t\t\tif (!formattedName) {\n\t\t\t\tformattedName = '';\n\n\t\t\t\t[vCard.firstName, vCard.middleName, vCard.lastName]\n\t\t\t\t\t.forEach(function(name) {\n\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\tif (formattedName) {\n\t\t\t\t\t\t\t\tformattedName += ' ';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tformattedName += name;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tformattedVCardString += 'FN' + encodingPrefix + ':' + e(formattedName) + nl();\n\t\t\tformattedVCardString += 'N' + encodingPrefix + ':' +\n\t\t\t\te(vCard.lastName) + ';' +\n\t\t\t\te(vCard.firstName) + ';' +\n\t\t\t\te(vCard.middleName) + ';' +\n\t\t\t\te(vCard.namePrefix) + ';' +\n\t\t\t\te(vCard.nameSuffix) + nl();\n\n\t\t\tif (vCard.nickname && majorVersion >= 3) {\n\t\t\t\tformattedVCardString += 'NICKNAME' + encodingPrefix + ':' + e(vCard.nickname) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.gender) {\n\t\t\t\tformattedVCardString += 'GENDER:' + e(vCard.gender) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.uid) {\n\t\t\t\tformattedVCardString += 'UID' + encodingPrefix + ':' + e(vCard.uid) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.birthday) {\n\t\t\t\tformattedVCardString += 'BDAY:' + YYYYMMDD(vCard.birthday) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.anniversary) {\n\t\t\t\tformattedVCardString += 'ANNIVERSARY:' + YYYYMMDD(vCard.anniversary) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.email) {\n\t\t\t\tif(!Array.isArray(vCard.email)){\n\t\t\t\t\tvCard.email = [vCard.email];\n\t\t\t\t}\n\t\t\t\tvCard.email.forEach(\n\t\t\t\t\tfunction(address) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';type=HOME:' + e(address) + nl();\n\t\t\t\t\t\t} else if (majorVersion >= 3 && majorVersion < 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';type=HOME,INTERNET:' + e(address) + nl();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';HOME;INTERNET:' + e(address) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.workEmail) {\n\t\t\t\tif(!Array.isArray(vCard.workEmail)){\n\t\t\t\t\tvCard.workEmail = [vCard.workEmail];\n\t\t\t\t}\n\t\t\t\tvCard.workEmail.forEach(\n\t\t\t\t\tfunction(address) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';type=WORK:' + e(address) + nl();\n\t\t\t\t\t\t} else if (majorVersion >= 3 && majorVersion < 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';type=WORK,INTERNET:' + e(address) + nl();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';WORK;INTERNET:' + e(address) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.otherEmail) {\n\t\t\t\tif(!Array.isArray(vCard.otherEmail)){\n\t\t\t\t\tvCard.otherEmail = [vCard.otherEmail];\n\t\t\t\t}\n\t\t\t\tvCard.otherEmail.forEach(\n\t\t\t\t\tfunction(address) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';type=OTHER:' + e(address) + nl();\n\t\t\t\t\t\t} else if (majorVersion >= 3 && majorVersion < 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';type=OTHER,INTERNET:' + e(address) + nl();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'EMAIL' + encodingPrefix + ';OTHER;INTERNET:' + e(address) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.logo.url) {\n\t\t\t\tformattedVCardString += getFormattedPhoto('LOGO', vCard.logo.url, vCard.logo.mediaType, vCard.logo.base64);\n\t\t\t}\n\n\t\t\tif (vCard.photo.url) {\n\t\t\t\tformattedVCardString += getFormattedPhoto('PHOTO', vCard.photo.url, vCard.photo.mediaType, vCard.photo.base64);\n\t\t\t}\n\n\t\t\tif (vCard.cellPhone) {\n\t\t\t\tif(!Array.isArray(vCard.cellPhone)){\n\t\t\t\t\tvCard.cellPhone = [vCard.cellPhone];\n\t\t\t\t}\n\t\t\t\tvCard.cellPhone.forEach(\n\t\t\t\t\tfunction(number){\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"voice,cell\":tel:' + e(number) + nl();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=CELL:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.pagerPhone) {\n\t\t\t\tif(!Array.isArray(vCard.pagerPhone)){\n\t\t\t\t\tvCard.pagerPhone = [vCard.pagerPhone];\n\t\t\t\t}\n\t\t\t\tvCard.pagerPhone.forEach(\n\t\t\t\t\tfunction(number) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"pager,cell\":tel:' + e(number) + nl();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=PAGER:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.homePhone) {\n\t\t\t\tif(!Array.isArray(vCard.homePhone)){\n\t\t\t\t\tvCard.homePhone = [vCard.homePhone];\n\t\t\t\t}\n\t\t\t\tvCard.homePhone.forEach(\n\t\t\t\t\tfunction(number) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"voice,home\":tel:' + e(number) + nl();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=HOME,VOICE:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.workPhone) {\n\t\t\t\tif(!Array.isArray(vCard.workPhone)){\n\t\t\t\t\tvCard.workPhone = [vCard.workPhone];\n\t\t\t\t}\n\t\t\t\tvCard.workPhone.forEach(\n\t\t\t\t\tfunction(number) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"voice,work\":tel:' + e(number) + nl();\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=WORK,VOICE:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.homeFax) {\n\t\t\t\tif(!Array.isArray(vCard.homeFax)){\n\t\t\t\t\tvCard.homeFax = [vCard.homeFax];\n\t\t\t\t}\n\t\t\t\tvCard.homeFax.forEach(\n\t\t\t\t\tfunction(number) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"fax,home\":tel:' + e(number) + nl();\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=HOME,FAX:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.workFax) {\n\t\t\t\tif(!Array.isArray(vCard.workFax)){\n\t\t\t\t\tvCard.workFax = [vCard.workFax];\n\t\t\t\t}\n\t\t\t\tvCard.workFax.forEach(\n\t\t\t\t\tfunction(number) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"fax,work\":tel:' + e(number) + nl();\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=WORK,FAX:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (vCard.otherPhone) {\n\t\t\t\tif(!Array.isArray(vCard.otherPhone)){\n\t\t\t\t\tvCard.otherPhone = [vCard.otherPhone];\n\t\t\t\t}\n\t\t\t\tvCard.otherPhone.forEach(\n\t\t\t\t\tfunction(number) {\n\t\t\t\t\t\tif (majorVersion >= 4) {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;VALUE=uri;TYPE=\"voice,other\":tel:' + e(number) + nl();\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformattedVCardString += 'TEL;TYPE=OTHER:' + e(number) + nl();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t[{\n\t\t\t\tdetails: vCard.homeAddress,\n\t\t\t\ttype: 'HOME'\n\t\t\t}, {\n\t\t\t\tdetails: vCard.workAddress,\n\t\t\t\ttype: 'WORK'\n\t\t\t}].forEach(\n\t\t\t\tfunction(address) {\n\t\t\t\t\tformattedVCardString += getFormattedAddress(encodingPrefix, address);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (vCard.title) {\n\t\t\t\tformattedVCardString += 'TITLE' + encodingPrefix + ':' + e(vCard.title) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.role) {\n\t\t\t\tformattedVCardString += 'ROLE' + encodingPrefix + ':' + e(vCard.role) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.organization) {\n\t\t\t\tformattedVCardString += 'ORG' + encodingPrefix + ':' + e(vCard.organization) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.url) {\n\t\t\t\tformattedVCardString += 'URL' + encodingPrefix + ':' + e(vCard.url) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.workUrl) {\n\t\t\t\tformattedVCardString += 'URL;type=WORK' + encodingPrefix + ':' + e(vCard.workUrl) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.note) {\n\t\t\t\tformattedVCardString += 'NOTE' + encodingPrefix + ':' + e(vCard.note) + nl();\n\t\t\t}\n\n\t\t\tif (vCard.socialUrls) {\n\t\t\t\tfor (var key in vCard.socialUrls) {\n\t\t\t\t\tif (vCard.socialUrls.hasOwnProperty(key) &&\n\t\t\t\t\t\tvCard.socialUrls[key]) {\n\t\t\t\t\t\tformattedVCardString += 'X-SOCIALPROFILE' + encodingPrefix + ';TYPE=' + key + ':' + e(vCard.socialUrls[key]) + nl();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (vCard.source) {\n\t\t\t\tformattedVCardString += 'SOURCE' + encodingPrefix + ':' + e(vCard.source) + nl();\n\t\t\t}\n\n\t\t\tformattedVCardString += 'REV:' + (new Date()).toISOString() + nl();\n\t\t\t\n\t\t\tif (vCard.isOrganization) {\n\t\t\t\tformattedVCardString += 'X-ABShowAs:COMPANY' + nl();\n\t\t\t} \n\t\t\t\n\t\t\tformattedVCardString += 'END:VCARD' + nl();\n\t\t\treturn formattedVCardString;\n\t\t}\n\t};\n})();","/********************************************************************************\n vCards-js, Eric J Nesser, November 2014\n********************************************************************************/\n/*jslint node: true */\n'use strict';\n\n/**\n * Represents a contact that can be imported into Outlook, iOS, Mac OS, Android devices, and more\n */\nvar vCard = (function () {\n /**\n * Get photo object for storing photos in vCards\n */\n function getPhoto() {\n return {\n url: '',\n mediaType: '',\n base64: false,\n\n /**\n * Attach a photo from a URL\n * @param {string} url URL where photo can be found\n * @param {string} mediaType Media type of photo (JPEG, PNG, GIF)\n */\n attachFromUrl: function(url, mediaType) {\n this.url = url;\n this.mediaType = mediaType;\n this.base64 = false;\n },\n\n /**\n * Embed a photo from a file using base-64 encoding (not implemented yet)\n * @param {string} filename\n */\n embedFromFile: function(fileLocation) {\n var fs = require('fs');\n var path = require('path');\n this.mediaType = path.extname(fileLocation).toUpperCase().replace(/\\./g, \"\");\n var imgData = fs.readFileSync(fileLocation);\n this.url = imgData.toString('base64');\n this.base64 = true;\n },\n\n /**\n * Embed a photo from a base-64 string\n * @param {string} base64String\n */\n embedFromString: function(base64String, mediaType) {\n this.mediaType = mediaType;\n this.url = base64String;\n this.base64 = true;\n }\n };\n }\n\n /**\n * Get a mailing address to attach to a vCard.\n */\n function getMailingAddress() {\n return {\n /**\n * Represents the actual text that should be put on the mailing label when delivering a physical package\n * @type {String}\n */\n label: '',\n\n /**\n * Street address\n * @type {String}\n */\n street: '',\n\n /**\n * City\n * @type {String}\n */\n city: '',\n\n /**\n * State or province\n * @type {String}\n */\n stateProvince: '',\n\n /**\n * Postal code\n * @type {String}\n */\n postalCode: '',\n\n /**\n * Country or region\n * @type {String}\n */\n countryRegion: ''\n };\n }\n\n /**\n * Get social media URLs\n * @return {object} Social media URL hash group\n */\n function getSocialUrls() {\n return {\n 'facebook': '',\n 'linkedIn': '',\n 'twitter': '',\n 'flickr': ''\n };\n }\n\n /********************************************************************************\n * Public interface for vCard\n ********************************************************************************/\n return {\n\n /**\n * Specifies a value that represents a persistent, globally unique identifier associated with the vCard\n * @type {String}\n */\n uid: '',\n\n /**\n * Date of birth\n * @type {Datetime}\n */\n birthday: '',\n\n /**\n * Cell phone number\n * @type {String}\n */\n cellPhone: '',\n\n /**\n * Other cell phone number or pager\n * @type {String}\n */\n pagerPhone: '',\n\n /**\n * The address for private electronic mail communication\n * @type {String}\n */\n email: '',\n\n /**\n * The address for work-related electronic mail communication\n * @type {String}\n */\n workEmail: '',\n\n /**\n * First name\n * @type {String}\n */\n firstName: '',\n\n /**\n * Formatted name string associated with the vCard object (will automatically populate if not set)\n * @type {String}\n */\n formattedName: '',\n\n /**\n * Gender.\n * @type {String} Must be M or F for Male or Female\n */\n gender: '',\n\n /**\n * Home mailing address\n * @type {object}\n */\n homeAddress: getMailingAddress(),\n\n /**\n * Home phone\n * @type {String}\n */\n homePhone: '',\n\n /**\n * Home facsimile\n * @type {String}\n */\n homeFax: '',\n\n /**\n * Last name\n * @type {String}\n */\n lastName: '',\n\n /**\n * Logo\n * @type {object}\n */\n logo: getPhoto(),\n\n /**\n * Middle name\n * @type {String}\n */\n middleName: '',\n\n /**\n * Prefix for individual's name\n * @type {String}\n */\n namePrefix: '',\n\n /**\n * Suffix for individual's name\n * @type {String}\n */\n nameSuffix: '',\n\n /**\n * Nickname of individual\n * @type {String}\n */\n nickname: '',\n\n /**\n * Specifies supplemental information or a comment that is associated with the vCard\n * @type {String}\n */\n note: '',\n\n /**\n * The name and optionally the unit(s) of the organization associated with the vCard object\n * @type {String}\n */\n organization: '',\n\n /**\n * Individual's photo\n * @type {object}\n */\n photo: getPhoto(),\n\n /**\n * The role, occupation, or business category of the vCard object within an organization\n * @type {String}\n */\n role: '',\n\n /**\n * Social URLs attached to the vCard object (ex: Facebook, Twitter, LinkedIn)\n * @type {String}\n */\n socialUrls: getSocialUrls(),\n\n /**\n * A URL that can be used to get the latest version of this vCard\n * @type {String}\n */\n source: '',\n\n /**\n * Specifies the job title, functional position or function of the individual within an organization\n * @type {String}\n */\n title: '',\n\n /**\n * URL pointing to a website that represents the person in some way\n * @type {String}\n */\n url: '',\n\n /**\n * URL pointing to a website that represents the person's work in some way\n * @type {String}\n */\n workUrl: '',\n\n /**\n * Work mailing address\n * @type {object}\n */\n workAddress: getMailingAddress(),\n\n /**\n * Work phone\n * @type {String}\n */\n workPhone: '',\n\n /**\n * Work facsimile\n * @type {String}\n */\n workFax: '',\n\n /**\n * vCard version\n * @type {String}\n */\n version: '3.0',\n\n /**\n * Get major version of the vCard format\n * @return {integer}\n */\n getMajorVersion: function() {\n var majorVersionString = this.version ? this.version.split('.')[0] : '4';\n if (!isNaN(majorVersionString)) {\n return parseInt(majorVersionString);\n }\n return 4;\n },\n\n /**\n * Get formatted vCard\n * @return {String} Formatted vCard in VCF format\n */\n getFormattedString: function() {\n var vCardFormatter = require('./lib/vCardFormatter');\n return vCardFormatter.getFormattedString(this);\n },\n\n /**\n * Save formatted vCard to file\n * @param {String} filename\n */\n saveToFile: function(filename) {\n var vCardFormatter = require('./lib/vCardFormatter');\n var contents = vCardFormatter.getFormattedString(this);\n\n var fs = require('fs');\n fs.writeFileSync(filename, contents, { encoding: 'utf8' });\n }\n };\n});\n\nmodule.exports = vCard;\n","/**\n * vCard Property\n * @constructor\n * @memberOf vCard\n * @param {String} field\n * @param {String} value\n * @param {Object} params\n * @return {Property}\n */\nfunction Property( field, value, params ) {\n\n if( !(this instanceof Property) )\n return new Property( value )\n\n if( params != null )\n Object.assign( this, params )\n\n this._field = field\n this._data = value\n\n Object.defineProperty( this, '_field', { enumerable: false })\n Object.defineProperty( this, '_data', { enumerable: false })\n\n}\n\n/**\n * Constructs a vCard.Property from jCard data\n * @param {Array} data\n * @return {Property}\n */\nProperty.fromJSON = function( data ) {\n\n var field = data[0]\n var params = data[1]\n\n if( !/text/i.test( data[2] ) )\n params.value = data[2]\n\n var value = Array.isArray( data[3] ) ?\n data[3].join( ';' ) : data[3]\n\n return new Property( field, value, params )\n\n}\n\n/**\n * Turn a string into capitalized dash-case\n * @internal used by `Property#toString()`\n * @param {String} value\n * @return {String}\n * @ignore\n */\nfunction capitalDashCase( value ) {\n return value.replace( /([A-Z])/g, '-$1' ).toUpperCase()\n}\n\n/**\n * Property prototype\n * @type {Object}\n */\nProperty.prototype = {\n\n constructor: Property,\n\n /**\n * Check whether the property is of a given type\n * @param {String} type\n * @return {Boolean}\n */\n is: function( type ) {\n type = ( type + '' ).toLowerCase()\n return Array.isArray( this.type ) ?\n this.type.indexOf( type ) >= 0 :\n this.type === type\n },\n\n /**\n * Check whether the property is empty\n * @return {Boolean}\n */\n isEmpty: function() {\n return this._data == null &&\n Object.keys( this ).length === 0\n },\n\n /**\n * Clone the property\n * @return {Property}\n */\n clone: function() {\n return new Property( this._field, this._data, this )\n },\n\n /**\n * Format the property as vcf with given version\n * @param {String} version\n * @return {String}\n */\n toString: function( version ) {\n\n var propName = (this.group ? this.group + '.' : '') + capitalDashCase( this._field )\n var keys = Object.keys( this )\n var params = []\n\n for( var i = 0; i < keys.length; i++ ) {\n if (keys[i] === 'group') continue\n\n switch (propName) {\n case 'TEL':\n case 'ADR':\n case 'EMAIL':\n if (version === '2.1') {\n if (Array.isArray(this[keys[i]]))\n params.push(this[keys[i]].join(';'))\n else\n params.push(this[keys[i]])\n }\n else\n params.push(capitalDashCase(keys[i]) + '=' + this[keys[i]])\n break\n default:\n params.push(capitalDashCase(keys[i]) + '=' + this[keys[i]])\n }\n }\n\n if (version === '2.1' || version === '3.0')\n return propName +\n ( params.length ? ';' + params.join( ';' ).toUpperCase() : params.toString().toUpperCase() ) + ':' +\n ( Array.isArray( this._data ) ? this._data.join( ';' ) : this._data )\n else\n return propName +\n ( params.length ? ';' + params.join( ';' ) : params ) + ':' +\n ( Array.isArray( this._data ) ? this._data.join( ';' ) : this._data )\n\n },\n\n /**\n * Get the property's value\n * @return {String}\n */\n valueOf: function() {\n return this._data\n },\n\n /**\n * Format the property as jCard data\n * @return {Array}\n */\n toJSON: function() {\n\n var params = Object.assign({},this)\n\n if( params.value === 'text' ) {\n params.value = void 0\n delete params.value\n }\n\n var data = [ this._field, params, this.value || 'text' ]\n\n switch( this._field ) {\n default: data.push( this._data ); break\n case 'adr':\n case 'n':\n data.push( this._data.split( ';' ) )\n }\n\n return data\n\n },\n\n}\n\n// Exports\nmodule.exports = Property\n","var camelCase = require( 'camelcase' )\nvar Property = require( './property' )\n\nfunction set( object, key, value ) {\n if( Array.isArray( object[ key ] ) ) {\n object[ key ].push( value )\n } else if( object[ key ] != null ) {\n object[ key ] = [ object[ key ], value ]\n } else {\n object[ key ] = value\n }\n}\n\nfunction createParams( params, param ) {\n\n var parts = param.split( '=' )\n var k = camelCase( parts[0] )\n var value = parts[1]\n\n if( value == null || value === '' ) {\n value = parts[0]\n k = 'type'\n }\n\n if( k === 'type' ) {\n\n if (value[ 0 ] === '\"' && value[ value.length - 1 ] === '\"' && value.indexOf(',') !== -1)\n value = value.slice(1, -1)\n value.toLowerCase().split( ',' ).forEach( function( value ) {\n set( params, k, value )\n })\n\n return params\n\n }\n\n set( params, k, value )\n\n return params\n\n}\n\nfunction parseLines( lines ) {\n\n var data = {}\n\n // NOTE: Line format:\n // PROPERTY[;PARAMETER[=VALUE]]:Attribute[;Attribute]\n var line = null\n var pattern = /^([^;:]+)((?:;(?:[^;:]+))*)(?:\\:([\\s\\S]+))?$/i\n var len = lines.length - 1\n\n for( var i = 1; i < len; i++ ) {\n\n line = lines[i]\n\n var match = pattern.exec( line )\n if( !match ) continue;\n\n var name = match[1].split('.')\n var property = name.pop()\n var group = name.pop()\n var value = match[3]\n var params = match[2] ?\n match[2].replace( /^;|;$/g, '' ).split( ';' ) : []\n\n var propParams = params.reduce( createParams, group ? { group: group } : {})\n var propName = camelCase( property )\n var propVal = new Property( propName, value, propParams )\n\n set( data, propName, propVal )\n\n }\n\n return data\n\n}\n\nmodule.exports = parseLines\n","'use strict';\n\nconst preserveCamelCase = string => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = Object.assign({\n\t\tpascalCase: false\n\t}, options);\n\n\tconst postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n\t}\n\n\tconst hasUpperCase = input !== input.toLowerCase();\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input);\n\t}\n\n\tinput = input\n\t\t.replace(/^[_.\\- ]+/, '')\n\t\t.toLowerCase()\n\t\t.replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n\t\t.replace(/\\d+(\\w|$)/g, m => m.toUpperCase());\n\n\treturn postProcess(input);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","import VCard from 'vcards-js'\r\nimport vcf from 'vcf'\r\nimport { Options, Plugin } from '../utils/options.js'\r\n\r\nexport interface Address {\r\n streetAddress?: string\r\n locality?: string\r\n postalCode?: string\r\n stateProvince?: string\r\n region?: string\r\n country?: string\r\n}\r\n\r\nexport enum AddressType {\r\n Home = 'home',\r\n Work = 'work'\r\n}\r\n\r\nexport enum PhoneType {\r\n Home = 'home',\r\n Work = 'work',\r\n Cell = 'cell',\r\n Pager = 'pager'\r\n}\r\n\r\nexport enum SocialType {\r\n Messenger = 'messenger',\r\n Twitter = 'twitter',\r\n Facebook = 'facebook',\r\n LinkedIn = 'linkedin',\r\n SinaWeibo = 'weibo',\r\n Jabber = 'jabber',\r\n QQ = 'qq',\r\n GaduGadu = 'gadu-gadu'\r\n}\r\n\r\nfunction toDate(val?: string | Date) {\r\n if (!val)\r\n return\r\n if (typeof val == 'string')\r\n return new Date(val)\r\n return val\r\n}\r\n\r\nexport interface VCardPluginOptions {\r\n fullName: string\r\n name?: {\r\n first?: string\r\n last?: string\r\n middle?: string\r\n prefix?: string\r\n suffix?: string\r\n nick?: string\r\n }\r\n title?: string\r\n birthday?: Date | string\r\n phone?: Array<{ type?: `${PhoneType}`, value: string }>\r\n email?: Array<{ type?: `${AddressType}`, value: string }>\r\n address?: {\r\n work?: Address\r\n home?: Address\r\n }\r\n note?: string\r\n company?: string\r\n social?: Array<{ type: `${SocialType}`, value: string }>\r\n website?: {\r\n personal?: string\r\n company?: string\r\n }\r\n}\r\n\r\nexport default class VCardPlugin implements Plugin {\r\n\r\n constructor(\r\n private readonly pluginOptions: VCardPluginOptions,\r\n private readonly uuid?: string\r\n ) { }\r\n\r\n configure(options: Options): Options | undefined | void {\r\n options.data = this.generateVCard()\r\n // Auto mode\r\n options.qrOptions.mode = undefined\r\n return options\r\n }\r\n\r\n private generateVCard() {\r\n const data = this.pluginOptions\r\n const card = VCard()\r\n card.version = '3.0'\r\n\r\n card.formattedName = data.fullName\r\n\r\n const extraProps = new Array<vcf.Property>()\r\n let groupCounter = 1\r\n const getGroup = () => `item${groupCounter++}`\r\n\r\n if (data.name) {\r\n const n = data.name\r\n if (n.first)\r\n card.firstName = n.first\r\n if (n.last)\r\n card.lastName = n.last\r\n if (n.middle)\r\n card.middleName = n.middle\r\n if (n.nick) {\r\n card.nickname = n.nick\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAndroidCustom',\r\n {},\r\n 'text',\r\n ['vnd.android.cursor.item/nickname', n.nick, '1', '', '', '', '', '', '', '', '', '', '', '', '', '']\r\n ]))\r\n }\r\n if (n.prefix)\r\n card.namePrefix = n.prefix\r\n if (n.suffix)\r\n card.nameSuffix = n.suffix\r\n }\r\n\r\n if (data.title)\r\n card.title = data.title\r\n\r\n if (data.birthday)\r\n card.birthday = toDate(data.birthday)!\r\n\r\n data.phone?.forEach(el => {\r\n let key: 'workPhone' | 'cellPhone' | 'pagerPhone' | 'homePhone' | 'otherPhone' = 'otherPhone'\r\n switch (el.type) {\r\n case PhoneType.Work:\r\n key = 'workPhone'\r\n break\r\n\r\n case PhoneType.Cell:\r\n key = 'cellPhone'\r\n break\r\n\r\n case PhoneType.Pager:\r\n key = 'pagerPhone'\r\n break\r\n\r\n case PhoneType.Home:\r\n key = 'homePhone'\r\n break\r\n }\r\n const v = card[key]\r\n if (el.value) {\r\n if (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\r\n }\r\n })\r\n\r\n data.email?.forEach(el => {\r\n let key: 'workEmail' | 'email' | 'otherEmail' = 'otherEmail'\r\n switch (el.type) {\r\n case AddressType.Work:\r\n key = 'workEmail'\r\n break\r\n\r\n case AddressType.Home:\r\n key = 'email'\r\n break\r\n }\r\n const v = card[key]\r\n if (el.value) {\r\n if (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\r\n }\r\n })\r\n\r\n if (data.address) {\r\n Object.entries(data.address).forEach(([k, v]) => {\r\n let key: 'workAddress' | 'homeAddress' = 'homeAddress'\r\n switch (k) {\r\n case 'home':\r\n key = 'homeAddress'\r\n break\r\n\r\n case 'work':\r\n key = 'workAddress'\r\n break\r\n }\r\n if (v.streetAddress)\r\n card[key].street = v.streetAddress\r\n if (v.locality)\r\n card[key].city = v.locality\r\n if (v.postalCode)\r\n card[key].postalCode = v.postalCode\r\n if (v.stateProvince)\r\n card[key].stateProvince = v.stateProvince\r\n\r\n const cr = new Array<string>()\r\n if (v.region)\r\n cr.push(v.region)\r\n\r\n if (v.country)\r\n cr.push(v.country)\r\n\r\n const countryRegion = cr\r\n .map(p => p.trim())\r\n .filter(p => !!p)\r\n .join(', ')\r\n\r\n if (countryRegion)\r\n card[key].countryRegion = countryRegion\r\n })\r\n }\r\n\r\n if (data.note)\r\n card.note = data.note\r\n\r\n if (data.company)\r\n card.organization = data.company\r\n\r\n const pushMsgProtocol = (username: string, type: string, protocol: string, service: string) => {\r\n let group = getGroup()\r\n extraProps.push(vcf.Property.fromJSON([\r\n type,\r\n {\r\n group\r\n },\r\n 'text',\r\n username\r\n ]))\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAbLabel',\r\n {\r\n group\r\n },\r\n 'text',\r\n service\r\n ]))\r\n\r\n group = getGroup()\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'impp',\r\n {\r\n group,\r\n xServiceType: service\r\n },\r\n 'text',\r\n `${protocol}:${username}`\r\n ]))\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAbLabel',\r\n {\r\n group\r\n },\r\n 'text',\r\n service\r\n ]))\r\n }\r\n\r\n if (data.social)\r\n data.social.forEach((v) => {\r\n if (v.value && v.type)\r\n switch (v.type) {\r\n case SocialType.Messenger:\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xSocialprofile',\r\n {\r\n type: 'messenger',\r\n xUser: v.value\r\n },\r\n 'text',\r\n 'x-apple:messenger'\r\n ]))\r\n const group = getGroup()\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'impp',\r\n {\r\n group,\r\n xServiceType: 'Facebook'\r\n },\r\n 'text',\r\n `xmpp:${v.value}`\r\n ]))\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAbLabel',\r\n {\r\n group\r\n },\r\n 'text',\r\n 'Facebook'\r\n ]))\r\n break\r\n\r\n case SocialType.Twitter:\r\n case SocialType.Facebook:\r\n case SocialType.LinkedIn:\r\n case SocialType.SinaWeibo:\r\n const surl = getSocialUrl(v)\r\n if (surl)\r\n card.socialUrls[v.type] = surl\r\n break\r\n\r\n case SocialType.Jabber:\r\n pushMsgProtocol(v.value, 'xJabber', 'xmpp', 'Jabber')\r\n break\r\n\r\n case SocialType.QQ:\r\n pushMsgProtocol(v.value, 'xQq', 'x-apple', 'QQ')\r\n break\r\n\r\n case SocialType.GaduGadu:\r\n pushMsgProtocol(v.value, 'xGaduGadu', 'x-apple', 'GaduGadu')\r\n break\r\n }\r\n })\r\n\r\n if (data.website?.company)\r\n card.workUrl = data.website.company\r\n\r\n if (data.website?.personal)\r\n card.url = data.website.personal\r\n\r\n if (this.uuid)\r\n card.uid = this.uuid\r\n\r\n const parsed = vcf.parse(card.getFormattedString())[0]\r\n extraProps.forEach(prop => parsed.addProperty(prop))\r\n\r\n return parsed.toString('3.0')\r\n .replace(/X-SOCIALPROFILE;CHARSET=UTF-8;/gi, 'X-SOCIALPROFILE;')\r\n .replace(/X-AB-LABEL/gi, 'X-ABLabel')\r\n .replace(/X-SOCIALPROFILE;(TYPE=[^:]*?):/gi, (tx, m) => tx.replace(m, m.toLowerCase().replace('type=messenger', 'type=Messenger')))\r\n .replace(/;TYPE=OTHER[^;:]*?([;:])/ig, (_, m) => m)\r\n }\r\n}\r\n\r\nconst socialUrls = {\r\n [SocialType.Twitter]: 'https://x.com/',\r\n [SocialType.Facebook]: 'https://www.facebook.com/',\r\n [SocialType.LinkedIn]: 'https://www.linkedin.com/in/',\r\n [SocialType.SinaWeibo]: 'https://weibo.com/n/',\r\n [SocialType.Messenger]: 'https://www.messenger.com/t/'\r\n}\r\n\r\nfunction getSocialUrl({ value, type }: { value?: string, type?: `${SocialType}` }) {\r\n let val = value?.trim()\r\n if (!val?.match(/^https?:\\/\\//im)) {\r\n try {\r\n const u = new URL(socialUrls[type as keyof typeof socialUrls])\r\n u.pathname = (u.pathname + '/' + val).replace(/[\\/\\\\]+/g, '/')\r\n val = u.toString()\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n return val\r\n}\r\n\r\n","/**\n * vCard\n * @constructor\n * @return {vCard}\n */\nfunction vCard() {\n\n if( !(this instanceof vCard) )\n return new vCard()\n\n /** @type {String} Version number */\n this.version = vCard.versions[ vCard.versions.length - 1 ]\n /** @type {Object} Card data */\n this.data = {}\n\n}\n\n/**\n * vCard MIME type\n * @type {String}\n */\nvCard.mimeType = 'text/vcard'\n\n/**\n * vCard file extension\n * @type {String}\n */\nvCard.extension = '.vcf'\n\n/**\n * vCard versions\n * @type {Array}\n */\nvCard.versions = [ '2.1', '3.0', '4.0' ]\n\n/**\n * VCF EOL character sequence\n * @type {String}\n */\nvCard.EOL = '\\r\\n'\n\n/**\n * Folds a long line according to the RFC 5322.\n * @see http://tools.ietf.org/html/rfc5322#section-2.1.1\n * @param {String} input\n * @param {Number} maxLength\n * @param {Boolean} hardWrap\n * @return {String}\n */\nvCard.foldLine = require( 'foldline' )\n\n/**\n * Normalizes input (cast to string, line folding, whitespace)\n * @param {String} input\n * @return {String}\n */\nvCard.normalize = function( input ) {\n return ( input + '' )\n // Trim whitespace\n .replace( /^[\\s\\r\\n]+|[\\s\\r\\n]+$/g, '' )\n // Trim blank lines\n .replace( /(\\r\\n)[\\x09\\x20]?(\\r\\n)|$/g, '$1' )\n // Unfold folded lines\n .replace( /\\r\\n[\\x20\\x09]/g, \"\" )\n}\n\n/**\n * Check whether a given version is supported\n * @param {String} version\n * @return {Boolean}\n */\nvCard.isSupported = function( version ) {\n return /^\\d\\.\\d$/.test( version ) &&\n vCard.versions.indexOf( version ) !== -1\n}\n\n/**\n * Parses a string or buffer into a vCard object\n * @param {String|Buffer} value\n * @return {Array<vCard>}\n */\nvCard.parse = function( value ) {\n\n var objects = ( value + '' ).split( /(?=BEGIN\\:VCARD)/gi )\n var cards = []\n\n for( var i = 0; i < objects.length; i++ ) {\n cards.push( new vCard().parse( objects[i] ) )\n }\n\n return cards\n\n}\n\n/**\n * Parse an array of vcf formatted lines\n * @internal used by `vCard#parse()`\n * @type {Function}\n */\nvCard.parseLines = require( './parse-lines' )\n\n/**\n * Constructs a vCard from jCard data\n * @param {Array} jcard\n * @return {vCard}\n */\nvCard.fromJSON = function( jcard ) {\n\n jcard = typeof jcard === 'string' ?\n JSON.parse( jcard ) : jcard\n\n if( jcard == null || !Array.isArray( jcard ) )\n return new vCard()\n\n if( !/vcard/i.test( jcard[0] ) )\n throw new Error( 'Object not in jCard format' )\n\n var card = new vCard()\n\n jcard[1].forEach( function( prop ) {\n card.addProperty( vCard.Property.fromJSON( prop ) )\n })\n\n return card\n\n}\n\n/**\n * Format a card object according to the given version\n * @param {vCard} card\n * @param {String} version\n * @return {String}\n */\nvCard.format = function( card, version ) {\n\n version = version || card.version ||\n vCard.versions[ vCard.versions.length - 1 ]\n\n if( !vCard.isSupported( version ) )\n throw new Error( 'Unsupported vCard version \"' + version + '\"' )\n\n var vcf = []\n\n vcf.push( 'BEGIN:VCARD' )\n vcf.push( 'VERSION:' + version )\n\n var props = Object.keys( card.data )\n var prop = ''\n\n for( var i = 0; i < props.length; i++ ) {\n if( props[i] === 'version' ) continue;\n prop = card.data[ props[i] ]\n if( Array.isArray( prop ) ) {\n for( var k = 0; k < prop.length; k++ ) {\n if( prop[k].isEmpty() ) continue\n vcf.push( vCard.foldLine( prop[k].toString( version ), 75 ) )\n }\n } else if( !prop.isEmpty() ) {\n vcf.push( vCard.foldLine( prop.toString( version ), 75 ) )\n }\n }\n\n vcf.push( 'END:VCARD' )\n\n return vcf.join( vCard.EOL )\n\n}\n\n// vCard Property constructor\nvCard.Property = require( './property' )\n\n/**\n * vCard prototype\n * @type {Object}\n */\nvCard.prototype = {\n\n constructor: vCard,\n\n /**\n * Get a vCard property\n * @param {String} key\n * @return {Object|Array}\n */\n get: function( key ) {\n\n if( this.data[ key ] == null ) {\n return this.data[ key ]\n }\n\n if( Array.isArray( this.data[ key ] ) ) {\n return this.data[ key ].map( function( prop ) {\n return prop.clone()\n })\n } else {\n return this.data[ key ].clone()\n }\n\n },\n\n /**\n * Set a vCard property\n * @param {String} key\n * @param {String} value\n * @param {Object} params\n */\n set: function( key, value, params ) {\n return this.setProperty( new vCard.Property( key, value, params ) )\n },\n\n /**\n * Add a vCard property\n * @param {String} key\n * @param {String} value\n * @param {Object} params\n */\n add: function( key, value, params ) {\n var prop = new vCard.Property( key, value, params )\n this.addProperty( prop )\n return this\n },\n\n /**\n * Set a vCard property from an already\n * constructed vCard.Property\n * @param {vCard.Property} prop\n */\n setProperty: function( prop ) {\n this.data[ prop._field ] = prop\n return this\n },\n\n /**\n * Add a vCard property from an already\n * constructed vCard.Property\n * @param {vCard.Property} prop\n */\n addProperty: function( prop ) {\n\n var key = prop._field\n\n if( Array.isArray( this.data[ key ] ) ) {\n this.data[ key ].push( prop )\n } else if( this.data[ key ] != null ) {\n this.data[ key ] = [ this.data[ key ], prop ]\n } else {\n this.data[ key ] = prop\n }\n\n return this\n\n },\n\n /**\n * Parse a vcf formatted vCard\n * @param {String} value\n * @return {vCard}\n */\n parse: function( value ) {\n\n // Normalize & split\n var lines = vCard.normalize( value )\n .split( /\\r\\n/g )\n\n // Keep begin and end markers\n // for eventual error messages\n var begin = lines[0]\n var version = lines[1]\n var end = lines[ lines.length - 1 ]\n\n // Multiple used RegExp's\n const regexp_version = /VERSION:\\d\\.\\d/i\n\n if( !/BEGIN:VCARD/i.test( begin ) )\n throw new SyntaxError( 'Invalid vCard: Expected \"BEGIN:VCARD\" but found \"'+ begin +'\"' )\n\n if( !/END:VCARD/i.test( end ) )\n throw new SyntaxError( 'Invalid vCard: Expected \"END:VCARD\" but found \"'+ end +'\"' )\n\n if( !regexp_version.test( version ) ) {\n // VERSION mostly follows BEGIN, but it has only mandatory follow BEGIN, for version 4.0\n // Let's do the more expensive lookup for the lesser used version variant\n if( !(version = lines.find( line => regexp_version.test( line ) ) ) )\n throw new SyntaxError( 'Invalid vCard: Expected \"VERSION:\\\\d.\\\\d\" but none found' )\n // TODO: Do we need to throw an error if version = 4.0 or != 3.0|2.1? (because not followed BEGIN)?\n }\n\n this.version = version.substring( 8, 11 )\n\n if( !vCard.isSupported( this.version ) )\n throw new Error( 'Unsupported version \"' + this.version + '\"' )\n\n this.data = vCard.parseLines( lines )\n\n return this\n\n },\n\n /**\n * Format the vCard as vcf with given version\n * @param {String} version\n * @param {String} charset\n * @return {String}\n */\n toString: function( version, charset ) {\n version = version || this.version\n return vCard.format( this, version )\n },\n\n /**\n * Format the card as jCard\n * @param {String} version='4.0'\n * @return {Array} jCard\n */\n toJCard: function( version ) {\n\n version = version || '4.0'\n\n var keys = Object.keys( this.data )\n var data = [ [ 'version', {}, 'text', version ] ]\n var prop = null\n\n for( var i = 0; i < keys.length; i++ ) {\n if( keys[i] === 'version' ) continue;\n prop = this.data[ keys[i] ]\n if( Array.isArray( prop ) ) {\n for( var k = 0; k < prop.length; k++ ) {\n data.push( prop[k].toJSON() )\n }\n } else {\n data.push( prop.toJSON() )\n }\n }\n\n return [ 'vcard', data ]\n\n },\n\n /**\n * Format the card as jCard\n * @return {Array} jCard\n */\n toJSON: function() {\n return this.toJCard( this.version )\n },\n\n}\n\n// Exports\nmodule.exports = vCard\n","\nconst CRLF = '\\r\\n'\n\nconst SP = ' '\n\n\n/**\n * Maximum line length (excluding <CR><LF>)\n * There are two limits that RFC 5322 places on the number of\n * characters in a line. Each line of characters MUST be\n * no more than 998 characters, and SHOULD be no more\n * than 78 characters, excluding the <CR><LF>.\n * @type {Number}\n * @constant\n */\nconst MAX_LINE_LENGTH = 998\n\n/**\n * Default maximum line length (excluding <CR><LF>)\n * @type {Number}\n * @constant\n */\nconst DEFAULT_LINE_LENGTH = 78\n\n/**\n * Minimum `maxLength` that can be used\n * @type {Number}\n * @constant\n */\nconst MIN_LINE_LENGTH = 2\n\n/**\n * Folds a long line according to RFC 5322\n * @see http://tools.ietf.org/html/rfc5322#section-2.1.1\n *\n * @param {String} input - input string\n * @param {Number} maxLength - maximum line length (excluding CRLF)\n * @param {Boolean} hardWrap - whether to insert a hard break at `maxLength`\n * @returns {String}\n */\nfunction foldLine( input, maxLength, hardWrap ) {\n\n if( maxLength != null && maxLength < MIN_LINE_LENGTH ) {\n throw new Error( 'Maximum length must not be less than ' + MIN_LINE_LENGTH )\n }\n\n if( maxLength != null && maxLength > MAX_LINE_LENGTH ) {\n throw new Error( 'Maximum length must not exceed ' + MAX_LINE_LENGTH )\n }\n\n // RFC compliant default line length\n maxLength = maxLength || DEFAULT_LINE_LENGTH\n\n input = input.replace( /[\\r\\n]+/g, '' )\n\n // We really don't need to fold this\n if( input.length <= maxLength ) {\n return input\n }\n\n var output = ''\n var index = 0\n var nextIndex = 0\n var length = input.length\n var line = 0\n var trim = 0\n\n while( index < length ) {\n if( !hardWrap && ~( nextIndex = input.lastIndexOf( SP, index + maxLength ) ) ) {\n if( nextIndex > index ) {\n output += input.slice( index, nextIndex ) + CRLF + SP\n index = nextIndex\n } else {\n output += input.slice( index, index + maxLength - trim ) + CRLF + SP\n index = index + maxLength - trim\n hardWrap = true\n }\n } else {\n output += input.slice( index, index + maxLength - trim ) + CRLF + SP\n index = index + maxLength - trim\n }\n if( ( length - index ) < maxLength ) {\n output += input.slice( index )\n break\n }\n if( line === 0 ) {\n trim = 1\n }\n line++\n }\n\n return output\n\n}\n\nfoldLine.unfold = function unfold( input ) {\n return input.replace( /\\r\\n\\s/gm, '' )\n}\n\nmodule.exports = foldLine\n"],"names":["vCardFormatter$1","e","value","replace","nl","getFormattedPhoto","photoType","url","mediaType","base64","majorVersion","YYYYMMDD","date","getFullYear","getMonth","slice","getDate","vCardFormatterModule","getFormattedString","vCard","getMajorVersion","formattedVCardString","version","encodingPrefix","formattedName","firstName","middleName","lastName","forEach","name","namePrefix","nameSuffix","nickname","gender","uid","birthday","anniversary","email","Array","isArray","address","workEmail","otherEmail","logo","photo","cellPhone","number","pagerPhone","homePhone","workPhone","homeFax","workFax","otherPhone","details","homeAddress","type","workAddress","formattedAddress","label","street","city","stateProvince","postalCode","countryRegion","title","role","organization","workUrl","note","socialUrls","key","hasOwnProperty","source","toISOString","Date","isOrganization","vcardsJs","getPhoto","attachFromUrl","this","embedFromFile","fileLocation","require$$1","extname","toUpperCase","require$$0","readFileSync","toString","embedFromString","base64String","facebook","linkedIn","twitter","flickr","majorVersionString","split","parseInt","require$$2","saveToFile","filename","contents","writeFileSync","encoding","Property","field","params","Object","assign","_field","_data","defineProperty","enumerable","capitalDashCase","fromJSON","Property.fromJSON","data","test","join","prototype","constructor","is","toLowerCase","indexOf","isEmpty","keys","length","clone","propName","group","i","push","valueOf","toJSON","property","set","object","createParams","param","parts","k","camelCase","input","options","TypeError","pascalCase","map","x","trim","filter","string","isLastCharLower","isLastCharUpper","isLastLastCharUpper","character","preserveCamelCase","_","p1","m","charAt","postProcess","camelcaseModule","exports","default","parseLines_1","parseLines","lines","line","pattern","len","match","exec","pop","propParams","reduce","propVal","AddressType","versions","mimeType","extension","EOL","foldLine","maxLength","hardWrap","MIN_LINE_LENGTH","Error","MAX_LINE_LENGTH","DEFAULT_LINE_LENGTH","output","index","nextIndex","lastIndexOf","SP","CRLF","unfold","foldLine.unfold","foldline","normalize","vCard.normalize","isSupported","vCard.isSupported","parse","vCard.parse","objects","cards","vCard.fromJSON","jcard","JSON","card","prop","addProperty","format","vCard.format","vcf","props","get","setProperty","add","begin","end","regexp_version","SyntaxError","find","substring","toJCard","vcard","na","Home","Work","PhoneType","X","Cell","Pager","SocialType","Z","Messenger","Twitter","Facebook","LinkedIn","SinaWeibo","Jabber","QQ","GaduGadu","pluginOptions","uuid","configure","generateVCard","qrOptions","mode","undefined","VCard","fullName","extraProps","groupCounter","n","first","last","middle","nick","prefix","suffix","toDate","val","phone","el","v","entries","streetAddress","locality","region","cr","country","p","company","pushMsgProtocol","username","protocol","service","xServiceType","social","xUser","u","URL","pathname","getSocialUrl","surl","website","personal","parsed","tx"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,6,7]}
|
|
1
|
+
{"version":3,"file":"vcard-plugin.js","sources":["../node_modules/vcards-js/lib/vCardFormatter.js","../node_modules/vcards-js/index.js","../node_modules/vcf/lib/property.js","../node_modules/vcf/lib/parse-lines.js","../node_modules/camelcase/index.js","../src/plugins/vcard.ts","../node_modules/vcf/lib/vcard.js","../node_modules/foldline/foldline.js"],"sourcesContent":["/********************************************************************************\r\n vCards-js, Eric J Nesser, November 2014,\r\n ********************************************************************************/\r\n/*jslint node: true */\r\n\"use strict\";\r\n\r\n// vCard v2.1 (Internet Mail Consortium): https://web.archive.org/web/20150921154105/http://www.imc.org/pdi/vcard-21.rtf\r\n// vCard v3.0 (IETF): https://datatracker.ietf.org/doc/html/rfc2426\r\n// vCard v4.0 (IETF): https://datatracker.ietf.org/doc/html/rfc6350\r\n\r\n/**\r\n * vCard formatter for formatting vCards in VCF format\r\n */\r\n(function vCardFormatter()\r\n{\r\n\tlet majorVersion = 3;\r\n\r\n\t/**\r\n\t * Escape value string\r\n\t * @param {String} value string to encode\r\n\t * @return {String} encoded string\r\n\t */\r\n\tfunction e(value)\r\n\t{\r\n\t\tif (value)\r\n\t\t{\r\n\t\t\tif (typeof value !== \"string\")\r\n\t\t\t\tvalue = \"\" + value;\r\n\r\n\t\t\treturn value\r\n\t\t\t\t.replace(/\\\\/g, \"\\\\\\\\\") // backslash must be escaped\r\n\t\t\t\t.replace(/\\n/g, \"\\\\n\")\r\n\t\t\t\t.replace(/,/g, \"\\\\,\");\r\n\t\t}\r\n\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\t/**\r\n\t * Escape compund value string\r\n\t * @param {String} value string to encode\r\n\t * @return {String} encoded string\r\n\t */\r\n\tfunction ec(value)\r\n\t{\r\n\t\treturn value ? e(value).replace(/;/g, \"\\\\;\") : \"\";\r\n\t}\r\n\r\n\t/**\r\n\t * Return a content-line\r\n\t * A content-line ends with CRLF and contain lines with max 75 characters.\r\n\t * If content contain more characters, the content is split into \"folding\" lines which are separated by CRLF-WS\r\n\t * @param {String} prop one of the vCard property names\r\n\t * @param {Array.<String>} params parameters for the property\r\n\t * @param {String} value\r\n\t * @return {String} Formatted content-line\r\n\t */\r\n\tfunction contentLine(prop, params, value)\r\n\t{\r\n\t\tconst paramsString = params.filter(Boolean).join(\";\");\r\n\t\tlet content = prop + (paramsString ? \";\" + paramsString : \"\") + \":\" + value;\r\n\r\n\t\tif (majorVersion < 3)\r\n\t\t{\r\n\t\t\t// v2.1 defines folding on whitespaces and 76 which we don´t implemented yet\r\n\t\t\treturn content + \"\\r\\n\";\r\n\t\t}\r\n\r\n\t\tlet maxLineLength = 75;\r\n\t\tconst lines = [];\r\n\t\twhile (content.length > maxLineLength)\r\n\t\t{\r\n\t\t\tlines.push(content.slice(0, maxLineLength));\r\n\t\t\tcontent = content.slice(maxLineLength);\r\n\t\t\tmaxLineLength = 74; // respected the folding starting whitespace\r\n\t\t}\r\n\t\tlines.push(content);\r\n\r\n\t\treturn lines.join(\"\\r\\n \") + \"\\r\\n\";\r\n\t}\r\n\r\n\t/**\r\n\t * Get formatted photo content-line\r\n\t * @param {object} photo Photo object as of vCard.getPhoto()\r\n\t * @return {String} Formatted photo content-line\r\n\t */\r\n\tfunction getPhotoContentLine(prop, photo)\r\n\t{\r\n\t\tconst params = [];\r\n\r\n\t\tlet imageType = photo.mediaType;\r\n\t\tlet mediaType = imageType;\r\n\t\tif (imageType.includes(\"/\"))\r\n\t\t\timageType = imageType.split(\"/\")[1];\r\n\t\telse\r\n\t\t\tmediaType = \"image/\" + imageType;\r\n\r\n\t\tif (majorVersion >= 4)\r\n\t\t{\r\n\t\t\tparams.push(\"VALUE=uri\");\r\n\t\t\tparams.push(\"MEDIATYPE=\" + mediaType);\r\n\r\n\t\t\tif (photo.base64)\r\n\t\t\t\treturn contentLine(prop, params, e(\"data:\" + mediaType + \";base64,\" + photo.url));\r\n\t\t} else if (majorVersion === 3)\r\n\t\t{\r\n\t\t\tif (photo.base64)\r\n\t\t\t\tparams.push(\"ENCODING=b\");\r\n\t\t\telse\r\n\t\t\t\tparams.push(\"VALUE=uri\"); // a URI-referenced photo must declare VALUE=uri (RFC 2426 §3.1.4)\r\n\t\t\tparams.push(\"TYPE=\" + imageType.toUpperCase());\r\n\t\t} else\r\n\t\t{\r\n\t\t\tif (photo.base64)\r\n\t\t\t{\r\n\t\t\t\t// v2.1 does not know \"b\" and specifies it as \"BASE64\",\r\n\t\t\t\t// but outlook only support utf-8 via v2.1 charset definition and requires requires base64 encoding as \"b\"\r\n\t\t\t\t// thunderbird hadn´t issues when using v2.1 with \"ENCODING=b\", even it is not defined in spec\r\n\t\t\t\tparams.push(\"ENCODING=b\");\r\n\t\t\t\tparams.push(\"TYPE=\" + imageType.toUpperCase()); // v2.1 does not know PNG\r\n\t\t\t} else\r\n\t\t\t{\r\n\t\t\t\tparams.push(\"VALUE=URL\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst line = contentLine(prop, params, e(photo.url));\r\n\r\n\t\t// vCard 2.1 mandates that an inline base64 value is terminated by a blank line;\r\n\t\t// without it some parsers (notably Samsung devices) fail to import the card.\r\n\t\t// v3.0/4.0 fold the value like any other text and their RFC grammars forbid\r\n\t\t// blank lines, so the terminator is emitted for 2.1 only. See issue #58.\r\n\t\tif (photo.base64 && majorVersion < 3)\r\n\t\t\treturn line + \"\\r\\n\";\r\n\r\n\t\treturn line;\r\n\t}\r\n\r\n\t/**\r\n\t * Get formatted date attribute content-line\r\n\t * @param {String} prop\r\n\t * @param {Date} date\r\n\t * @return {String} Formatted date content-line\r\n\t */\r\n\tfunction getDateContentLine(prop, date)\r\n\t{\r\n\t\tconst params = majorVersion >= 4 ? [\"VALUE=date-and-or-time\"] : [];\r\n\r\n\t\tconst yyyy = \"\" + date.getFullYear();\r\n\t\tconst mm = (\"0\" + (date.getMonth() + 1)).slice(-2);\r\n\t\tconst dd = (\"0\" + date.getDate()).slice(-2);\r\n\t\t// ISO-8601 4.1.2.2 extended format which enables 4.1.2.3 a) \"reduced accuracy\" support\r\n\t\tconst formattedDate = yyyy + \"-\" + mm + \"-\" + dd;\r\n\r\n\t\treturn contentLine(prop, params, formattedDate);\r\n\t}\r\n\r\n\t/**\r\n\t * Get ADR content-line\r\n\t * @param {\"home\" | \"work\"} type\r\n\t * @param {object} addr Address object as of vCard.getMailingAddress()\r\n\t * @param {boolean} isPrimary\r\n\t * @return {String} Formatted address content-line\r\n\t */\r\n\tfunction getAddressPropLine(type, addr, isPrimary = false)\r\n\t{\r\n\t\tconst contentLines = [];\r\n\r\n\t\tif (addr.label || addr.street || addr.city || addr.stateProvince || addr.postalCode || addr.countryRegion)\r\n\t\t{\r\n\t\t\tconst params = [];\r\n\t\t\tif (majorVersion >= 4)\r\n\t\t\t{\r\n\t\t\t\tparams.push(\"TYPE=\" + type.toUpperCase());\r\n\t\t\t\tif (isPrimary)\r\n\t\t\t\t\tparams.push(\"PREF=1\");\r\n\t\t\t\tif (addr.label)\r\n\t\t\t\t\tparams.push(\"LABEL=\\\"\" + e(addr.label) + \"\\\"\");\r\n\t\t\t} else if (majorVersion >= 3)\r\n\t\t\t{\r\n\t\t\t\tconst types = [type.toUpperCase()];\r\n\t\t\t\tif (isPrimary) types.push(\"PREF\");\r\n\r\n\t\t\t\tparams.push(\"TYPE=\" + types.join(\",\"));\r\n\r\n\t\t\t\tif (addr.label)\r\n\t\t\t\t\tcontentLines.push(contentLine(\"LABEL\", params, e(addr.label)));\r\n\t\t\t} else\r\n\t\t\t{\r\n\t\t\t\tparams.push(type.toUpperCase());\r\n\t\t\t\tif (isPrimary) params.push(\"PREF\");\r\n\t\t\t\tparams.push(\"CHARSET=utf-8\");\r\n\r\n\t\t\t\tif (addr.label)\r\n\t\t\t\t\tcontentLines.push(contentLine(\"LABEL\", params, e(addr.label)));\r\n\t\t\t}\r\n\r\n\t\t\tconst values = [\"\", \"\", addr.street, addr.city, addr.stateProvince, addr.postalCode, addr.countryRegion];\r\n\t\t\tcontentLines.push(contentLine(\"ADR\", params, values.map(ec).join(\";\")));\r\n\t\t}\r\n\r\n\t\treturn contentLines.join(\"\");\r\n\t}\r\n\r\n\t/**\r\n\t * Get EMAIL content line\r\n\t * @param {\"home\" | \"work\" | \"other\"} type\r\n\t * @param {String} address\r\n\t * @param {boolean} isPrimary\r\n\t * @return {String} Formatted e-mail content-line\r\n\t */\r\n\tfunction getEmailPropLine(type, address, isPrimary = false)\r\n\t{\r\n\t\tconst params = [];\r\n\t\tif (majorVersion >= 4)\r\n\t\t{\r\n\t\t\tparams.push(\"TYPE=\" + type.toUpperCase());\r\n\t\t\tif (isPrimary) params.push(\"PREF=1\");\r\n\t\t} else if (majorVersion >= 3)\r\n\t\t{\r\n\t\t\tconst types = [type.toUpperCase()];\r\n\t\t\t// RFC does not define this distinction, but initial implementation contained it\r\n\t\t\ttypes.push(\"INTERNET\");\r\n\t\t\tif (isPrimary) types.push(\"PREF\");\r\n\r\n\t\t\tparams.push(\"TYPE=\" + types.join(\",\"));\r\n\t\t} else\r\n\t\t{\r\n\t\t\tif (type != \"other\") params.push(type.toUpperCase());\r\n\t\t\tparams.push(\"INTERNET\");\r\n\t\t\tif (isPrimary) params.push(\"PREF\");\r\n\t\t\tparams.push(\"CHARSET=utf-8\");\r\n\t\t}\r\n\r\n\t\treturn contentLine(\"EMAIL\", params, e(address));\r\n\t}\r\n\r\n\t/**\r\n\t * Get TEL content-line\r\n\t * @param {\"cell\" | \"voice\" | \"pager\" | \"fax\" } type\r\n\t * @param {String} tel\r\n\t * @param {\"home\" | \"work\" | undefined} target\r\n\t * @param {boolean} isPrimary\r\n\t * @return {String} Formatted tel content-line\r\n\t */\r\n\tfunction getTelPropLine(type, tel, target = undefined, isPrimary = false)\r\n\t{\r\n\t\t// supported types\r\n\t\t// v3: \"home\", \"work\", \"pref\", \"voice\", \"fax\", \"msg\", \"cell\", \"pager\", \"bbs\", \"modem\", \"car\", \"isdn\", \"video\", \"pcs\"\r\n\t\t// v4: \"text\", \"voice\", \"fax\", \"cell\", \"video\", \"pager\", \"textphone\" + special \"work\", \"home\"\r\n\t\tconst params = [];\r\n\r\n\t\tif (majorVersion >= 4)\r\n\t\t{\r\n\t\t\tparams.push(\r\n\t\t\t\t\"TYPE=\" + (target ? \"\\\"\" + target.toUpperCase() + \",\" + type.toUpperCase() + \"\\\"\" : type.toUpperCase())\r\n\t\t\t);\r\n\t\t\tif (isPrimary) params.push(\"PREF=1\");\r\n\t\t\tparams.push(\"VALUE=uri\");\r\n\r\n\t\t\t// value in URI format\r\n\t\t\treturn contentLine(\"TEL\", params, \"tel:\" + e(tel));\r\n\t\t} else if (majorVersion >= 3)\r\n\t\t{\r\n\t\t\tconst types = [type.toUpperCase()];\r\n\t\t\tif (target) types.unshift(target.toUpperCase());\r\n\t\t\tif (isPrimary) types.push(\"PREF\");\r\n\r\n\t\t\tparams.push(\"TYPE=\" + types.join(\",\"));\r\n\r\n\t\t\treturn contentLine(\"TEL\", params, e(tel));\r\n\t\t} else\r\n\t\t{\r\n\t\t\tparams.push(type.toUpperCase());\r\n\t\t\tif (target) params.unshift(target.toUpperCase());\r\n\t\t\tif (isPrimary) params.push(\"PREF\");\r\n\r\n\t\t\treturn contentLine(\"TEL\", params, e(tel));\r\n\t\t}\r\n\t}\r\n\r\n\tmodule.exports = {\r\n\t\t/**\r\n\t\t * Get formatted vCard in VCF format\r\n\t\t * @param {object} vCard object\r\n\t\t * @return {String} Formatted vCard in VCF format\r\n\t\t */\r\n\t\tgetFormattedString: function(vCard)\r\n\t\t{\r\n\t\t\tmajorVersion = vCard.getMajorVersion();\r\n\r\n\t\t\tlet formattedVCardString = \"\";\r\n\t\t\tformattedVCardString += contentLine(\"BEGIN\", [], \"VCARD\");\r\n\t\t\tformattedVCardString += contentLine(\"VERSION\", [], vCard.version);\r\n\r\n\t\t\t// As of RFC 2426 vCard 3.0 already dropped CHARSET type parameter.\r\n\t\t\t// Charset must be declared in Content-Type MIME header\r\n\t\t\tconst params = majorVersion >= 3 ? [] : [\"CHARSET=utf-8\"];\r\n\r\n\t\t\tlet formattedName = vCard.formattedName;\r\n\t\t\tif (!formattedName)\r\n\t\t\t\tformattedName = [vCard.firstName, vCard.middleName, vCard.lastName].filter(Boolean).join(\" \");\r\n\t\t\tformattedVCardString += contentLine(\"FN\", params, e(formattedName));\r\n\r\n\t\t\tconst nameParts = [vCard.lastName, vCard.firstName, vCard.middleName, vCard.namePrefix, vCard.nameSuffix];\r\n\t\t\tformattedVCardString += contentLine(\"N\", params, nameParts.map(ec).join(\";\"));\r\n\r\n\t\t\tif (vCard.nickname && majorVersion >= 3)\r\n\t\t\t\tformattedVCardString += contentLine(\"NICKNAME\", params, e(vCard.nickname));\r\n\r\n\t\t\tif (vCard.gender && majorVersion >= 4)\r\n\t\t\t\tformattedVCardString += contentLine(\"GENDER\", params, e(vCard.gender));\r\n\r\n\t\t\tif (vCard.uid)\r\n\t\t\t\tformattedVCardString += contentLine(\"UID\", params, e(vCard.uid));\r\n\r\n\t\t\tif (vCard.birthday)\r\n\t\t\t\tformattedVCardString += getDateContentLine(\"BDAY\", vCard.birthday);\r\n\r\n\t\t\tif (vCard.anniversary && majorVersion >= 4)\r\n\t\t\t\tformattedVCardString += getDateContentLine(\"ANNIVERSARY\", vCard.anniversary);\r\n\r\n\t\t\tif (vCard.email)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.email))\r\n\t\t\t\t\tvCard.email = [vCard.email];\r\n\t\t\t\tvCard.email.forEach(\r\n\t\t\t\t\tfunction(address)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getEmailPropLine(\"home\", address);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.workEmail)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.workEmail))\r\n\t\t\t\t\tvCard.workEmail = [vCard.workEmail];\r\n\t\t\t\tvCard.workEmail.forEach(\r\n\t\t\t\t\tfunction(address)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getEmailPropLine(\"work\", address);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.otherEmail)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.otherEmail))\r\n\t\t\t\t\tvCard.otherEmail = [vCard.otherEmail];\r\n\t\t\t\tvCard.otherEmail.forEach(\r\n\t\t\t\t\tfunction(address)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getEmailPropLine(\"other\", address);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.logo.url)\r\n\t\t\t\tformattedVCardString += getPhotoContentLine(\"LOGO\", vCard.logo);\r\n\r\n\t\t\tif (vCard.photo.url)\r\n\t\t\t\tformattedVCardString += getPhotoContentLine(\"PHOTO\", vCard.photo);\r\n\r\n\t\t\tif (vCard.cellPhone)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.cellPhone))\r\n\t\t\t\t\tvCard.cellPhone = [vCard.cellPhone];\r\n\t\t\t\tvCard.cellPhone.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"cell\", number);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.pagerPhone)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.pagerPhone))\r\n\t\t\t\t\tvCard.pagerPhone = [vCard.pagerPhone];\r\n\t\t\t\tvCard.pagerPhone.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"pager\", number);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.homePhone)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.homePhone))\r\n\t\t\t\t\tvCard.homePhone = [vCard.homePhone];\r\n\t\t\t\tvCard.homePhone.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"voice\", number, \"home\");\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.workPhone)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.workPhone))\r\n\t\t\t\t\tvCard.workPhone = [vCard.workPhone];\r\n\t\t\t\tvCard.workPhone.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"voice\", number, \"work\");\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.homeFax)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.homeFax))\r\n\t\t\t\t\tvCard.homeFax = [vCard.homeFax];\r\n\t\t\t\tvCard.homeFax.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"fax\", number, \"home\");\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.workFax)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.workFax))\r\n\t\t\t\t\tvCard.workFax = [vCard.workFax];\r\n\t\t\t\tvCard.workFax.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"fax\", number, \"work\");\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.otherPhone)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.otherPhone))\r\n\t\t\t\t\tvCard.otherPhone = [vCard.otherPhone];\r\n\t\t\t\tvCard.otherPhone.forEach(\r\n\t\t\t\t\tfunction(number)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getTelPropLine(\"voice\", number);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\t[\r\n\t\t\t\t{ details: vCard.homeAddress, type: \"home\" },\r\n\t\t\t\t{ details: vCard.workAddress, type: \"work\" }\r\n\t\t\t]\r\n\t\t\t\t.forEach(\r\n\t\t\t\t\tfunction(obj)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformattedVCardString += getAddressPropLine(obj.type, obj.details);\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\tif (vCard.title)\r\n\t\t\t\tformattedVCardString += contentLine(\"TITLE\", params, e(vCard.title));\r\n\r\n\t\t\tif (vCard.role)\r\n\t\t\t\tformattedVCardString += contentLine(\"ROLE\", params, e(vCard.role));\r\n\r\n\t\t\tif (vCard.organization)\r\n\t\t\t\tformattedVCardString += contentLine(\"ORG\", params, e(vCard.organization));\r\n\r\n\t\t\tif (vCard.url)\r\n\t\t\t{\r\n\t\t\t\tif (!Array.isArray(vCard.url))\r\n\t\t\t\t\tvCard.url = [vCard.url];\r\n\t\t\t\tvCard.url.forEach(url =>\r\n\t\t\t\t{\r\n\t\t\t\t\tformattedVCardString += contentLine(\"URL\", params, e(url));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.workUrl)\r\n\t\t\t\tformattedVCardString += contentLine(\"URL\", [\"TYPE=WORK\"].concat(params), e(vCard.workUrl));\r\n\r\n\t\t\tif (vCard.note)\r\n\t\t\t\tformattedVCardString += contentLine(\"NOTE\", params, e(vCard.note));\r\n\r\n\t\t\tif (vCard.socialUrls)\r\n\t\t\t{\r\n\t\t\t\tfor (const key in vCard.socialUrls)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (vCard.socialUrls.hasOwnProperty(key) && vCard.socialUrls[key])\r\n\t\t\t\t\t\tformattedVCardString += contentLine(\"X-SOCIALPROFILE\", [\"TYPE=\" + key], e(vCard.socialUrls[key]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (vCard.source)\r\n\t\t\t\tformattedVCardString += contentLine(\"SOURCE\", params, e(vCard.source));\r\n\r\n\t\t\tformattedVCardString += contentLine(\"REV\", [], (new Date()).toISOString());\r\n\r\n\t\t\tif (vCard.isOrganization)\r\n\t\t\t\tformattedVCardString += contentLine(\"X-ABShowAs\", [], \"COMPANY\");\r\n\r\n\t\t\tformattedVCardString += contentLine(\"END\", [], \"VCARD\");\r\n\r\n\t\t\treturn formattedVCardString;\r\n\t\t}\r\n\t};\r\n})();\r\n","/********************************************************************************\r\n vCards-js, Eric J Nesser, November 2014\r\n********************************************************************************/\r\n/*jslint node: true */\r\n'use strict';\r\n\r\n/**\r\n * Represents a contact that can be imported into Outlook, iOS, Mac OS, Android devices, and more\r\n */\r\nvar vCard = (function () {\r\n /**\r\n * Get photo object for storing photos in vCards\r\n */\r\n function getPhoto() {\r\n return {\r\n url: '',\r\n mediaType: '',\r\n base64: false,\r\n\r\n /**\r\n * Attach a photo from a URL\r\n * @param {string} url URL where photo can be found\r\n * @param {string} mediaType Media type of photo (JPEG, PNG, GIF)\r\n */\r\n attachFromUrl: function(url, mediaType) {\r\n this.url = url;\r\n this.mediaType = mediaType;\r\n this.base64 = false;\r\n },\r\n\r\n /**\r\n * Embed a photo from a file using base-64 encoding\r\n * @param {string} filename\r\n */\r\n embedFromFile: function(fileLocation) {\r\n var fs = require('fs');\r\n var path = require('path');\r\n this.mediaType = path.extname(fileLocation).replace(/\\./g, \"\");\r\n var imgData = fs.readFileSync(fileLocation);\r\n this.url = imgData.toString('base64');\r\n this.base64 = true;\r\n },\r\n\r\n /**\r\n * Embed a photo from a base-64 string\r\n * @param {string} base64String\r\n */\r\n embedFromString: function(base64String, mediaType) {\r\n this.mediaType = mediaType;\r\n this.url = base64String;\r\n this.base64 = true;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Get a mailing address to attach to a vCard.\r\n */\r\n function getMailingAddress() {\r\n return {\r\n /**\r\n * Represents the actual text that should be put on the mailing label when delivering a physical package\r\n * @type {String}\r\n */\r\n label: '',\r\n\r\n /**\r\n * Street address\r\n * @type {String}\r\n */\r\n street: '',\r\n\r\n /**\r\n * City\r\n * @type {String}\r\n */\r\n city: '',\r\n\r\n /**\r\n * State or province\r\n * @type {String}\r\n */\r\n stateProvince: '',\r\n\r\n /**\r\n * Postal code\r\n * @type {String}\r\n */\r\n postalCode: '',\r\n\r\n /**\r\n * Country or region\r\n * @type {String}\r\n */\r\n countryRegion: ''\r\n };\r\n }\r\n\r\n /**\r\n * Get social media URLs\r\n * @return {object} Social media URL hash group\r\n */\r\n function getSocialUrls() {\r\n return {\r\n 'facebook': '',\r\n 'linkedIn': '',\r\n 'twitter': '',\r\n 'flickr': ''\r\n };\r\n }\r\n\r\n /********************************************************************************\r\n * Public interface for vCard\r\n ********************************************************************************/\r\n return {\r\n\r\n /**\r\n * Specifies a value that represents a persistent, globally unique identifier associated with the vCard\r\n * @type {String}\r\n */\r\n uid: '',\r\n\r\n /**\r\n * Date of anniversary (v4+ only).\r\n * @type {Date | undefined}\r\n */\r\n anniversary: undefined,\r\n\r\n /**\r\n * Date of birth\r\n * @type {Date | undefined}\r\n */\r\n birthday: undefined,\r\n\r\n /**\r\n * Cell phone number\r\n * @type {String}\r\n */\r\n cellPhone: '',\r\n\r\n /**\r\n * Other cell phone number or pager\r\n * @type {String}\r\n */\r\n pagerPhone: '',\r\n\r\n /**\r\n * The address for private electronic mail communication\r\n * @type {String}\r\n */\r\n email: '',\r\n\r\n /**\r\n * The address for work-related electronic mail communication\r\n * @type {String}\r\n */\r\n workEmail: '',\r\n\r\n /**\r\n * First name\r\n * @type {String}\r\n */\r\n firstName: '',\r\n\r\n /**\r\n * Formatted name string associated with the vCard object (will automatically populate if not set)\r\n * @type {String}\r\n */\r\n formattedName: '',\r\n\r\n /**\r\n * Gender (v4+ only).\r\n * @type {\"M\" | \"F\" | \"O\" | \"N\" | \"U\" | undefined} (M)ale, (F)emale, (O)ther, (N)ot applicable, (U)nknown\r\n */\r\n gender: undefined,\r\n\r\n /**\r\n * Home mailing address\r\n * @type {object}\r\n */\r\n homeAddress: getMailingAddress(),\r\n\r\n /**\r\n * Home phone\r\n * @type {String}\r\n */\r\n homePhone: '',\r\n\r\n /**\r\n * Home facsimile\r\n * @type {String}\r\n */\r\n homeFax: '',\r\n\r\n /**\r\n * Last name\r\n * @type {String}\r\n */\r\n lastName: '',\r\n\r\n /**\r\n * Logo\r\n * @type {object}\r\n */\r\n logo: getPhoto(),\r\n\r\n /**\r\n * Middle name\r\n * @type {String}\r\n */\r\n middleName: '',\r\n\r\n /**\r\n * Prefix for individual's name\r\n * @type {String}\r\n */\r\n namePrefix: '',\r\n\r\n /**\r\n * Suffix for individual's name\r\n * @type {String}\r\n */\r\n nameSuffix: '',\r\n\r\n /**\r\n * Nickname of individual (v3+ only).\r\n * @type {String | undefined}\r\n */\r\n nickname: undefined,\r\n\r\n /**\r\n * Specifies supplemental information or a comment that is associated with the vCard\r\n * @type {String}\r\n */\r\n note: '',\r\n\r\n /**\r\n * The name and optionally the unit(s) of the organization associated with the vCard object\r\n * @type {String}\r\n */\r\n organization: '',\r\n\r\n /**\r\n * Individual's photo\r\n * @type {object}\r\n */\r\n photo: getPhoto(),\r\n\r\n /**\r\n * The role, occupation, or business category of the vCard object within an organization\r\n * @type {String}\r\n */\r\n role: '',\r\n\r\n /**\r\n * Social URLs attached to the vCard object (ex: Facebook, Twitter, LinkedIn)\r\n * @type {String}\r\n */\r\n socialUrls: getSocialUrls(),\r\n\r\n /**\r\n * A URL that can be used to get the latest version of this vCard\r\n * @type {String}\r\n */\r\n source: '',\r\n\r\n /**\r\n * Specifies the job title, functional position or function of the individual within an organization\r\n * @type {String}\r\n */\r\n title: '',\r\n\r\n /**\r\n * URL pointing to a website that represents the person in some way\r\n * @type {String}\r\n */\r\n url: '',\r\n\r\n /**\r\n * URL pointing to a website that represents the person's work in some way\r\n * @type {String}\r\n */\r\n workUrl: '',\r\n\r\n /**\r\n * Work mailing address\r\n * @type {object}\r\n */\r\n workAddress: getMailingAddress(),\r\n\r\n /**\r\n * Work phone\r\n * @type {String}\r\n */\r\n workPhone: '',\r\n\r\n /**\r\n * Work facsimile\r\n * @type {String}\r\n */\r\n workFax: '',\r\n\r\n /**\r\n * vCard version\r\n * @type {String}\r\n */\r\n version: '3.0',\r\n\r\n /**\r\n * Get major version of the vCard format\r\n * @return {integer}\r\n */\r\n getMajorVersion: function() {\r\n var majorVersionString = this.version ? this.version.split('.')[0] : '4';\r\n if (!isNaN(majorVersionString)) {\r\n return parseInt(majorVersionString);\r\n }\r\n return 4;\r\n },\r\n\r\n /**\r\n * Get formatted vCard\r\n * @return {String} Formatted vCard in VCF format\r\n */\r\n getFormattedString: function() {\r\n var vCardFormatter = require('./lib/vCardFormatter');\r\n return vCardFormatter.getFormattedString(this);\r\n },\r\n\r\n /**\r\n * Save formatted vCard to file\r\n * @param {String} filename\r\n */\r\n saveToFile: function(filename) {\r\n var vCardFormatter = require('./lib/vCardFormatter');\r\n var contents = vCardFormatter.getFormattedString(this);\r\n\r\n var fs = require('fs');\r\n fs.writeFileSync(filename, contents, { encoding: 'utf8' });\r\n }\r\n };\r\n});\r\n\r\nmodule.exports = vCard;\r\n","/**\n * vCard Property\n * @constructor\n * @memberOf vCard\n * @param {String} field\n * @param {String} value\n * @param {Object} params\n * @return {Property}\n */\nfunction Property( field, value, params ) {\n\n if( !(this instanceof Property) )\n return new Property( value )\n\n if( params != null )\n Object.assign( this, params )\n\n this._field = field\n this._data = value\n\n Object.defineProperty( this, '_field', { enumerable: false })\n Object.defineProperty( this, '_data', { enumerable: false })\n\n}\n\n/**\n * Constructs a vCard.Property from jCard data\n * @param {Array} data\n * @return {Property}\n */\nProperty.fromJSON = function( data ) {\n\n var field = data[0]\n var params = data[1]\n\n if( !/text/i.test( data[2] ) )\n params.value = data[2]\n\n var value = Array.isArray( data[3] ) ?\n data[3].join( ';' ) : data[3]\n\n return new Property( field, value, params )\n\n}\n\n/**\n * Turn a string into capitalized dash-case\n * @internal used by `Property#toString()`\n * @param {String} value\n * @return {String}\n * @ignore\n */\nfunction capitalDashCase( value ) {\n return value.replace( /([A-Z])/g, '-$1' ).toUpperCase()\n}\n\n/**\n * Property prototype\n * @type {Object}\n */\nProperty.prototype = {\n\n constructor: Property,\n\n /**\n * Check whether the property is of a given type\n * @param {String} type\n * @return {Boolean}\n */\n is: function( type ) {\n type = ( type + '' ).toLowerCase()\n return Array.isArray( this.type ) ?\n this.type.indexOf( type ) >= 0 :\n this.type === type\n },\n\n /**\n * Check whether the property is empty\n * @return {Boolean}\n */\n isEmpty: function() {\n return this._data == null &&\n Object.keys( this ).length === 0\n },\n\n /**\n * Clone the property\n * @return {Property}\n */\n clone: function() {\n return new Property( this._field, this._data, this )\n },\n\n /**\n * Format the property as vcf with given version\n * @param {String} version\n * @return {String}\n */\n toString: function( version ) {\n\n var propName = (this.group ? this.group + '.' : '') + capitalDashCase( this._field )\n var keys = Object.keys( this )\n var params = []\n\n for( var i = 0; i < keys.length; i++ ) {\n if (keys[i] === 'group') continue\n\n switch (propName) {\n case 'TEL':\n case 'ADR':\n case 'EMAIL':\n if (version === '2.1') {\n if (Array.isArray(this[keys[i]]))\n params.push(this[keys[i]].join(';'))\n else\n params.push(this[keys[i]])\n }\n else\n params.push(capitalDashCase(keys[i]) + '=' + this[keys[i]])\n break\n default:\n params.push(capitalDashCase(keys[i]) + '=' + this[keys[i]])\n }\n }\n\n if (version === '2.1' || version === '3.0')\n return propName +\n ( params.length ? ';' + params.join( ';' ).toUpperCase() : params.toString().toUpperCase() ) + ':' +\n ( Array.isArray( this._data ) ? this._data.join( ';' ) : this._data )\n else\n return propName +\n ( params.length ? ';' + params.join( ';' ) : params ) + ':' +\n ( Array.isArray( this._data ) ? this._data.join( ';' ) : this._data )\n\n },\n\n /**\n * Get the property's value\n * @return {String}\n */\n valueOf: function() {\n return this._data\n },\n\n /**\n * Format the property as jCard data\n * @return {Array}\n */\n toJSON: function() {\n\n var params = Object.assign({},this)\n\n if( params.value === 'text' ) {\n params.value = void 0\n delete params.value\n }\n\n var data = [ this._field, params, this.value || 'text' ]\n\n switch( this._field ) {\n default: data.push( this._data ); break\n case 'adr':\n case 'n':\n data.push( this._data.split( ';' ) )\n }\n\n return data\n\n },\n\n}\n\n// Exports\nmodule.exports = Property\n","var camelCase = require( 'camelcase' )\nvar Property = require( './property' )\n\nfunction set( object, key, value ) {\n if( Array.isArray( object[ key ] ) ) {\n object[ key ].push( value )\n } else if( object[ key ] != null ) {\n object[ key ] = [ object[ key ], value ]\n } else {\n object[ key ] = value\n }\n}\n\nfunction createParams( params, param ) {\n\n var parts = param.split( '=' )\n var k = camelCase( parts[0] )\n var value = parts[1]\n\n if( value == null || value === '' ) {\n value = parts[0]\n k = 'type'\n }\n\n if( k === 'type' ) {\n\n if (value[ 0 ] === '\"' && value[ value.length - 1 ] === '\"' && value.indexOf(',') !== -1)\n value = value.slice(1, -1)\n value.toLowerCase().split( ',' ).forEach( function( value ) {\n set( params, k, value )\n })\n\n return params\n\n }\n\n set( params, k, value )\n\n return params\n\n}\n\nfunction parseLines( lines ) {\n\n var data = {}\n\n // NOTE: Line format:\n // PROPERTY[;PARAMETER[=VALUE]]:Attribute[;Attribute]\n var line = null\n var pattern = /^([^;:]+)((?:;(?:[^;:]+))*)(?:\\:([\\s\\S]+))?$/i\n var len = lines.length - 1\n\n for( var i = 1; i < len; i++ ) {\n\n line = lines[i]\n\n var match = pattern.exec( line )\n if( !match ) continue;\n\n var name = match[1].split('.')\n var property = name.pop()\n var group = name.pop()\n var value = match[3]\n var params = match[2] ?\n match[2].replace( /^;|;$/g, '' ).split( ';' ) : []\n\n var propParams = params.reduce( createParams, group ? { group: group } : {})\n var propName = camelCase( property )\n var propVal = new Property( propName, value, propParams )\n\n set( data, propName, propVal )\n\n }\n\n return data\n\n}\n\nmodule.exports = parseLines\n","'use strict';\n\nconst preserveCamelCase = string => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = Object.assign({\n\t\tpascalCase: false\n\t}, options);\n\n\tconst postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n\t}\n\n\tconst hasUpperCase = input !== input.toLowerCase();\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input);\n\t}\n\n\tinput = input\n\t\t.replace(/^[_.\\- ]+/, '')\n\t\t.toLowerCase()\n\t\t.replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n\t\t.replace(/\\d+(\\w|$)/g, m => m.toUpperCase());\n\n\treturn postProcess(input);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","import VCard from 'vcards-js'\r\nimport vcf from 'vcf'\r\nimport { Options, Plugin } from '../utils/options.js'\r\n\r\nexport interface Address {\r\n streetAddress?: string\r\n locality?: string\r\n postalCode?: string\r\n stateProvince?: string\r\n region?: string\r\n country?: string\r\n}\r\n\r\nexport enum AddressType {\r\n Home = 'home',\r\n Work = 'work'\r\n}\r\n\r\nexport enum PhoneType {\r\n Home = 'home',\r\n Work = 'work',\r\n Cell = 'cell',\r\n Pager = 'pager'\r\n}\r\n\r\nexport enum SocialType {\r\n Messenger = 'messenger',\r\n Twitter = 'twitter',\r\n Facebook = 'facebook',\r\n LinkedIn = 'linkedin',\r\n SinaWeibo = 'weibo',\r\n Jabber = 'jabber',\r\n QQ = 'qq',\r\n GaduGadu = 'gadu-gadu'\r\n}\r\n\r\nfunction toDate(val?: string | Date) {\r\n if (!val)\r\n return\r\n if (typeof val == 'string')\r\n return new Date(val)\r\n return val\r\n}\r\n\r\nexport interface VCardPluginOptions {\r\n fullName: string\r\n name?: {\r\n first?: string\r\n last?: string\r\n middle?: string\r\n prefix?: string\r\n suffix?: string\r\n nick?: string\r\n }\r\n title?: string\r\n birthday?: Date | string\r\n phone?: Array<{ type?: `${PhoneType}`, value: string }>\r\n email?: Array<{ type?: `${AddressType}`, value: string }>\r\n address?: {\r\n work?: Address\r\n home?: Address\r\n }\r\n note?: string\r\n company?: string\r\n social?: Array<{ type: `${SocialType}`, value: string }>\r\n website?: {\r\n personal?: string\r\n company?: string\r\n }\r\n}\r\n\r\nexport default class VCardPlugin implements Plugin {\r\n\r\n constructor(\r\n private readonly pluginOptions: VCardPluginOptions,\r\n private readonly uuid?: string\r\n ) { }\r\n\r\n configure(options: Options): Options | undefined | void {\r\n options.data = this.generateVCard()\r\n // Auto mode\r\n options.qrOptions.mode = undefined\r\n return options\r\n }\r\n\r\n private generateVCard() {\r\n const data = this.pluginOptions\r\n const card = VCard()\r\n card.version = '3.0'\r\n\r\n card.formattedName = data.fullName\r\n\r\n const extraProps = new Array<vcf.Property>()\r\n let groupCounter = 1\r\n const getGroup = () => `item${groupCounter++}`\r\n\r\n if (data.name) {\r\n const n = data.name\r\n if (n.first)\r\n card.firstName = n.first\r\n if (n.last)\r\n card.lastName = n.last\r\n if (n.middle)\r\n card.middleName = n.middle\r\n if (n.nick) {\r\n card.nickname = n.nick\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAndroidCustom',\r\n {},\r\n 'text',\r\n ['vnd.android.cursor.item/nickname', n.nick, '1', '', '', '', '', '', '', '', '', '', '', '', '', '']\r\n ]))\r\n }\r\n if (n.prefix)\r\n card.namePrefix = n.prefix\r\n if (n.suffix)\r\n card.nameSuffix = n.suffix\r\n }\r\n\r\n if (data.title)\r\n card.title = data.title\r\n\r\n if (data.birthday)\r\n card.birthday = toDate(data.birthday)!\r\n\r\n data.phone?.forEach(el => {\r\n let key: 'workPhone' | 'cellPhone' | 'pagerPhone' | 'homePhone' | 'otherPhone' = 'otherPhone'\r\n switch (el.type) {\r\n case PhoneType.Work:\r\n key = 'workPhone'\r\n break\r\n\r\n case PhoneType.Cell:\r\n key = 'cellPhone'\r\n break\r\n\r\n case PhoneType.Pager:\r\n key = 'pagerPhone'\r\n break\r\n\r\n case PhoneType.Home:\r\n key = 'homePhone'\r\n break\r\n }\r\n const v = card[key]\r\n if (el.value) {\r\n if (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\r\n }\r\n })\r\n\r\n data.email?.forEach(el => {\r\n let key: 'workEmail' | 'email' | 'otherEmail' = 'otherEmail'\r\n switch (el.type) {\r\n case AddressType.Work:\r\n key = 'workEmail'\r\n break\r\n\r\n case AddressType.Home:\r\n key = 'email'\r\n break\r\n }\r\n const v = card[key]\r\n if (el.value) {\r\n if (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\r\n }\r\n })\r\n\r\n if (data.address) {\r\n Object.entries(data.address).forEach(([k, v]) => {\r\n let key: 'workAddress' | 'homeAddress' = 'homeAddress'\r\n switch (k) {\r\n case 'home':\r\n key = 'homeAddress'\r\n break\r\n\r\n case 'work':\r\n key = 'workAddress'\r\n break\r\n }\r\n if (v.streetAddress)\r\n card[key].street = v.streetAddress\r\n if (v.locality)\r\n card[key].city = v.locality\r\n if (v.postalCode)\r\n card[key].postalCode = v.postalCode\r\n if (v.stateProvince)\r\n card[key].stateProvince = v.stateProvince\r\n\r\n const cr = new Array<string>()\r\n if (v.region)\r\n cr.push(v.region)\r\n\r\n if (v.country)\r\n cr.push(v.country)\r\n\r\n const countryRegion = cr\r\n .map(p => p.trim())\r\n .filter(p => !!p)\r\n .join(', ')\r\n\r\n if (countryRegion)\r\n card[key].countryRegion = countryRegion\r\n })\r\n }\r\n\r\n if (data.note)\r\n card.note = data.note\r\n\r\n if (data.company)\r\n card.organization = data.company\r\n\r\n const pushMsgProtocol = (username: string, type: string, protocol: string, service: string) => {\r\n let group = getGroup()\r\n extraProps.push(vcf.Property.fromJSON([\r\n type,\r\n {\r\n group\r\n },\r\n 'text',\r\n username\r\n ]))\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAbLabel',\r\n {\r\n group\r\n },\r\n 'text',\r\n service\r\n ]))\r\n\r\n group = getGroup()\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'impp',\r\n {\r\n group,\r\n xServiceType: service\r\n },\r\n 'text',\r\n `${protocol}:${username}`\r\n ]))\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAbLabel',\r\n {\r\n group\r\n },\r\n 'text',\r\n service\r\n ]))\r\n }\r\n\r\n if (data.social)\r\n data.social.forEach((v) => {\r\n if (v.value && v.type)\r\n switch (v.type) {\r\n case SocialType.Messenger:\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xSocialprofile',\r\n {\r\n type: 'messenger',\r\n xUser: v.value\r\n },\r\n 'text',\r\n 'x-apple:messenger'\r\n ]))\r\n const group = getGroup()\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'impp',\r\n {\r\n group,\r\n xServiceType: 'Facebook'\r\n },\r\n 'text',\r\n `xmpp:${v.value}`\r\n ]))\r\n extraProps.push(vcf.Property.fromJSON([\r\n 'xAbLabel',\r\n {\r\n group\r\n },\r\n 'text',\r\n 'Facebook'\r\n ]))\r\n break\r\n\r\n case SocialType.Twitter:\r\n case SocialType.Facebook:\r\n case SocialType.LinkedIn:\r\n case SocialType.SinaWeibo:\r\n const surl = getSocialUrl(v)\r\n if (surl)\r\n card.socialUrls[v.type] = surl\r\n break\r\n\r\n case SocialType.Jabber:\r\n pushMsgProtocol(v.value, 'xJabber', 'xmpp', 'Jabber')\r\n break\r\n\r\n case SocialType.QQ:\r\n pushMsgProtocol(v.value, 'xQq', 'x-apple', 'QQ')\r\n break\r\n\r\n case SocialType.GaduGadu:\r\n pushMsgProtocol(v.value, 'xGaduGadu', 'x-apple', 'GaduGadu')\r\n break\r\n }\r\n })\r\n\r\n if (data.website?.company)\r\n card.workUrl = data.website.company\r\n\r\n if (data.website?.personal)\r\n card.url = data.website.personal\r\n\r\n if (this.uuid)\r\n card.uid = this.uuid\r\n\r\n const parsed = vcf.parse(card.getFormattedString())[0]\r\n extraProps.forEach(prop => parsed.addProperty(prop))\r\n\r\n return parsed.toString('3.0')\r\n .replace(/X-SOCIALPROFILE;CHARSET=UTF-8;/gi, 'X-SOCIALPROFILE;')\r\n .replace(/X-AB-LABEL/gi, 'X-ABLabel')\r\n .replace(/X-SOCIALPROFILE;(TYPE=[^:]*?):/gi, (tx, m) => tx.replace(m, m.toLowerCase().replace('type=messenger', 'type=Messenger')))\r\n .replace(/;TYPE=OTHER[^;:]*?([;:])/ig, (_, m) => m)\r\n }\r\n}\r\n\r\nconst socialUrls = {\r\n [SocialType.Twitter]: 'https://x.com/',\r\n [SocialType.Facebook]: 'https://www.facebook.com/',\r\n [SocialType.LinkedIn]: 'https://www.linkedin.com/in/',\r\n [SocialType.SinaWeibo]: 'https://weibo.com/n/',\r\n [SocialType.Messenger]: 'https://www.messenger.com/t/'\r\n}\r\n\r\nfunction getSocialUrl({ value, type }: { value?: string, type?: `${SocialType}` }) {\r\n let val = value?.trim()\r\n if (!val?.match(/^https?:\\/\\//im)) {\r\n try {\r\n const u = new URL(socialUrls[type as keyof typeof socialUrls])\r\n u.pathname = (u.pathname + '/' + val).replace(/[\\/\\\\]+/g, '/')\r\n val = u.toString()\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n return val\r\n}\r\n\r\n","/**\n * vCard\n * @constructor\n * @return {vCard}\n */\nfunction vCard() {\n\n if( !(this instanceof vCard) )\n return new vCard()\n\n /** @type {String} Version number */\n this.version = vCard.versions[ vCard.versions.length - 1 ]\n /** @type {Object} Card data */\n this.data = {}\n\n}\n\n/**\n * vCard MIME type\n * @type {String}\n */\nvCard.mimeType = 'text/vcard'\n\n/**\n * vCard file extension\n * @type {String}\n */\nvCard.extension = '.vcf'\n\n/**\n * vCard versions\n * @type {Array}\n */\nvCard.versions = [ '2.1', '3.0', '4.0' ]\n\n/**\n * VCF EOL character sequence\n * @type {String}\n */\nvCard.EOL = '\\r\\n'\n\n/**\n * Folds a long line according to the RFC 5322.\n * @see http://tools.ietf.org/html/rfc5322#section-2.1.1\n * @param {String} input\n * @param {Number} maxLength\n * @param {Boolean} hardWrap\n * @return {String}\n */\nvCard.foldLine = require( 'foldline' )\n\n/**\n * Normalizes input (cast to string, line folding, whitespace)\n * @param {String} input\n * @return {String}\n */\nvCard.normalize = function( input ) {\n return ( input + '' )\n // Trim whitespace\n .replace( /^[\\s\\r\\n]+|[\\s\\r\\n]+$/g, '' )\n // Trim blank lines\n .replace( /(\\r\\n)[\\x09\\x20]?(\\r\\n)|$/g, '$1' )\n // Unfold folded lines\n .replace( /\\r\\n[\\x20\\x09]/g, \"\" )\n}\n\n/**\n * Check whether a given version is supported\n * @param {String} version\n * @return {Boolean}\n */\nvCard.isSupported = function( version ) {\n return /^\\d\\.\\d$/.test( version ) &&\n vCard.versions.indexOf( version ) !== -1\n}\n\n/**\n * Parses a string or buffer into a vCard object\n * @param {String|Buffer} value\n * @return {Array<vCard>}\n */\nvCard.parse = function( value ) {\n\n var objects = ( value + '' ).split( /(?=BEGIN\\:VCARD)/gi )\n var cards = []\n\n for( var i = 0; i < objects.length; i++ ) {\n cards.push( new vCard().parse( objects[i] ) )\n }\n\n return cards\n\n}\n\n/**\n * Parse an array of vcf formatted lines\n * @internal used by `vCard#parse()`\n * @type {Function}\n */\nvCard.parseLines = require( './parse-lines' )\n\n/**\n * Constructs a vCard from jCard data\n * @param {Array} jcard\n * @return {vCard}\n */\nvCard.fromJSON = function( jcard ) {\n\n jcard = typeof jcard === 'string' ?\n JSON.parse( jcard ) : jcard\n\n if( jcard == null || !Array.isArray( jcard ) )\n return new vCard()\n\n if( !/vcard/i.test( jcard[0] ) )\n throw new Error( 'Object not in jCard format' )\n\n var card = new vCard()\n\n jcard[1].forEach( function( prop ) {\n card.addProperty( vCard.Property.fromJSON( prop ) )\n })\n\n return card\n\n}\n\n/**\n * Format a card object according to the given version\n * @param {vCard} card\n * @param {String} version\n * @return {String}\n */\nvCard.format = function( card, version ) {\n\n version = version || card.version ||\n vCard.versions[ vCard.versions.length - 1 ]\n\n if( !vCard.isSupported( version ) )\n throw new Error( 'Unsupported vCard version \"' + version + '\"' )\n\n var vcf = []\n\n vcf.push( 'BEGIN:VCARD' )\n vcf.push( 'VERSION:' + version )\n\n var props = Object.keys( card.data )\n var prop = ''\n\n for( var i = 0; i < props.length; i++ ) {\n if( props[i] === 'version' ) continue;\n prop = card.data[ props[i] ]\n if( Array.isArray( prop ) ) {\n for( var k = 0; k < prop.length; k++ ) {\n if( prop[k].isEmpty() ) continue\n vcf.push( vCard.foldLine( prop[k].toString( version ), 75 ) )\n }\n } else if( !prop.isEmpty() ) {\n vcf.push( vCard.foldLine( prop.toString( version ), 75 ) )\n }\n }\n\n vcf.push( 'END:VCARD' )\n\n return vcf.join( vCard.EOL )\n\n}\n\n// vCard Property constructor\nvCard.Property = require( './property' )\n\n/**\n * vCard prototype\n * @type {Object}\n */\nvCard.prototype = {\n\n constructor: vCard,\n\n /**\n * Get a vCard property\n * @param {String} key\n * @return {Object|Array}\n */\n get: function( key ) {\n\n if( this.data[ key ] == null ) {\n return this.data[ key ]\n }\n\n if( Array.isArray( this.data[ key ] ) ) {\n return this.data[ key ].map( function( prop ) {\n return prop.clone()\n })\n } else {\n return this.data[ key ].clone()\n }\n\n },\n\n /**\n * Set a vCard property\n * @param {String} key\n * @param {String} value\n * @param {Object} params\n */\n set: function( key, value, params ) {\n return this.setProperty( new vCard.Property( key, value, params ) )\n },\n\n /**\n * Add a vCard property\n * @param {String} key\n * @param {String} value\n * @param {Object} params\n */\n add: function( key, value, params ) {\n var prop = new vCard.Property( key, value, params )\n this.addProperty( prop )\n return this\n },\n\n /**\n * Set a vCard property from an already\n * constructed vCard.Property\n * @param {vCard.Property} prop\n */\n setProperty: function( prop ) {\n this.data[ prop._field ] = prop\n return this\n },\n\n /**\n * Add a vCard property from an already\n * constructed vCard.Property\n * @param {vCard.Property} prop\n */\n addProperty: function( prop ) {\n\n var key = prop._field\n\n if( Array.isArray( this.data[ key ] ) ) {\n this.data[ key ].push( prop )\n } else if( this.data[ key ] != null ) {\n this.data[ key ] = [ this.data[ key ], prop ]\n } else {\n this.data[ key ] = prop\n }\n\n return this\n\n },\n\n /**\n * Parse a vcf formatted vCard\n * @param {String} value\n * @return {vCard}\n */\n parse: function( value ) {\n\n // Normalize & split\n var lines = vCard.normalize( value )\n .split( /\\r\\n/g )\n\n // Keep begin and end markers\n // for eventual error messages\n var begin = lines[0]\n var version = lines[1]\n var end = lines[ lines.length - 1 ]\n\n // Multiple used RegExp's\n const regexp_version = /VERSION:\\d\\.\\d/i\n\n if( !/BEGIN:VCARD/i.test( begin ) )\n throw new SyntaxError( 'Invalid vCard: Expected \"BEGIN:VCARD\" but found \"'+ begin +'\"' )\n\n if( !/END:VCARD/i.test( end ) )\n throw new SyntaxError( 'Invalid vCard: Expected \"END:VCARD\" but found \"'+ end +'\"' )\n\n if( !regexp_version.test( version ) ) {\n // VERSION mostly follows BEGIN, but it has only mandatory follow BEGIN, for version 4.0\n // Let's do the more expensive lookup for the lesser used version variant\n if( !(version = lines.find( line => regexp_version.test( line ) ) ) )\n throw new SyntaxError( 'Invalid vCard: Expected \"VERSION:\\\\d.\\\\d\" but none found' )\n // TODO: Do we need to throw an error if version = 4.0 or != 3.0|2.1? (because not followed BEGIN)?\n }\n\n this.version = version.substring( 8, 11 )\n\n if( !vCard.isSupported( this.version ) )\n throw new Error( 'Unsupported version \"' + this.version + '\"' )\n\n this.data = vCard.parseLines( lines )\n\n return this\n\n },\n\n /**\n * Format the vCard as vcf with given version\n * @param {String} version\n * @param {String} charset\n * @return {String}\n */\n toString: function( version, charset ) {\n version = version || this.version\n return vCard.format( this, version )\n },\n\n /**\n * Format the card as jCard\n * @param {String} version='4.0'\n * @return {Array} jCard\n */\n toJCard: function( version ) {\n\n version = version || '4.0'\n\n var keys = Object.keys( this.data )\n var data = [ [ 'version', {}, 'text', version ] ]\n var prop = null\n\n for( var i = 0; i < keys.length; i++ ) {\n if( keys[i] === 'version' ) continue;\n prop = this.data[ keys[i] ]\n if( Array.isArray( prop ) ) {\n for( var k = 0; k < prop.length; k++ ) {\n data.push( prop[k].toJSON() )\n }\n } else {\n data.push( prop.toJSON() )\n }\n }\n\n return [ 'vcard', data ]\n\n },\n\n /**\n * Format the card as jCard\n * @return {Array} jCard\n */\n toJSON: function() {\n return this.toJCard( this.version )\n },\n\n}\n\n// Exports\nmodule.exports = vCard\n","\nconst CRLF = '\\r\\n'\n\nconst SP = ' '\n\n\n/**\n * Maximum line length (excluding <CR><LF>)\n * There are two limits that RFC 5322 places on the number of\n * characters in a line. Each line of characters MUST be\n * no more than 998 characters, and SHOULD be no more\n * than 78 characters, excluding the <CR><LF>.\n * @type {Number}\n * @constant\n */\nconst MAX_LINE_LENGTH = 998\n\n/**\n * Default maximum line length (excluding <CR><LF>)\n * @type {Number}\n * @constant\n */\nconst DEFAULT_LINE_LENGTH = 78\n\n/**\n * Minimum `maxLength` that can be used\n * @type {Number}\n * @constant\n */\nconst MIN_LINE_LENGTH = 2\n\n/**\n * Folds a long line according to RFC 5322\n * @see http://tools.ietf.org/html/rfc5322#section-2.1.1\n *\n * @param {String} input - input string\n * @param {Number} maxLength - maximum line length (excluding CRLF)\n * @param {Boolean} hardWrap - whether to insert a hard break at `maxLength`\n * @returns {String}\n */\nfunction foldLine( input, maxLength, hardWrap ) {\n\n if( maxLength != null && maxLength < MIN_LINE_LENGTH ) {\n throw new Error( 'Maximum length must not be less than ' + MIN_LINE_LENGTH )\n }\n\n if( maxLength != null && maxLength > MAX_LINE_LENGTH ) {\n throw new Error( 'Maximum length must not exceed ' + MAX_LINE_LENGTH )\n }\n\n // RFC compliant default line length\n maxLength = maxLength || DEFAULT_LINE_LENGTH\n\n input = input.replace( /[\\r\\n]+/g, '' )\n\n // We really don't need to fold this\n if( input.length <= maxLength ) {\n return input\n }\n\n var output = ''\n var index = 0\n var nextIndex = 0\n var length = input.length\n var line = 0\n var trim = 0\n\n while( index < length ) {\n if( !hardWrap && ~( nextIndex = input.lastIndexOf( SP, index + maxLength ) ) ) {\n if( nextIndex > index ) {\n output += input.slice( index, nextIndex ) + CRLF + SP\n index = nextIndex\n } else {\n output += input.slice( index, index + maxLength - trim ) + CRLF + SP\n index = index + maxLength - trim\n hardWrap = true\n }\n } else {\n output += input.slice( index, index + maxLength - trim ) + CRLF + SP\n index = index + maxLength - trim\n }\n if( ( length - index ) < maxLength ) {\n output += input.slice( index )\n break\n }\n if( line === 0 ) {\n trim = 1\n }\n line++\n }\n\n return output\n\n}\n\nfoldLine.unfold = function unfold( input ) {\n return input.replace( /\\r\\n\\s/gm, '' )\n}\n\nmodule.exports = foldLine\n"],"names":["e","value","replace","ec","contentLine","prop","params","content","paramsString","filter","Boolean","join","majorVersion","maxLineLength","lines","length","push","slice","getPhotoContentLine","photo","imageType","mediaType","includes","split","base64","url","toUpperCase","line","getDateContentLine","date","getFullYear","dd","getDate","getEmailPropLine","type","address","isPrimary","types","getTelPropLine","tel","target","unshift","getFormattedString","vCard","getMajorVersion","formattedVCardString","version","formattedName","firstName","middleName","lastName","nameParts","namePrefix","nameSuffix","map","nickname","gender","uid","birthday","anniversary","email","Array","isArray","forEach","workEmail","otherEmail","logo","cellPhone","number","pagerPhone","homePhone","workPhone","homeFax","workFax","otherPhone","details","homeAddress","workAddress","obj","getAddressPropLine","addr","contentLines","label","street","city","stateProvince","postalCode","countryRegion","values","title","role","organization","workUrl","concat","note","socialUrls","key","hasOwnProperty","source","toISOString","Date","isOrganization","vCardFormatter$1","vcardsJs","getPhoto","attachFromUrl","this","embedFromFile","fileLocation","require$$1","extname","require$$0","readFileSync","toString","embedFromString","base64String","undefined","facebook","linkedIn","twitter","flickr","majorVersionString","isNaN","parseInt","require$$2","saveToFile","filename","contents","writeFileSync","encoding","Property","field","Object","assign","_field","_data","defineProperty","enumerable","capitalDashCase","fromJSON","Property.fromJSON","data","test","prototype","constructor","is","toLowerCase","indexOf","isEmpty","keys","clone","propName","group","i","valueOf","toJSON","property","set","object","createParams","param","parts","k","camelCase","input","options","TypeError","pascalCase","x","trim","string","isLastCharLower","isLastCharUpper","isLastLastCharUpper","character","preserveCamelCase","_","p1","m","charAt","postProcess","camelcaseModule","exports","default","parseLines_1","parseLines","pattern","len","match","exec","name","pop","propParams","reduce","propVal","AddressType","versions","mimeType","extension","EOL","foldLine","maxLength","hardWrap","MIN_LINE_LENGTH","Error","MAX_LINE_LENGTH","DEFAULT_LINE_LENGTH","output","index","nextIndex","lastIndexOf","SP","CRLF","unfold","foldLine.unfold","foldline","normalize","vCard.normalize","isSupported","vCard.isSupported","parse","vCard.parse","objects","cards","vCard.fromJSON","jcard","JSON","card","addProperty","format","vCard.format","vcf","props","get","setProperty","add","begin","end","regexp_version","SyntaxError","find","substring","toJCard","vcard","oa","Home","Work","PhoneType","X","Cell","Pager","SocialType","Z","Messenger","Twitter","Facebook","LinkedIn","SinaWeibo","Jabber","QQ","GaduGadu","pluginOptions","uuid","configure","generateVCard","qrOptions","mode","VCard","fullName","extraProps","groupCounter","n","first","last","middle","nick","prefix","suffix","toDate","val","phone","el","v","entries","streetAddress","locality","region","cr","country","p","company","pushMsgProtocol","username","protocol","service","xServiceType","social","xUser","u","URL","pathname","getSocialUrl","surl","website","personal","parsed","tx"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,6,7]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liquid-js/qr-code-styling",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.0",
|
|
4
4
|
"description": "Generate styled QR codes on web or in Node",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/qr-code-styling-node.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@liquid-js/qrcode-generator": "^1.1.0",
|
|
52
52
|
"@xmldom/xmldom": "^0.9.0",
|
|
53
53
|
"file-type": "^21.0.0 || ^22.0.0",
|
|
54
|
-
"ical-generator": "^
|
|
54
|
+
"ical-generator": "^11.0.0",
|
|
55
55
|
"sharp": ">0.32.1 <1.0.0",
|
|
56
56
|
"vcards-js": "^2.10.0",
|
|
57
57
|
"vcf": "^2.1.0"
|
|
@@ -88,5 +88,8 @@
|
|
|
88
88
|
"bugs": {
|
|
89
89
|
"url": "https://github.com/Liquid-JS/qr-code-styling/issues"
|
|
90
90
|
},
|
|
91
|
-
"homepage": "https://qrky.to/"
|
|
91
|
+
"homepage": "https://qrky.to/",
|
|
92
|
+
"dependencies": {
|
|
93
|
+
"tslib": "^2.8.1"
|
|
94
|
+
}
|
|
92
95
|
}
|