@liquid-js/qr-code-styling 5.5.0-0 → 5.5.0-2

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.
@@ -27,49 +27,39 @@ export declare enum SocialType {
27
27
  QQ = "qq",
28
28
  GaduGadu = "gadu-gadu"
29
29
  }
30
- export interface Image {
31
- /** URL where photo can be found */
32
- url: string;
33
- /** the media type */
34
- mediaType: string;
35
- }
36
30
  export interface VCardPluginOptions {
37
- data: {
38
- fullName: string;
39
- name?: {
40
- first?: string;
41
- last?: string;
42
- middle?: string;
43
- prefix?: string;
44
- suffix?: string;
45
- nick?: string;
46
- };
47
- title?: string;
48
- birthday?: Date;
49
- photo?: Image;
50
- phone?: Array<{
51
- type?: `${PhoneType}`;
52
- value: string;
53
- }>;
54
- email?: Array<{
55
- type?: `${AddressType}`;
56
- value: string;
57
- }>;
58
- address?: {
59
- work?: Address;
60
- home?: Address;
61
- };
62
- logo?: Image;
63
- note?: string;
31
+ fullName: string;
32
+ name?: {
33
+ first?: string;
34
+ last?: string;
35
+ middle?: string;
36
+ prefix?: string;
37
+ suffix?: string;
38
+ nick?: string;
39
+ };
40
+ title?: string;
41
+ birthday?: Date | string;
42
+ phone?: Array<{
43
+ type?: `${PhoneType}`;
44
+ value: string;
45
+ }>;
46
+ email?: Array<{
47
+ type?: `${AddressType}`;
48
+ value: string;
49
+ }>;
50
+ address?: {
51
+ work?: Address;
52
+ home?: Address;
53
+ };
54
+ note?: string;
55
+ company?: string;
56
+ social?: Array<{
57
+ type: `${SocialType}`;
58
+ value: string;
59
+ }>;
60
+ website?: {
61
+ personal?: string;
64
62
  company?: string;
65
- social?: Array<{
66
- type: `${SocialType}`;
67
- value: string;
68
- }>;
69
- website?: {
70
- personal?: string;
71
- company?: string;
72
- };
73
63
  };
74
64
  }
75
65
  export default class VCardPlugin implements Plugin {
@@ -1,2 +1,2 @@
1
- import e from"path";import r from"fs";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,o,n,i={exports:{}};function s(){return a||(a=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,a,n){return r+(o>=4?n?";ENCODING=b;MEDIATYPE=image/":";MEDIATYPE=image/":3===o?n?";ENCODING=b;TYPE=":";TYPE=":n?";ENCODING=BASE64;":";")+a+":"+e(t)+"\r\n"}function a(e){return e.getFullYear()+("0"+(e.getMonth()+1)).slice(-2)+("0"+e.getDate()).slice(-2)}var o="3";i.exports={getFormattedString:function(n){o=n.getMajorVersion();var i="";i+="BEGIN:VCARD\r\n",i+="VERSION:"+n.version+"\r\n";var s=o>=4?"":";CHARSET=UTF-8",l=n.formattedName;if(l||(l="",[n.firstName,n.middleName,n.lastName].forEach(function(e){e&&l&&(l+=" "),l+=e})),i+="FN"+s+":"+e(l)+"\r\n",i+="N"+s+":"+e(n.lastName)+";"+e(n.firstName)+";"+e(n.middleName)+";"+e(n.namePrefix)+";"+e(n.nameSuffix)+"\r\n",n.nickname&&o>=3&&(i+="NICKNAME"+s+":"+e(n.nickname)+"\r\n"),n.gender&&(i+="GENDER:"+e(n.gender)+"\r\n"),n.uid&&(i+="UID"+s+":"+e(n.uid)+"\r\n"),n.birthday&&(i+="BDAY:"+a(n.birthday)+"\r\n"),n.anniversary&&(i+="ANNIVERSARY:"+a(n.anniversary)+"\r\n"),n.email&&(Array.isArray(n.email)||(n.email=[n.email]),n.email.forEach(function(r){i=o>=4?i+"EMAIL"+s+";type=HOME:"+e(r)+"\r\n":o>=3&&o<4?i+"EMAIL"+s+";type=HOME,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";HOME;INTERNET:"+e(r)+"\r\n"})),n.workEmail&&(Array.isArray(n.workEmail)||(n.workEmail=[n.workEmail]),n.workEmail.forEach(function(r){i=o>=4?i+"EMAIL"+s+";type=WORK:"+e(r)+"\r\n":o>=3&&o<4?i+"EMAIL"+s+";type=WORK,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";WORK;INTERNET:"+e(r)+"\r\n"})),n.otherEmail&&(Array.isArray(n.otherEmail)||(n.otherEmail=[n.otherEmail]),n.otherEmail.forEach(function(r){i=o>=4?i+"EMAIL"+s+";type=OTHER:"+e(r)+"\r\n":o>=3&&o<4?i+"EMAIL"+s+";type=OTHER,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";OTHER;INTERNET:"+e(r)+"\r\n"})),n.logo.url&&(i+=t("LOGO",n.logo.url,n.logo.mediaType,n.logo.base64)),n.photo.url&&(i+=t("PHOTO",n.photo.url,n.photo.mediaType,n.photo.base64)),n.cellPhone&&(Array.isArray(n.cellPhone)||(n.cellPhone=[n.cellPhone]),n.cellPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,cell":tel:'+e(r)+"\r\n":i+"TEL;TYPE=CELL:"+e(r)+"\r\n"})),n.pagerPhone&&(Array.isArray(n.pagerPhone)||(n.pagerPhone=[n.pagerPhone]),n.pagerPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="pager,cell":tel:'+e(r)+"\r\n":i+"TEL;TYPE=PAGER:"+e(r)+"\r\n"})),n.homePhone&&(Array.isArray(n.homePhone)||(n.homePhone=[n.homePhone]),n.homePhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,home":tel:'+e(r)+"\r\n":i+"TEL;TYPE=HOME,VOICE:"+e(r)+"\r\n"})),n.workPhone&&(Array.isArray(n.workPhone)||(n.workPhone=[n.workPhone]),n.workPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,work":tel:'+e(r)+"\r\n":i+"TEL;TYPE=WORK,VOICE:"+e(r)+"\r\n"})),n.homeFax&&(Array.isArray(n.homeFax)||(n.homeFax=[n.homeFax]),n.homeFax.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="fax,home":tel:'+e(r)+"\r\n":i+"TEL;TYPE=HOME,FAX:"+e(r)+"\r\n"})),n.workFax&&(Array.isArray(n.workFax)||(n.workFax=[n.workFax]),n.workFax.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="fax,work":tel:'+e(r)+"\r\n":i+"TEL;TYPE=WORK,FAX:"+e(r)+"\r\n"})),n.otherPhone&&(Array.isArray(n.otherPhone)||(n.otherPhone=[n.otherPhone]),n.otherPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,other":tel:'+e(r)+"\r\n":i+"TEL;TYPE=OTHER:"+e(r)+"\r\n"})),[{details:n.homeAddress,type:"HOME"},{details:n.workAddress,type:"WORK"}].forEach(function(r){var t=i,a="";(r.details.label||r.details.street||r.details.city||r.details.stateProvince||r.details.postalCode||r.details.countryRegion)&&(o>=4?a="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&&(a="LABEL"+s+";TYPE="+r.type+":"+e(r.details.label)+"\r\n"),a+="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+a}),n.title&&(i+="TITLE"+s+":"+e(n.title)+"\r\n"),n.role&&(i+="ROLE"+s+":"+e(n.role)+"\r\n"),n.organization&&(i+="ORG"+s+":"+e(n.organization)+"\r\n"),n.url&&(i+="URL"+s+":"+e(n.url)+"\r\n"),n.workUrl&&(i+="URL;type=WORK"+s+":"+e(n.workUrl)+"\r\n"),n.note&&(i+="NOTE"+s+":"+e(n.note)+"\r\n"),n.socialUrls)for(var u in n.socialUrls)n.socialUrls.hasOwnProperty(u)&&n.socialUrls[u]&&(i+="X-SOCIALPROFILE"+s+";TYPE="+u+":"+e(n.socialUrls[u])+r());return n.source&&(i+="SOURCE"+s+":"+e(n.source)+"\r\n"),i+="REV:"+(new Date).toISOString()+"\r\n",n.isOrganization&&(i+="X-ABShowAs:COMPANY\r\n"),i+="END:VCARD\r\n"}}}()),i.exports}n||(n=1,o=function(){function t(){return{url:"",mediaType:"",base64:!1,attachFromUrl:function(e,r){this.url=e,this.mediaType=r,this.base64=!1},embedFromFile:function(t){var a=r;this.mediaType=e.extname(t).toUpperCase().replace(/\./g,""),this.url=a.readFileSync(t).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:t(),middleName:"",namePrefix:"",nameSuffix:"",nickname:"",note:"",organization:"",photo:t(),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 s().getFormattedString(this)},saveToFile:function(e){var t=s().getFormattedString(this);r.writeFileSync(e,t,{encoding:"utf8"})}}});var l,u,c=t(o);var h,p,d,f,m,E={exports:{}};function y(){function e(r,t,a){if(!(this instanceof e))return new e(t);null!=a&&Object.assign(this,a),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 d?p:(d=1,e.fromJSON=function(r){var t=r[0],a=r[1];return/text/i.test(r[2])||(a.value=r[2]),new e(t,r=Array.isArray(r[3])?r[3].join(";"):r[3],a)},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),a=Object.keys(this),o=[],n=0;n<a.length;n++)if("group"!==a[n])switch(t){case"TEL":case"ADR":case"EMAIL":"2.1"===e?Array.isArray(this[a[n]])?o.push(this[a[n]].join(";")):o.push(this[a[n]]):o.push(r(a[n])+"="+this[a[n]]);break;default:o.push(r(a[n])+"="+this[a[n]])}return"2.1"===e||"3.0"===e?t+(o.length?";"+o.join(";").toUpperCase():o.toString().toUpperCase())+":"+(Array.isArray(this._data)?this._data.join(";"):this._data):t+(o.length?";"+o.join(";"):o)+":"+(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}},p=e)}function g(){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,a){a=a.split("=");var o=t(a[0]),n=a[1];return null!=n&&""!==n||(n=a[0],o="type"),"type"===o?('"'===n[0]&&'"'===n[n.length-1]&&-1!==n.indexOf(",")&&(n=n.slice(1,-1)),n.toLowerCase().split(",").forEach(function(t){e(r,o,t)}),r):(e(r,o,n),r)}if(m)return f;m=1;var t=function(){if(h)return E.exports;h=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,a=!1;for(let o=0;o<e.length;o++){let n=e[o];r&&/[a-zA-Z]/.test(n)&&n.toUpperCase()===n?(e=e.slice(0,o)+"-"+e.slice(o),r=!1,a=t,t=!0,o++):t&&a&&/[a-zA-Z]/.test(n)&&n.toLowerCase()===n?(e=e.slice(0,o-1)+"-"+e.slice(o-1),a=t,t=!1,r=!0):(r=n.toLowerCase()===n&&n.toUpperCase()!==n,a=t,t=n.toUpperCase()===n&&n.toLowerCase()!==n)}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 E.exports=e,E.exports.default=e,E.exports}(),a=y();return f=function(o){for(var n,i={},s=/^([^;:]+)((?:;(?:[^;:]+))*)(?::([\s\S]+))?$/i,l=o.length-1,u=1;u<l;u++){n=o[u];var c=s.exec(n);if(c){var h=c[1].split(".");n=h.pop();var p=h.pop();h=c[3],c=(c[2]?c[2].replace(/^;|;$/g,"").split(";"):[]).reduce(r,p?{group:p}:{}),e(i,n=t(n),h=new a(n,h,c))}}return i}}var A,v,P,w=t(function(){function e(){if(!(this instanceof e))return new e;this.version=e.versions[e.versions.length-1],this.data={}}return v?A:(v=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 a="",o=0,n=0,i=e.length,s=0,l=0;o<i;){if(!t&&~(n=e.lastIndexOf(" ",o+r))?n>o?(a+=e.slice(o,n)+"\r\n ",o=n):(a+=e.slice(o,o+r-l)+"\r\n ",o=o+r-l,t=!0):(a+=e.slice(o,o+r-l)+"\r\n ",o=o+r-l),i-o<r){a+=e.slice(o);break}0===s&&(l=1),s++}return a}return u?l:(u=1,e.unfold=function(e){return e.replace(/\r\n\s/gm,"")},l=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=[],a=0;a<r.length;a++)t.push((new e).parse(r[a]));return t},e.parseLines=g(),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 a=[];a.push("BEGIN:VCARD"),a.push("VERSION:"+t);for(var o,n=Object.keys(r.data),i=0;i<n.length;i++)if("version"!==n[i])if(o=r.data[n[i]],Array.isArray(o))for(var s=0;s<o.length;s++)o[s].isEmpty()||a.push(e.foldLine(o[s].toString(t),75));else o.isEmpty()||a.push(e.foldLine(o.toString(t),75));return a.push("END:VCARD"),a.join(e.EOL)},e.Property=y(),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,a){return this.setProperty(new e.Property(r,t,a))},add:function(r,t,a){return r=new e.Property(r,t,a),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],a=r[1],o=r[r.length-1],n=/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(o))throw new SyntaxError('Invalid vCard: Expected "END:VCARD" but found "'+o+'"');if(!n.test(a)&&!(a=r.find(e=>n.test(e))))throw new SyntaxError('Invalid vCard: Expected "VERSION:\\d.\\d" but none found');if(this.version=a.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,a=0;a<r.length;a++)if("version"!==r[a])if(t=this.data[r[a]],Array.isArray(t))for(var o=0;o<t.length;o++)e.push(t[o].toJSON());else e.push(t.toJSON());return["vcard",e]},toJSON:function(){return this.toJCard(this.version)}},A=e)}()),b=P||={};b.Home="home",b.Work="work";var O,x=O||={};x.Home="home",x.Work="work",x.Cell="cell",x.Pager="pager";var T,L=T||={};L.Messenger="messenger",L.Twitter="twitter",L.Facebook="facebook",L.LinkedIn="linkedin",L.SinaWeibo="weibo",L.Jabber="jabber",L.QQ="qq",L.GaduGadu="gadu-gadu";var k={[T.Twitter]:"https://x.com/",[T.Facebook]:"https://www.facebook.com/",[T.LinkedIn]:"https://www.linkedin.com/in/",[T.SinaWeibo]:"https://weibo.com/n/",[T.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}generateVCard(){var{data:e}=this.pluginOptions,r=c();r.version="3.0",r.formattedName=e.fullName;var t=[],a=1;if(e.name){let a=e.name;a.first&&(r.firstName=a.first),a.last&&(r.lastName=a.last),a.middle&&(r.middleName=a.middle),a.nick&&(r.nickname=a.nick,t.push(w.Property.fromJSON(["xAndroidCustom",{},"text",["vnd.android.cursor.item/nickname",a.nick,"1","","","","","","","","","","","","",""]]))),a.prefix&&(r.namePrefix=a.prefix),a.suffix&&(r.nameSuffix=a.suffix)}e.title&&(r.title=e.title),e.birthday&&(r.birthday=e.birthday),e.photo&&r.photo.attachFromUrl(e.photo.url,e.photo.mediaType),e.phone?.forEach(e=>{var t="otherPhone";switch(e.type){case O.Work:t="workPhone";break;case O.Cell:t="cellPhone";break;case O.Pager:t="pagerPhone";break;case O.Home:t="homePhone"}var a=r[t];Array.isArray(a)?a.push(e.value):r[t]=[e.value]}),e.email?.forEach(e=>{var t="otherEmail";switch(e.type){case P.Work:t="workEmail";break;case P.Home:t="email"}var a=r[t];Array.isArray(a)?a.push(e.value):r[t]=[e.value]}),e.address&&Object.entries(e.address).forEach(([e,t])=>{var a="homeAddress";switch(e){case"home":a="homeAddress";break;case"work":a="workAddress"}t.streetAddress&&(r[a].street=t.streetAddress),t.locality&&(r[a].city=t.locality),t.postalCode&&(r[a].postalCode=t.postalCode),t.stateProvince&&(r[a].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[a].countryRegion=t)}),e.logo&&r.logo.attachFromUrl(e.logo.url,e.logo.mediaType),e.note&&(r.note=e.note),e.company&&(r.organization=e.company);var o=(e,r,o,n)=>{var i="item"+a++;t.push(w.Property.fromJSON([r,{group:i},"text",e])),t.push(w.Property.fromJSON(["xAbLabel",{group:i},"text",n])),i="item"+a++,t.push(w.Property.fromJSON(["impp",{group:i,xServiceType:n},"text",`${o}:${e}`])),t.push(w.Property.fromJSON(["xAbLabel",{group:i},"text",n]))};e.social&&e.social.forEach(e=>{switch(e.type){case T.Messenger:t.push(w.Property.fromJSON(["xSocialprofile",{type:"messenger",xUser:e.value},"text","x-apple:messenger"]));var n="item"+a++;t.push(w.Property.fromJSON(["impp",{group:n,xServiceType:"Facebook"},"text",`xmpp:${e.value}`])),t.push(w.Property.fromJSON(["xAbLabel",{group:n},"text","Facebook"]));break;case T.Twitter:case T.Facebook:case T.LinkedIn:case T.SinaWeibo:(n=function({value:e,type:r}){if(e=e?.trim(),!e.match(/^https?:\/\//im))try{let t=new URL(k[r]);t.pathname=(t.pathname+"/"+e).replace(/[\/\\]+/g,"/"),e=t.toString()}catch{return}return e}(e))&&(r.socialUrls[e.type]=n);break;case T.Jabber:o(e.value,"xJabber","xmpp","Jabber");break;case T.QQ:o(e.value,"xQq","x-apple","QQ");break;case T.GaduGadu:o(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 n=w.parse(r.getFormattedString())[0];return t.forEach(e=>n.addProperty(e)),n.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{P as AddressType,O as PhoneType,T 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 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 o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t--;t)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;function a(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var o=t>=0?arguments[t]:"/";if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,r="/"===o.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=a(e).substr(1),r=a(r).substr(1),e=t(e.split("/")),r=t(r.split("/"));for(var n=Math.min(e.length,r.length),o=n,i=0;i<n;i++)if(e[i]!==r[i]){o=i;break}for(n=[],i=o;i<e.length;i++)n.push("..");return(n=n.concat(r.slice(o))).join("/")}function c(e){var r=o.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=o.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 o.exec(e).slice(1)[3]}var f={extname:h,basename:p,dirname:c,sep:"/",delimiter:":",relative:u,join:l,isAbsolute:s,normalize:i,resolve:a};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:a,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,a){return r+(o>=4?a?";ENCODING=b;MEDIATYPE=image/":";MEDIATYPE=image/":3===o?a?";ENCODING=b;TYPE=":";TYPE=":a?";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 o="3";A.exports={getFormattedString:function(a){o=a.getMajorVersion();var i="";i+="BEGIN:VCARD\r\n",i+="VERSION:"+a.version+"\r\n";var s=o>=4?"":";CHARSET=UTF-8",l=a.formattedName;if(l||(l="",[a.firstName,a.middleName,a.lastName].forEach(function(e){e&&l&&(l+=" "),l+=e})),i+="FN"+s+":"+e(l)+"\r\n",i+="N"+s+":"+e(a.lastName)+";"+e(a.firstName)+";"+e(a.middleName)+";"+e(a.namePrefix)+";"+e(a.nameSuffix)+"\r\n",a.nickname&&o>=3&&(i+="NICKNAME"+s+":"+e(a.nickname)+"\r\n"),a.gender&&(i+="GENDER:"+e(a.gender)+"\r\n"),a.uid&&(i+="UID"+s+":"+e(a.uid)+"\r\n"),a.birthday&&(i+="BDAY:"+n(a.birthday)+"\r\n"),a.anniversary&&(i+="ANNIVERSARY:"+n(a.anniversary)+"\r\n"),a.email&&(Array.isArray(a.email)||(a.email=[a.email]),a.email.forEach(function(r){i=o>=4?i+"EMAIL"+s+";type=HOME:"+e(r)+"\r\n":o>=3&&o<4?i+"EMAIL"+s+";type=HOME,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";HOME;INTERNET:"+e(r)+"\r\n"})),a.workEmail&&(Array.isArray(a.workEmail)||(a.workEmail=[a.workEmail]),a.workEmail.forEach(function(r){i=o>=4?i+"EMAIL"+s+";type=WORK:"+e(r)+"\r\n":o>=3&&o<4?i+"EMAIL"+s+";type=WORK,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";WORK;INTERNET:"+e(r)+"\r\n"})),a.otherEmail&&(Array.isArray(a.otherEmail)||(a.otherEmail=[a.otherEmail]),a.otherEmail.forEach(function(r){i=o>=4?i+"EMAIL"+s+";type=OTHER:"+e(r)+"\r\n":o>=3&&o<4?i+"EMAIL"+s+";type=OTHER,INTERNET:"+e(r)+"\r\n":i+"EMAIL"+s+";OTHER;INTERNET:"+e(r)+"\r\n"})),a.logo.url&&(i+=t("LOGO",a.logo.url,a.logo.mediaType,a.logo.base64)),a.photo.url&&(i+=t("PHOTO",a.photo.url,a.photo.mediaType,a.photo.base64)),a.cellPhone&&(Array.isArray(a.cellPhone)||(a.cellPhone=[a.cellPhone]),a.cellPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,cell":tel:'+e(r)+"\r\n":i+"TEL;TYPE=CELL:"+e(r)+"\r\n"})),a.pagerPhone&&(Array.isArray(a.pagerPhone)||(a.pagerPhone=[a.pagerPhone]),a.pagerPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="pager,cell":tel:'+e(r)+"\r\n":i+"TEL;TYPE=PAGER:"+e(r)+"\r\n"})),a.homePhone&&(Array.isArray(a.homePhone)||(a.homePhone=[a.homePhone]),a.homePhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,home":tel:'+e(r)+"\r\n":i+"TEL;TYPE=HOME,VOICE:"+e(r)+"\r\n"})),a.workPhone&&(Array.isArray(a.workPhone)||(a.workPhone=[a.workPhone]),a.workPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,work":tel:'+e(r)+"\r\n":i+"TEL;TYPE=WORK,VOICE:"+e(r)+"\r\n"})),a.homeFax&&(Array.isArray(a.homeFax)||(a.homeFax=[a.homeFax]),a.homeFax.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="fax,home":tel:'+e(r)+"\r\n":i+"TEL;TYPE=HOME,FAX:"+e(r)+"\r\n"})),a.workFax&&(Array.isArray(a.workFax)||(a.workFax=[a.workFax]),a.workFax.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="fax,work":tel:'+e(r)+"\r\n":i+"TEL;TYPE=WORK,FAX:"+e(r)+"\r\n"})),a.otherPhone&&(Array.isArray(a.otherPhone)||(a.otherPhone=[a.otherPhone]),a.otherPhone.forEach(function(r){i=o>=4?i+'TEL;VALUE=uri;TYPE="voice,other":tel:'+e(r)+"\r\n":i+"TEL;TYPE=OTHER:"+e(r)+"\r\n"})),[{details:a.homeAddress,type:"HOME"},{details:a.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)&&(o>=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}),a.title&&(i+="TITLE"+s+":"+e(a.title)+"\r\n"),a.role&&(i+="ROLE"+s+":"+e(a.role)+"\r\n"),a.organization&&(i+="ORG"+s+":"+e(a.organization)+"\r\n"),a.url&&(i+="URL"+s+":"+e(a.url)+"\r\n"),a.workUrl&&(i+="URL;type=WORK"+s+":"+e(a.workUrl)+"\r\n"),a.note&&(i+="NOTE"+s+":"+e(a.note)+"\r\n"),a.socialUrls)for(var u in a.socialUrls)a.socialUrls.hasOwnProperty(u)&&a.socialUrls[u]&&(i+="X-SOCIALPROFILE"+s+";TYPE="+u+":"+e(a.socialUrls[u])+r());return a.source&&(i+="SOURCE"+s+":"+e(a.source)+"\r\n"),i+="REV:"+(new Date).toISOString()+"\r\n",a.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),o=[],a=0;a<n.length;a++)if("group"!==n[a])switch(t){case"TEL":case"ADR":case"EMAIL":"2.1"===e?Array.isArray(this[n[a]])?o.push(this[n[a]].join(";")):o.push(this[n[a]]):o.push(r(n[a])+"="+this[n[a]]);break;default:o.push(r(n[a])+"="+this[n[a]])}return"2.1"===e||"3.0"===e?t+(o.length?";"+o.join(";").toUpperCase():o.toString().toUpperCase())+":"+(Array.isArray(this._data)?this._data.join(";"):this._data):t+(o.length?";"+o.join(";"):o)+":"+(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 o=t(n[0]),a=n[1];return null!=a&&""!==a||(a=n[0],o="type"),"type"===o?('"'===a[0]&&'"'===a[a.length-1]&&-1!==a.indexOf(",")&&(a=a.slice(1,-1)),a.toLowerCase().split(",").forEach(function(t){e(r,o,t)}),r):(e(r,o,a),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 o=0;o<e.length;o++){let a=e[o];r&&/[a-zA-Z]/.test(a)&&a.toUpperCase()===a?(e=e.slice(0,o)+"-"+e.slice(o),r=!1,n=t,t=!0,o++):t&&n&&/[a-zA-Z]/.test(a)&&a.toLowerCase()===a?(e=e.slice(0,o-1)+"-"+e.slice(o-1),n=t,t=!1,r=!0):(r=a.toLowerCase()===a&&a.toUpperCase()!==a,n=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 C.exports=e,C.exports.default=e,C.exports}(),n=S();return L=function(o){for(var a,i={},s=/^([^;:]+)((?:;(?:[^;:]+))*)(?::([\s\S]+))?$/i,l=o.length-1,u=1;u<l;u++){a=o[u];var c=s.exec(a);if(c){var p=c[1].split(".");a=p.pop();var h=p.pop();p=c[3],c=(c[2]?c[2].replace(/^;|;$/g,"").split(";"):[]).reduce(r,h?{group:h}:{}),e(i,a=t(a),p=new n(a,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="",o=0,a=0,i=e.length,s=0,l=0;o<i;){if(!t&&~(a=e.lastIndexOf(" ",o+r))?a>o?(n+=e.slice(o,a)+"\r\n ",o=a):(n+=e.slice(o,o+r-l)+"\r\n ",o=o+r-l,t=!0):(n+=e.slice(o,o+r-l)+"\r\n ",o=o+r-l),i-o<r){n+=e.slice(o);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 o,a=Object.keys(r.data),i=0;i<a.length;i++)if("version"!==a[i])if(o=r.data[a[i]],Array.isArray(o))for(var s=0;s<o.length;s++)o[s].isEmpty()||n.push(e.foldLine(o[s].toString(t),75));else o.isEmpty()||n.push(e.foldLine(o.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],o=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(o))throw new SyntaxError('Invalid vCard: Expected "END:VCARD" but found "'+o+'"');if(!a.test(n)&&!(n=r.find(e=>a.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 o=0;o<t.length;o++)e.push(t[o].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];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];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 o=(e,r,o,a)=>{var i="item"+n++;t.push(F.Property.fromJSON([r,{group:i},"text",e])),t.push(F.Property.fromJSON(["xAbLabel",{group:i},"text",a])),i="item"+n++,t.push(F.Property.fromJSON(["impp",{group:i,xServiceType:a},"text",`${o}:${e}`])),t.push(F.Property.fromJSON(["xAbLabel",{group:i},"text",a]))};e.social&&e.social.forEach(e=>{switch(e.type){case V.Messenger:t.push(F.Property.fromJSON(["xSocialprofile",{type:"messenger",xUser:e.value},"text","x-apple:messenger"]));var a="item"+n++;t.push(F.Property.fromJSON(["impp",{group:a,xServiceType:"Facebook"},"text",`xmpp:${e.value}`])),t.push(F.Property.fromJSON(["xAbLabel",{group:a},"text","Facebook"]));break;case V.Twitter:case V.Facebook:case V.LinkedIn:case V.SinaWeibo:(a=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]=a);break;case V.Jabber:o(e.value,"xJabber","xmpp","Jabber");break;case V.QQ:o(e.value,"xQq","x-apple","QQ");break;case V.GaduGadu:o(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=F.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{j as AddressType,M as PhoneType,V as SocialType};
2
2
  //# sourceMappingURL=vcard-plugin.js.map
@@ -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\nexport interface Image {\r\n /** URL where photo can be found */\r\n url: string\r\n /** the media type */\r\n mediaType: string\r\n}\r\n\r\nexport interface VCardPluginOptions {\r\n data: {\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\r\n photo?: Image\r\n phone?: Array<{ type?: `${PhoneType}`, value: string }>\r\n email?: Array<{ type?: `${AddressType}`, value: string }>\r\n\r\n address?: {\r\n work?: Address\r\n home?: Address\r\n }\r\n\r\n logo?: Image\r\n note?: string\r\n company?: string\r\n social?: Array<{ type: `${SocialType}`, value: string }>\r\n\r\n website?: {\r\n personal?: string\r\n company?: string\r\n }\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 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 = data.birthday\r\n\r\n if (data.photo)\r\n card.photo.attachFromUrl(data.photo.url, data.photo.mediaType)\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 (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\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 (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\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.logo)\r\n card.logo.attachFromUrl(data.logo.url, data.logo.mediaType)\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 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","fs","require$$0","require$$1","extname","toUpperCase","readFileSync","toString","embedFromString","base64String","facebook","linkedIn","twitter","flickr","majorVersionString","split","isNaN","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","Q","Home","Work","PhoneType","S","Cell","Pager","SocialType","U","Messenger","Twitter","Facebook","LinkedIn","SinaWeibo","Jabber","QQ","GaduGadu","VCardPlugin","pluginOptions","uuid","configure","generateVCard","VCard","fullName","extraProps","groupCounter","n","first","last","middle","nick","prefix","suffix","phone","el","v","entries","streetAddress","locality","region","cr","country","p","company","pushMsgProtocol","username","protocol","service","xServiceType","social","xUser","val","u","URL","pathname","getSocialUrl","surl","website","personal","parsed","tx"],"mappings":"+LASCA,WAQAC,SAASA,EAAEC,GACV,UACuB,qBACrBA,EAAQ,GAAKA,GAEPA,EAAMC,QAAQ,MAAO,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,KAAM,QAEhE,EAPU,CAclBC,SAASA,IACR,MAAO,MADM,CAWdC,SAASA,EAAkBC,EAAWC,EAAKC,EAAWC,GAarD,OADqBH,GARjBI,GAAgB,EACVD,EAAS,+BAAiC,oBACxB,IAAjBC,EACDD,EAAS,oBAAsB,SAE/BA,EAAS,oBAAsB,KAGCD,EAAY,IAAMP,EAAEM,GAtBvD,MAUsD,CA+D9DI,WAAkBC,GACjB,SAAYC,eAAiB,KAAOD,EAAKE,WAAW,IAAIC,OAAM,IAAO,IAAMH,EAAKI,WAAWD,SADpE,CA/FxB,IAAIL,EAAe,IAmGnBO,UAAiB,CAOhBC,mBAAoBA,SAASC,GAE5BT,EAAeS,EAAMC,kBAErB,IAAIC,EAAuB,GAC3BA,GAAwB,kBACxBA,GAAwB,WAAaF,EAAMG,QA1FrC,OA4FN,IAAIC,EAAiBb,GAAgB,EAAI,GAAK,iBAC1Cc,EAAgBL,EAAMK,cAwP1B,GAtPKA,IACJA,EAAgB,GAEhB,CAACL,EAAMM,UAAWN,EAAMO,WAAYP,EAAMQ,UACxCC,QAAQ,SAASC,GACbA,GACCL,IACHA,GAAiB,KAGnBA,GAAiBK,CANM,IAU1BR,GAAwB,KAAOE,EAAiB,IAAMtB,EAAEuB,GA7GlD,OA8GNH,GAAwB,IAAME,EAAiB,IAC9CtB,EAAEkB,EAAMQ,UAAY,IACpB1B,EAAEkB,EAAMM,WAAa,IACrBxB,EAAEkB,EAAMO,YAAc,IACtBzB,EAAEkB,EAAMW,YAAc,IACtB7B,EAAEkB,EAAMY,YAnHH,OAqHFZ,EAAMa,UAAYtB,GAAgB,IACrCW,GAAwB,WAAaE,EAAiB,IAAMtB,EAAEkB,EAAMa,UAtH/D,QAyHFb,EAAMc,SACTZ,GAAwB,UAAYpB,EAAEkB,EAAMc,QA1HvC,UA6HIC,MACTb,GAAwB,MAAQE,EAAiB,IAAMtB,EAAEkB,EAAMe,KA9H1D,QAiIFf,EAAMgB,WACTd,GAAwB,QAAUV,EAASQ,EAAMgB,UAlI5C,QAqIFhB,EAAMiB,cACTf,GAAwB,eAAiBV,EAASQ,EAAMiB,aAtInD,UAyIIC,QACLC,MAAMC,QAAQpB,EAAMkB,SACvBlB,EAAMkB,MAAQ,CAAClB,EAAMkB,QAEtBlB,EAAMkB,MAAMT,QACX,SAASY,GAEPnB,EADGX,GAAgB,EACnBW,EAAwB,QAAUE,EAAiB,cAAgBtB,EAAEuC,GAhJnE,OAiJQ9B,GAAgB,GAAKA,EAAe,EAC9CW,EAAwB,QAAUE,EAAiB,uBAAyBtB,EAAEuC,GAlJ5E,OAoJFnB,EAAwB,QAAUE,EAAiB,kBAAoBtB,EAAEuC,GApJvE,MA8Ic,IAYhBrB,EAAMsB,YACLH,MAAMC,QAAQpB,EAAMsB,aACvBtB,EAAMsB,UAAY,CAACtB,EAAMsB,YAE1BtB,EAAMsB,UAAUb,QACf,SAASY,GAEPnB,EADGX,GAAgB,EACnBW,EAAwB,QAAUE,EAAiB,cAAgBtB,EAAEuC,GAjKnE,OAkKQ9B,GAAgB,GAAKA,EAAe,EAC9CW,EAAwB,QAAUE,EAAiB,uBAAyBtB,EAAEuC,GAnK5E,OAqKFnB,EAAwB,QAAUE,EAAiB,kBAAoBtB,EAAEuC,GArKvE,MA+Jc,MAYVE,aACLJ,MAAMC,QAAQpB,EAAMuB,cACvBvB,EAAMuB,WAAa,CAACvB,EAAMuB,aAE3BvB,EAAMuB,WAAWd,QAChB,SAASY,GAEPnB,EADGX,GAAgB,EACnBW,EAAwB,QAAUE,EAAiB,eAAiBtB,EAAEuC,GAlLpE,OAmLQ9B,GAAgB,GAAKA,EAAe,EAC9CW,EAAwB,QAAUE,EAAiB,wBAA0BtB,EAAEuC,GApL7E,OAsLFnB,EAAwB,QAAUE,EAAiB,mBAAqBtB,EAAEuC,GAtLxE,MAgLc,IAYhBrB,EAAMwB,KAAKpC,MACdc,GAAwBhB,EAAkB,OAAQc,EAAMwB,KAAKpC,IAAKY,EAAMwB,KAAKnC,UAAWW,EAAMwB,KAAKlC,SAGhGU,EAAMyB,MAAMrC,MACfc,GAAwBhB,EAAkB,QAASc,EAAMyB,MAAMrC,IAAKY,EAAMyB,MAAMpC,UAAWW,EAAMyB,MAAMnC,SAGpGU,EAAM0B,YACLP,MAAMC,QAAQpB,EAAM0B,aACvB1B,EAAM0B,UAAY,CAAC1B,EAAM0B,YAE1B1B,EAAM0B,UAAUjB,QACf,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,uCAAyCpB,EAAE6C,GA3MjE,OA6MFzB,EAAwB,iBAAmBpB,EAAE6C,GA7M3C,MAyMY,IAUd3B,EAAM4B,aACLT,MAAMC,QAAQpB,EAAM4B,cACvB5B,EAAM4B,WAAa,CAAC5B,EAAM4B,aAE3B5B,EAAM4B,WAAWnB,QAChB,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,uCAAyCpB,EAAE6C,GA1NjE,OA4NFzB,EAAwB,kBAAoBpB,EAAE6C,GA5N5C,MAwNa,IAUf3B,EAAM6B,YACLV,MAAMC,QAAQpB,EAAM6B,aACvB7B,EAAM6B,UAAY,CAAC7B,EAAM6B,YAE1B7B,EAAM6B,UAAUpB,QACf,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,uCAAyCpB,EAAE6C,GAzOjE,OA2OFzB,EAAwB,uBAAyBpB,EAAE6C,GA3OjD,MAuOa,MAUTG,YACLX,MAAMC,QAAQpB,EAAM8B,aACvB9B,EAAM8B,UAAY,CAAC9B,EAAM8B,YAE1B9B,EAAM8B,UAAUrB,QACf,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,uCAAyCpB,EAAE6C,GAxPjE,OA2PFzB,EAAwB,uBAAyBpB,EAAE6C,GA3PjD,MAsPa,IAWf3B,EAAM+B,UACLZ,MAAMC,QAAQpB,EAAM+B,WACvB/B,EAAM+B,QAAU,CAAC/B,EAAM+B,UAExB/B,EAAM+B,QAAQtB,QACb,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,qCAAuCpB,EAAE6C,GAxQ/D,OA2QFzB,EAAwB,qBAAuBpB,EAAE6C,GA3Q/C,MAsQa,IAWf3B,EAAMgC,UACLb,MAAMC,QAAQpB,EAAMgC,WACvBhC,EAAMgC,QAAU,CAAChC,EAAMgC,UAExBhC,EAAMgC,QAAQvB,QACb,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,qCAAuCpB,EAAE6C,GAxR/D,OA2RFzB,EAAwB,qBAAuBpB,EAAE6C,GA3R/C,MAsRa,MAWTM,aACLd,MAAMC,QAAQpB,EAAMiC,cACvBjC,EAAMiC,WAAa,CAACjC,EAAMiC,aAE3BjC,EAAMiC,WAAWxB,QAChB,SAASkB,GAEPzB,EADGX,GAAgB,EACnBW,EAAwB,wCAA0CpB,EAAE6C,GAxSlE,OA2SFzB,EAAwB,kBAAoBpB,EAAE6C,GA3S5C,MAsSa,KAWlB,CACAO,QAASlC,EAAMmC,YACfC,KAAM,QACJ,CACFF,QAASlC,EAAMqC,YACfD,KAAM,SACJ3B,QACF,SAASY,GACRnB,IAAAA,EAAAA,EAvRCoC,EAAmB,IAuRwCjB,EArRnDa,QAAQK,OAqR2ClB,EApRtDa,QAAQM,QAoR8CnB,EAnRtDa,QAAQO,MAmR8CpB,EAlRtDa,QAAQQ,eAkR8CrB,EAjRtDa,QAAQS,YAiR8CtB,EAhRtDa,QAAQU,iBAEZrD,GAAgB,EACnB+C,EAAmB,MA6Q0BlC,EA7QD,SA6QiBiB,EA7QEe,MA6QFf,EA5QnDa,QAAQK,MAAQ,WAAazD,EA4QsBuC,EA5QZa,QAAQK,OAAS,IAAM,IAAM,MAC7EzD,EA2Q4DuC,EA3QlDa,QAAQM,QAAU,IAC5B1D,EA0Q4DuC,EA1QlDa,QAAQO,MAAQ,IAC1B3D,EAyQ4DuC,EAzQlDa,QAAQQ,eAAiB,IACnC5D,EAwQ4DuC,EAxQlDa,QAAQS,YAAc,IAChC7D,EAuQ4DuC,EAvQlDa,QAAQU,eAlDd,QAyTwDvB,EArQjDa,QAAQK,QACnBD,EAAmB,QAoQyBlC,EApQE,SAoQciB,EApQKe,KAAO,IAAMtD,EAoQlBuC,EApQ4Ba,QAAQK,OArD5F,QAuDLD,GAAoB,MAkQyBlC,EAlQA,SAkQgBiB,EAlQGe,KAAO,MACtEtD,EAiQ4DuC,EAjQlDa,QAAQM,QAAU,IAC5B1D,EAgQ4DuC,EAhQlDa,QAAQO,MAAQ,IAC1B3D,EA+P4DuC,EA/PlDa,QAAQQ,eAAiB,IACnC5D,EA8P4DuC,EA9PlDa,QAAQS,YAAc,IAChC7D,EA6P4DuC,EA7PlDa,QAAQU,eA5Dd,SAyTJ1C,EAAAA,EAxPIoC,CAuPa,GAKftC,EAAM6C,QACT3C,GAAwB,QAAUE,EAAiB,IAAMtB,EAAEkB,EAAM6C,OA9T5D,QAiUF7C,EAAM8C,OACT5C,GAAwB,OAASE,EAAiB,IAAMtB,EAAEkB,EAAM8C,MAlU3D,UAqUIC,eACT7C,GAAwB,MAAQE,EAAiB,IAAMtB,EAAEkB,EAAM+C,cAtU1D,QAyUF/C,EAAMZ,MACTc,GAAwB,MAAQE,EAAiB,IAAMtB,EAAEkB,EAAMZ,KA1U1D,QA6UFY,EAAMgD,UACT9C,GAAwB,gBAAkBE,EAAiB,IAAMtB,EAAEkB,EAAMgD,SA9UpE,QAiVFhD,EAAMiD,OACT/C,GAAwB,OAASE,EAAiB,IAAMtB,EAAEkB,EAAMiD,MAlV3D,QAqVFjD,EAAMkD,WACT,IAAKC,IAAIA,KAAOnD,EAAMkD,WACjBlD,EAAMkD,WAAWE,eAAeD,IACnCnD,EAAMkD,WAAWC,KACjBjD,GAAwB,kBAAoBE,EAAiB,SAAW+C,EAAM,IAAMrE,EAAEkB,EAAMkD,WAAWC,IAAQlE,KAgBlH,OAXIe,EAAMqD,SACTnD,GAAwB,SAAWE,EAAiB,IAAMtB,EAAEkB,EAAMqD,QA/V7D,QAkWNnD,GAAwB,QAAsBoD,IAARC,MAAQD,cAlWxC,OAoWFtD,EAAMwD,iBACTtD,GAAwB,0BAGzBA,GAAwB,eApRW,EA3GrCrB,CAAAA,sBCwUD4E,EAxUazD,WAIT0D,aACI,MAAO,CACHtE,IAAK,GACLC,UAAW,GACXC,QAAQ,EAORqE,cAAeA,SAASvE,EAAKC,GACzBuE,KAAKxE,IAAMA,EACXwE,KAAKvE,UAAYA,EACjBuE,KAAKtE,QAAS,CAHsB,EAUxCuE,cAAeA,SAASC,GACtB,IAAIC,EAAOC,OAEN3E,UADM4E,EACWC,QAAQJ,GAAcK,cAAcnF,QAAQ,MAAO,IAEzE4E,KAAKxE,IADS2E,EAAGK,aAAaN,GACXO,SAAS,UAC5BT,KAAKtE,QAAS,CANsB,EAatCgF,gBAAiBA,SAASC,EAAclF,GACtCuE,KAAKvE,UAAYA,OACZD,IAAMmF,OACNjF,QAAS,CAHmC,EAlCvC,CAqGpB,MAAO,CAMHyB,IAAK,GAMLC,SAAU,GAMVU,UAAW,GAMXE,WAAY,GAMZV,MAAO,GAMPI,UAAW,GAMXhB,UAAW,GAMXD,cAAe,GAMfS,OAAQ,GAMRqB,YAnHO,CAKHI,MAAO,GAMPC,OAAQ,GAMRC,KAAM,GAMNC,cAAe,GAMfC,WAAY,GAMZC,cAAe,IAsFnBf,UAAW,GAMXE,QAAS,GAMTvB,SAAU,GAMVgB,KAAMkC,IAMNnD,WAAY,GAMZI,WAAY,GAMZC,WAAY,GAMZC,SAAU,GAMVoC,KAAM,GAMNF,aAAc,GAMdtB,MAAOiC,IAMPZ,KAAM,GAMNI,WArJO,CACHsB,SAAY,GACZC,SAAY,GACZC,QAAW,GACXC,OAAU,IAuJdtB,OAAQ,GAMRR,MAAO,GAMPzD,IAAK,GAML4D,QAAS,GAMTX,YA/NO,CAKHE,MAAO,GAMPC,OAAQ,GAMRC,KAAM,GAMNC,cAAe,GAMfC,WAAY,GAMZC,cAAe,IAkMnBd,UAAW,GAMXE,QAAS,GAMT7B,QAAS,MAMTF,gBAAiBA,WACb,IAAI2E,EAAqBhB,KAAKzD,QAAUyD,KAAKzD,QAAQ0E,MAAM,KAAK,GAAK,IACrE,OAAKC,MAAMF,GAGJ,EAFIG,SAASH,EAHI,EAY5B7E,mBAAoBA,WAEhB,OADqBiF,IACCjF,mBAAmB6D,KAFd,EAS/BqB,WAAYA,SAASC,GAEjB,IAAIC,EADiBH,IACSjF,mBAAmB6D,MAExCI,EACNoB,cAAcF,EAAUC,EAAU,CAAEE,SAAU,QALtB,EA9Td,4DCAzBC,SAASA,EAAUC,EAAOxG,EAAOyG,GAE/B,KAAM5B,mBACJ,OAAO,IAAI0B,EAAUvG,GAET,MAAVyG,GACFC,OAAOC,OAAQ9B,KAAM4B,GAEvB5B,KAAK+B,OAASJ,EACd3B,KAAKgC,MAAQ7G,EAEb0G,OAAOI,eAAgBjC,KAAM,SAAU,CAAEkC,YAAY,IACrDL,OAAOI,eAAgBjC,KAAM,QAAS,CAAEkC,YAAY,GAZZ,CA2C1CC,SAASA,EAAiBhH,GACxB,OAAOA,EAAMC,QAAS,WAAY,OAAQmF,aADV,iBAtBlCmB,EAASU,SAAWC,SAAUC,GAE5B,IAAIX,EAAQW,EAAK,GACbV,EAASU,EAAK,GAQlB,MANK,QAAQC,KAAMD,EAAK,MACtBV,EAAOzG,MAAQmH,EAAK,IAKf,IAAIZ,EAAUC,EAHjBxG,EAAQoC,MAAMC,QAAS8E,EAAK,IAC9BA,EAAK,GAAGE,KAAM,KAAQF,EAAK,GAEMV,EAXA,EA8BrCF,EAASe,UAAY,CAEnBC,YAAahB,EAObiB,GAAIA,SAAUnE,GAEZ,OADAA,GAASA,EAAO,IAAKoE,oBACRpF,QAASwC,KAAKxB,MACzBwB,KAAKxB,KAAKqE,QAASrE,IAAU,EAC7BwB,KAAKxB,OAASA,CAJG,EAWrBsE,QAASA,WACP,OAAqB,MAAd9C,KAAKgC,OACqB,IAA/BH,OAAOkB,KAAM/C,MAAOgD,MAFJ,EASpBC,MAAOA,WACL,OAAO,IAAIvB,EAAU1B,KAAK+B,OAAQ/B,KAAKgC,MAAOhC,KAD9B,EASlBS,SAAUA,SAAUlE,GAMlB,IAJA,IAAI2G,GAAYlD,KAAKmD,MAAQnD,KAAKmD,MAAQ,IAAM,IAAMhB,EAAiBnC,KAAK+B,QACxEgB,EAAOlB,OAAOkB,KAAM/C,MACpB4B,EAAS,GAEJwB,EAAI,EAAGA,EAAIL,EAAKC,OAAQI,IAC/B,GAAgB,UAAZL,EAAKK,GAET,OAAQF,GACN,IAAK,MACL,IAAK,MACL,IAAK,QACa,QAAZ3G,EACEgB,MAAMC,QAAQwC,KAAK+C,EAAKK,KAC1BxB,EAAOyB,KAAKrD,KAAK+C,EAAKK,IAAIZ,KAAK,MAE/BZ,EAAOyB,KAAKrD,KAAK+C,EAAKK,KAGxBxB,EAAOyB,KAAKlB,EAAgBY,EAAKK,IAAM,IAAMpD,KAAK+C,EAAKK,KACzD,MACF,QACExB,EAAOyB,KAAKlB,EAAgBY,EAAKK,IAAM,IAAMpD,KAAK+C,EAAKK,KAI7D,MAAgB,QAAZ7G,GAAiC,QAAZA,EAChB2G,GACHtB,EAAOoB,OAAS,IAAMpB,EAAOY,KAAM,KAAMjC,cAAgBqB,EAAOnB,WAAWF,eAAkB,KAC7FhD,MAAMC,QAASwC,KAAKgC,OAAUhC,KAAKgC,MAAMQ,KAAM,KAAQxC,KAAKgC,OAEzDkB,GACHtB,EAAOoB,OAAS,IAAMpB,EAAOY,KAAM,KAAQZ,GAAW,KACtDrE,MAAMC,QAASwC,KAAKgC,OAAUhC,KAAKgC,MAAMQ,KAAM,KAAQxC,KAAKgC,MAlCtC,EA0C9BsB,QAASA,WACP,OAAOtD,KAAKgC,KADM,EAQpBuB,OAAQA,WAEN,IAAI3B,EAASC,OAAOC,OAAO,GAAG9B,MAS9B,OAPqB,SAAjB4B,EAAOzG,QACTyG,EAAOzG,WAAQ,SACRyG,EAAOzG,OAGZmH,EAAO,CAAEtC,KAAK+B,OAAQH,EAAQ5B,KAAK7E,OAAS,QAExC6E,KAAK+B,QACX,QAASO,EAAKe,KAAMrD,KAAKgC,OACzB,MAAA,IAAK,MACL,IAAK,IACHM,EAAKe,KAAMrD,KAAKgC,MAAMf,MAAO,MAGjC,OAAOqB,CAlBU,GAyBrBkB,EAAiB9B,gBC1KjB+B,SAASA,EAAKC,EAAQnE,EAAKpE,GACrBoC,MAAMC,QAASkG,EAAQnE,IACzBmE,EAAQnE,GAAM8D,KAAMlI,GAEpBuI,EAAQnE,GADkB,MAAjBmE,EAAQnE,GACD,CAAEmE,EAAQnE,GAAOpE,GAEjBA,CANe,CAUnCwI,SAASA,EAAc/B,EAAQgC,GAEzBC,EAAQD,EAAM3C,MAAO,KACzB,IAAI6C,EAAIC,EAAWF,EAAM,IACrB1I,EAAQ0I,EAAM,GAOlB,OALa,MAAT1I,GAA2B,KAAVA,IACnBA,EAAQ0I,EAAM,GACdC,EAAI,QAGI,SAANA,GAEiB,MAAf3I,EAAO,IAA6C,MAA9BA,EAAOA,EAAM6H,OAAS,KAAsC,IAAvB7H,EAAM0H,QAAQ,OAC3E1H,EAAQA,EAAMa,MAAM,GAAG,IACzBb,EAAMyH,cAAc3B,MAAO,KAAMpE,QAAS,SAAU1B,GAClDsI,EAAK7B,EAAQkC,EAAG3I,EAD0C,GAIrDyG,IAIT6B,EAAK7B,EAAQkC,EAAG3I,GAETyG,EAzB8B,mBAbvC,IAAImC,6CC+BW,CAAAC,EAASC,KACvB,GAAuB,iBAAVD,IAAsBzG,MAAMC,QAAQwG,GAChD,MAAM,IAAIE,UAAU,uDAGrBD,EAAUpC,OAAOC,OAAO,CACvBqC,YAAY,GACVF,KAIC1G,MAAMC,QAAQwG,GACTA,EAAMI,IAAIC,GAAKA,EAAEC,QACvBC,OAAOF,GAAKA,EAAErB,QACdR,KAAK,KAECwB,EAAMM,OAGM,IAAjBN,EAAMhB,OACF,GAGa,IAAjBgB,EAAMhB,OACFiB,EAAQE,WAAaH,EAAMzD,cAAgByD,EAAMpB,mBAG1BoB,EAAMpB,gBAGpCoB,EA3DqBQ,KACtB,IAAIC,GAAkB,EAClBC,GAAkB,EAClBC,GAAsB,EAE1B,IAAK,IAAIvB,EAAI,EAAGA,EAAIoB,EAAOxB,OAAQI,IAAK,CACvC,IAAMwB,EAAYJ,EAAOpB,GAErBqB,GAAmB,WAAWlC,KAAKqC,IAAcA,EAAUrE,gBAAkBqE,GAChFJ,EAASA,EAAOxI,MAAM,EAAGoH,GAAK,IAAMoB,EAAOxI,MAAMoH,GACjDqB,GAAkB,EAClBE,EAAsBD,EACtBA,GAAkB,EAClBtB,KACUsB,GAAmBC,GAAuB,WAAWpC,KAAKqC,IAAcA,EAAUhC,gBAAkBgC,GAC9GJ,EAASA,EAAOxI,MAAM,EAAGoH,EAAI,GAAK,IAAMoB,EAAOxI,MAAMoH,EAAI,GACzDuB,EAAsBD,EACtBA,GAAkB,EAClBD,GAAkB,IAElBA,EAAkBG,EAAUhC,gBAAkBgC,GAAaA,EAAUrE,gBAAkBqE,EACvFD,EAAsBD,EACtBA,EAAkBE,EAAUrE,gBAAkBqE,GAAaA,EAAUhC,gBAAkBgC,EAjBjD,CAqBxC,OAAOJ,GAiCEK,CAAkBb,IAG3BA,EAAQA,EACN5I,QAAQ,YAAa,IACrBwH,cACAxH,QAAQ,kBAAmB,CAAC0J,EAAGC,IAAOA,EAAGxE,eACzCnF,QAAQ,aAAc4J,GAAKA,EAAEzE,eA5BX8D,EA8BDL,EA9BMC,EAAQE,WAAaE,EAAEY,OAAO,GAAG1E,cAAgB8D,EAAErI,MAAM,GAAKqI,GAAnEa,IAAAb,UAiCrBc,EAAAC,QAAiBrB,EAEjBoB,EAAAC,QAAAC,QAAyBtB,YD3ET3D,GACZsB,EAAWrB,WA6EfiF,EApCAC,SAAqBC,GAUnB,IARA,IAIIC,EAJAnD,EAAO,CAAA,EAKPoD,EAAU,+CACVC,EAAMH,EAAMxC,OAAS,EAEhBI,EAAI,EAAGA,EAAIuC,EAAKvC,IAAM,CAE7BqC,EAAOD,EAAMpC,OAETwC,EAAQF,EAAQG,KAAMJ,GAC1B,GAAKG,EAAL,CAEA,IAAI9I,EAAO8I,EAAM,GAAG3E,MAAM,KACtBuC,EAAW1G,EAAKgJ,MACpB,IAAI3C,EAAQrG,EAAKgJ,QACLF,EAAM,GAIdG,GAHSH,EAAM,GACjBA,EAAM,GAAGxK,QAAS,SAAU,IAAK6F,MAAO,KAAQ,IAE1B+E,OAAQrC,EAAcR,EAAQ,CAAEA,MAAOA,GAAU,CAAA,KAIpEb,EAHDY,EAAWa,EAAWP,GACtByC,EAAU,IAAIvE,EAAUwB,EAAU/H,EAAO4K,GAX7C,CAL6B,CAsB/B,OAAOzD,CAhCoB,UE7BjB4D,iBCRZ9J,SAASA,IAEP,KAAM4D,gBAAgB5D,GACpB,WAAWA,EAGb4D,KAAKzD,QAAUH,EAAM+J,SAAU/J,EAAM+J,SAASnD,OAAS,GAEvDhD,KAAKsC,KAAO,CAAA,CARG,iBAgBjBlG,EAAMgK,SAAW,aAMjBhK,EAAMiK,UAAY,OAMlBjK,EAAM+J,SAAW,CAAE,MAAO,MAAO,OAMjC/J,EAAMkK,IAAM,OAUZlK,EAAMmK,oBCTNA,SAASA,EAAUvC,EAAOwC,EAAWC,GAEnC,GAAiB,MAAbD,GAAqBA,EAbNE,EAcjB,MAAUC,MAAO,0CAGnB,GAAiB,MAAbH,GAAqBA,EA/BNI,IAgCjB,MAAUD,MAAO,sCASnB,GALAH,EAAYA,GA7BWK,IA+BvB7C,EAAQA,EAAM5I,QAAS,WAAY,KAGzB4H,QAAUwD,EAClB,OAAOxC,EAUT,IAPA,IAAI8C,EAAS,GACTC,EAAQ,EACRC,EAAY,EACZhE,EAASgB,EAAMhB,OACfyC,EAAO,EACPnB,EAAO,EAEJyC,EAAQ/D,GAAS,CActB,IAbKyD,KAAeO,EAAYhD,EAAMiD,YAjElCC,IAiEmDH,EAAQP,IACzDQ,EAAYD,GACdD,GAAU9C,EAAMhI,MAAO+K,EAAOC,GArE5BG,QAsEFJ,EAAQC,IAERF,GAAU9C,EAAMhI,MAAO+K,EAAOA,EAAQP,EAAYlC,GAxEhD6C,QAyEFJ,EAAQA,EAAQP,EAAYlC,EAC5BmC,GAAW,IAGbK,GAAU9C,EAAMhI,MAAO+K,EAAOA,EAAQP,EAAYlC,GA7E9C6C,QA8EJJ,EAAQA,EAAQP,EAAYlC,GAExBtB,EAAS+D,EAAUP,EAAY,CACnCM,GAAU9C,EAAMhI,MAAO+K,GACvB,KAFmC,CAIxB,IAATtB,IACFnB,EAAO,GAETmB,GArBsB,CAwBxB,OAAOqB,CAnDuC,iBAuDhDP,EAASa,OAASC,SAAiBrD,GACjC,OAAOA,EAAM5I,QAAS,WAAY,GADO,EAI3CkM,EAAiBf,GDlDAnG,GAOjBhE,EAAMmL,UAAYC,SAAUxD,GAC1B,OAASA,EAAQ,IAEd5I,QAAS,yBAA0B,IAEnCA,QAAS,6BAA8B,MAEvCA,QAAS,kBAAmB,GAPG,EAepCgB,EAAMqL,YAAcC,SAAUnL,GAC5B,MAAO,WAAWgG,KAAMhG,KACgB,IAAtCH,EAAM+J,SAAStD,QAAStG,EAFY,IAUlCoL,MAAQC,SAAUzM,GAElB0M,GAAY1M,EAAQ,IAAK8F,MAAO,qBAGpC,IAFA,IAAI6G,EAAQ,GAEH1E,EAAI,EAAGA,EAAIyE,EAAQ7E,OAAQI,IAClC0E,EAAMzE,MAAkBsE,IAARvL,GAAQuL,MAAOE,EAAQzE,YAGlC0E,CATuB,IAkB1BvC,WAAalF,IAOnBjE,EAAMgG,SAAW2F,SAAUC,GAKzB,GAAa,OAHbA,EAAyB,iBAAVA,EACbC,KAAKN,MAAOK,GAAUA,KAEFzK,MAAMC,QAASwK,GACnC,WAAW5L,EAEb,IAAK,SAASmG,KAAMyF,EAAM,IACxB,MAAUrB,MAAO,8BAEnB,IAAIuB,EAAO,IAAI9L,EAMf,OAJA4L,EAAM,GAAGnL,QAAS,SAAUsL,GAC1BD,EAAKE,YAAahM,EAAMsF,SAASU,SAAU+F,GADV,GAI5BD,CAjB0B,IA2B7BG,OAASC,SAAUJ,EAAM3L,GAK7B,GAHAA,EAAUA,GAAW2L,EAAK3L,SACxBH,EAAM+J,SAAU/J,EAAM+J,SAASnD,OAAS,IAErC5G,EAAMqL,YAAalL,GACtB,MAAUoK,MAAO,8BAAgCpK,EAAU,KAE7D,IAAIgM,EAAM,GAEVA,EAAIlF,KAAM,eACVkF,EAAIlF,KAAM,WAAa9G,GAKvB,IAHA,IACI4L,EADAK,EAAQ3G,OAAOkB,KAAMmF,EAAK5F,MAGrBc,EAAI,EAAGA,EAAIoF,EAAMxF,OAAQI,IAChC,GAAiB,YAAboF,EAAMpF,GAEV,GADA+E,EAAOD,EAAK5F,KAAMkG,EAAMpF,IACpB7F,MAAMC,QAAS2K,GACjB,IAAK,IAAIrE,EAAI,EAAGA,EAAIqE,EAAKnF,OAAQc,IAC3BqE,EAAKrE,GAAGhB,WACZyF,EAAIlF,KAAMjH,EAAMmK,SAAU4B,EAAKrE,GAAGrD,SAAUlE,GAAW,UAE/C4L,EAAKrF,WACfyF,EAAIlF,KAAMjH,EAAMmK,SAAU4B,EAAK1H,SAAUlE,GAAW,KAMxD,SAFI8G,KAAM,eAECb,KAAMpG,EAAMkK,IA/BgB,EAoCzClK,EAAMsF,SAAWN,IAMjBhF,EAAMqG,UAAY,CAEhBC,YAAatG,EAObqM,IAAKA,SAAUlJ,GAEb,OAAwB,MAApBS,KAAKsC,KAAM/C,GACNS,KAAKsC,KAAM/C,GAGhBhC,MAAMC,QAASwC,KAAKsC,KAAM/C,IACrBS,KAAKsC,KAAM/C,GAAM6E,IAAK,SAAU+D,GACrC,OAAOA,EAAKlF,OADgC,GAIvCjD,KAAKsC,KAAM/C,GAAM0D,OAXP,EAsBrBQ,IAAKA,SAAUlE,EAAKpE,EAAOyG,GACzB,OAAO5B,KAAK0I,YAAa,IAAItM,EAAMsF,SAAUnC,EAAKpE,EAAOyG,GADvB,EAUpC+G,IAAKA,SAAUpJ,EAAKpE,EAAOyG,GAGzB,OAFIuG,EAAO,IAAI/L,EAAMsF,SAAUnC,EAAKpE,EAAOyG,GAC3C5B,KAAKoI,YAAaD,GACXnI,IAH2B,EAWpC0I,YAAaA,SAAUP,GAErB,OADAnI,KAAKsC,KAAM6F,EAAKpG,QAAWoG,EACpBnI,IAFqB,EAU9BoI,YAAaA,SAAUD,GAErB,IAAI5I,EAAM4I,EAAKpG,OAUf,OARIxE,MAAMC,QAASwC,KAAKsC,KAAM/C,IAC5BS,KAAKsC,KAAM/C,GAAM8D,KAAM8E,GAEvBnI,KAAKsC,KAAM/C,GADkB,MAApBS,KAAKsC,KAAM/C,GACD,CAAES,KAAKsC,KAAM/C,GAAO4I,GAEpBA,MATO,EAqB9BR,MAAOA,SAAUxM,GAQf,IAAIyN,GALApD,EAAQpJ,EAAMmL,UAAWpM,GAC1B8F,MAAO,UAIQ,GACd1E,EAAUiJ,EAAM,GAChBqD,EAAMrD,EAAOA,EAAMxC,OAAS,GAGhC8F,EAAoB,kBAEpB,IAAK,eAAevG,KAAMqG,GACxB,MAAM,IAAIG,YAAa,oDAAqDH,EAAO,KAErF,IAAK,aAAarG,KAAMsG,GACtB,UAAUE,YAAa,kDAAmDF,EAAK,KAEjF,IAAKC,EAAevG,KAAMhG,MAGlBA,EAAUiJ,EAAMwD,KAAMvD,GAAQqD,EAAevG,KAAMkD,KACvD,UAAUsD,YAAa,4DAM3B,GAFA/I,KAAKzD,QAAUA,EAAQ0M,UAAW,EAAG,KAEhC7M,EAAMqL,YAAazH,KAAKzD,SAC3B,MAAUoK,MAAO,wBAA0B3G,KAAKzD,QAAU,KAI5D,OAFAyD,KAAKsC,KAAOlG,EAAMmJ,WAAYC,GAEvBxF,IApCgB,EA8CzBS,SAAUA,SAAUlE,UAClBA,EAAUA,GAAWyD,KAAKzD,QACnBH,EAAMiM,OAAQrI,KAAMzD,EAFU,EAUvC2M,QAASA,SAAU3M,GAEjBA,EAAUA,GAAW,MAErB,IAAIwG,EAAOlB,OAAOkB,KAAM/C,KAAKsC,QAClB,CAAE,CAAE,UAAW,GAAI,OAAQ/F,IAGtC,IAFA,IAAI4L,EAEK/E,EAAI,EAAGA,EAAIL,EAAKC,OAAQI,IAC/B,GAAgB,YAAZL,EAAKK,GAET,GADA+E,EAAOnI,KAAKsC,KAAMS,EAAKK,IACnB7F,MAAMC,QAAS2K,GACjB,IAAK,IAAIrE,EAAI,EAAGA,EAAIqE,EAAKnF,OAAQc,IAC/BxB,EAAKe,KAAM8E,EAAKrE,GAAGP,iBAGhBF,KAAM8E,EAAK5E,gBAIb,CAAE,QAASjB,EApBS,EA4B7BiB,OAAQA,WACN,YAAY2F,QAASlJ,KAAKzD,QADT,GAOrB4M,EAAiB/M,ODhVLgN,EAAAlD,IAAW,GACnBA,EAAAmD,KAAA,SACAC,KAAA,WAGQC,EAAAC,EAAAD,IAAS,CAAA,EACjBA,EAAAF,KAAA,OACAE,EAAAD,KAAA,SACAG,KAAA,OACAF,EAAAG,MAAA,YAGQC,EAAAC,EAAAD,IAAU,GAClBA,EAAAE,UAAA,cACAC,QAAA,UACAH,EAAAI,SAAA,WACAJ,EAAAK,SAAA,WACAJ,EAAAK,UAAA,QACAN,EAAAO,OAAA,SACAP,EAAAQ,GAAA,OACAC,SAAA,YAiTJ,IAAA9K,EAAgB,CACZ,CAACqK,EAAWG,SAAU,iBACtB,CAACH,EAAWI,UAAW,4BACvB,CAACJ,EAAWK,UAAW,+BACvB,CAACL,EAAWM,WAAY,uBACxB,CAACN,EAAWE,WAAY,+CA1QPQ,MAGIC,cACAC,KAFrB7H,WAAAA,CACqB4H,EACAC,GADAvK,KAAAsK,cAAAA,EACAtK,KAAAuK,KAAAA,CAAa,CAGlCC,SAAAA,CAAUvG,UACNA,EAAQ3B,KAAOtC,KAAKyK,gBACbxG,CAFe,CAKlBwG,aAAAA,GACJ,IAAMnI,KAAAA,GAAQtC,KAAGsK,cACjBpC,EAAUwC,IACVxC,EAAK3L,QAAU,QAEVE,cAAgB6F,EAAKqI,SAE1B,IAAAC,EAAgB,GACZC,EAAe,EAGnB,GAAIvI,EAAKxF,KAAM,CACX,IAAAgO,EAAOxI,EAAGxF,KACNgO,EAAEC,QACF7C,EAAKxL,UAAYoO,EAAEC,OACnBD,EAAEE,OACF9C,EAAKtL,SAAWkO,EAAEE,QAChBC,SACF/C,EAAKvL,WAAamO,EAAEG,QACpBH,EAAEI,OACFhD,EAAKjL,SAAW6N,EAAEI,KAClBN,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,iBACA,GACA,OACA,CAAC,mCAAoC0I,EAAEI,KAAM,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,QAGtGJ,EAAEK,SACFjD,EAAKnL,WAAa+N,EAAEK,UAClBC,SACFlD,EAAKlL,WAAa8N,EAAEM,OApBb,CAuBX9I,EAAKrD,QACLiJ,EAAKjJ,MAAQqD,EAAKrD,SAEb7B,WACL8K,EAAK9K,SAAWkF,EAAKlF,YAEhBS,OACLqK,EAAKrK,MAAMkC,cAAcuC,EAAKzE,MAAMrC,IAAK8G,EAAKzE,MAAMpC,WAExD6G,EAAK+I,OAAOxO,QAAQyO,IAChB,IAAI/L,EAA6E,aACjF,OAAQ+L,EAAG9M,MACP,KAAK+K,EAAUD,KACX/J,EAAM,kBAGV,KAAKgK,EAAUE,KACXlK,EAAM,YACN,WAECgK,EAAUG,MACXnK,EAAM,aACN,MAEJ,KAAKgK,EAAUF,KACX9J,EAAM,YAGd,MAAO2I,EAAG3I,GACNhC,MAAMC,QAAQ+N,GACdA,EAAElI,KAAKiI,EAAGnQ,OAEV+M,EAAK3I,GAAO,CAAC+L,EAAGnQ,SAGxBmH,EAAKhF,OAAOT,QAAQyO,IAChB,IAAI/L,EAA4C,oBACxC+L,EAAG9M,MACP,KAAK0H,EAAYoD,KACb/J,EAAM,kBAGV,KAAK2G,EAAYmD,KACb9J,EAAM,QAGd,MAAO2I,EAAG3I,GACNhC,MAAMC,QAAQ+N,GACdA,EAAElI,KAAKiI,EAAGnQ,OAEV+M,EAAK3I,GAAO,CAAC+L,EAAGnQ,SAGpBmH,EAAK7E,SACLoE,OAAO2J,QAAQlJ,EAAK7E,SAASZ,QAAQ,EAAEiH,EAAGyH,MACtC,IAAIhM,EAAqC,cACzC,OAAQuE,GACJ,IAAK,OACDvE,EAAM,cACN,UAEC,OACDA,EAAM,cAGVgM,EAAEE,gBACFvD,EAAK3I,GAAKX,OAAS2M,EAAEE,eACrBF,EAAEG,WACFxD,EAAK3I,GAAKV,KAAO0M,EAAEG,UACnBH,EAAExM,aACFmJ,EAAK3I,GAAKR,WAAawM,EAAExM,YACzBwM,EAAEzM,gBACFoJ,EAAK3I,GAAKT,cAAgByM,EAAEzM,iBAExB,KACF6M,QACFC,EAAGvI,KAAKkI,EAAEI,UAERE,SACFD,EAAGvI,KAAKkI,EAAEM,UAEd7M,EAAmB4M,EACdxH,IAAI0H,GAAKA,EAAExH,QACXC,OAAOuH,KAAOA,GACdtJ,KAAK,SAGN0F,EAAK3I,GAAKP,cAAgBA,KAIlCsD,EAAK1E,MACLsK,EAAKtK,KAAKmC,cAAcuC,EAAK1E,KAAKpC,IAAK8G,EAAK1E,KAAKnC,WAEjD6G,EAAKjD,OACL6I,EAAK7I,KAAOiD,EAAKjD,MAEjBiD,EAAKyJ,UACL7D,EAAK/I,aAAemD,EAAKyJ,SAE7B,IAAAC,EAAqB,CAAAC,EAAoBzN,EAAc0N,EAAkBC,KACrE,IAAIhJ,EA9HS,OAAM0H,IA+HnBD,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC5D,EACA,CACI2E,MAAAA,GAEJ,OACA8I,KAEJrB,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,WACA,CACIe,MAAAA,GAEJ,OACAgJ,KAGJhJ,EAhJa,OAAM0H,IAiJnBD,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,OACA,CACIe,MAAAA,EACAiJ,aAAcD,GAElB,OACA,GAAGD,KAAYD,OAEnBrB,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,WACA,CACIe,MAAAA,GAEJ,OACAgJ,MAIJ7J,EAAK+J,QACL/J,EAAK+J,OAAOxP,QAAS0O,IACjB,OAAQA,EAAE/M,MACN,KAAKmL,EAAWE,UACZe,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,iBACA,CACI5D,KAAM,YACN8N,MAAOf,EAAEpQ,OAEb,OACA,uBAEJ,IAAAgI,EAjLC,OAAM0H,IAkLPD,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,OACA,CACIe,MAAAA,EACAiJ,aAAc,YAElB,OACA,QAAQb,EAAEpQ,WAEdyP,EAAWvH,KAAKkF,EAAI7G,SAASU,SAAS,CAClC,WACA,CACIe,MAAAA,GAEJ,OACA,cAEJ,WAECwG,EAAWG,QAChB,KAAKH,EAAWI,SAChB,KAAKJ,EAAWK,SAChB,KAAKL,EAAWM,uBAgDZ9O,MAAAA,EAAOqD,KAAAA,IAE3B,GADI+N,EAAMpR,GAAOmJ,QACZiI,EAAI3G,MAAM,kBACX,IACI,IAAA4G,EAAO,IAAGC,IAAInN,EAAId,IAClBgO,EAAEE,UAAYF,EAAEE,SAAW,IAAMH,GAAKnR,QAAQ,WAAY,KAC1DmR,EAAMC,EAAE/L,UAHR,CAIF,MACE,MADI,CAIZ,OAAO8L,CAXoE,CA/C7CI,CAAGpB,MAETrD,EAAK5I,WAAWiM,EAAE/M,MAAQoO,GAC9B,MAEJ,KAAKjD,EAAWO,OACZ8B,EAAgBT,EAAEpQ,MAAO,UAAW,OAAQ,UAC5C,MAEJ,KAAKwO,EAAWQ,GACZ6B,EAAgBT,EAAEpQ,MAAO,MAAO,UAAW,MAC3C,MAEJ,KAAKwO,EAAWS,SACZ4B,EAAgBT,EAAEpQ,MAAO,YAAa,UAAW,eAK7DmH,EAAKuK,SAASd,UACd7D,EAAK9I,QAAUkD,EAAKuK,QAAQd,SAE5BzJ,EAAKuK,SAASC,WACd5E,EAAK1M,IAAM8G,EAAKuK,QAAQC,eAEnBvC,OACLrC,EAAK/K,IAAM6C,KAAKuK,MAEpB,IAAAwC,EAAYxE,EAAGZ,MAAIO,EAAM/L,sBAAyB,GAGlD,OAFAyO,EAAW/N,QAAQsL,GAAQ4E,EAAO3E,YAAYD,IAEvC4E,EAAOtM,SAAS,OAClBrF,QAAQ,mCAAoC,oBAC5CA,QAAQ,eAAgB,aACxBA,QAAQ,mCAAoC,CAAC4R,EAAIhI,IAAMgI,EAAG5R,QAAQ4J,EAAGA,EAAEpC,cAAcxH,QAAQ,iBAAkB,oBAC/GA,QAAQ,6BAA8B,CAAC0J,EAAGE,IAAMA,EArPpC","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":["/********************************************************************************\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 (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\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 (Array.isArray(v))\r\n v.push(el.value)\r\n else\r\n card[key] = [el.value]\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 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,2 +1,2 @@
1
- var i,p=i||={};p.wep="WEP",p.wpa="WPA",p.wpaEap="WPA2-EAP";var n=new Set(["\\",";",",",":",'"']);function t(i,p=!1){return i=i.split("").map(i=>n.has(i)?"\\"+i:i).join(""),p&&i.match(/^[0-9a-f]+$/i)?`"${i}"`:i}export default class{pluginOptions;constructor(i){this.pluginOptions=i}configure(i){return i.data=this.generateWiFi(),i}generateWiFi(){var{ssid:p,hidden:n}=this.pluginOptions,e=[];return e.push({key:"S",value:t(p)}),"encryption"in this.pluginOptions&&this.pluginOptions.encryption?(e.push({key:"T",value:t(this.pluginOptions.encryption)},{key:"P",value:t(this.pluginOptions.password||"",!0)}),this.pluginOptions.encryption==i.wpaEap&&(this.pluginOptions.eapMethod&&e.push({key:"E",value:t(this.pluginOptions.eapMethod)}),this.pluginOptions.eapIdentity&&e.push({key:"I",value:t(this.pluginOptions.eapIdentity)}),this.pluginOptions.eapAnonymousIdentity&&e.push({key:"A",value:t(this.pluginOptions.eapAnonymousIdentity)}),this.pluginOptions.eapPhase2Method&&e.push({key:"PH2",value:t(this.pluginOptions.eapPhase2Method)}))):e.push({key:"T",value:"nopass"}),e.push({key:"H",value:n?"true":"false"}),`WIFI:${e.map(({key:i,value:p})=>[i,p].join(":")).join(";")};;`}}export{i as EncryptionType};
1
+ var i,p=i||={};p.wep="WEP",p.wpa="WPA",p.wpaEap="WPA2-EAP";var n=new Set(["\\",";",",",":",'"']);function t(i,p=!1){return i=i.split("").map(i=>n.has(i)?"\\"+i:i).join(""),p&&i.match(/^[0-9a-f]+$/i)?`"${i}"`:i}export default class{pluginOptions;constructor(i){this.pluginOptions=i}configure(i){return i.data=this.generateWiFi(),i.qrOptions.mode=void 0,i}generateWiFi(){var{ssid:p,hidden:n}=this.pluginOptions,e=[];return e.push({key:"S",value:t(p)}),"encryption"in this.pluginOptions&&this.pluginOptions.encryption?(e.push({key:"T",value:t(this.pluginOptions.encryption)},{key:"P",value:t(this.pluginOptions.password||"",!0)}),this.pluginOptions.encryption==i.wpaEap&&(this.pluginOptions.eapMethod&&e.push({key:"E",value:t(this.pluginOptions.eapMethod)}),this.pluginOptions.eapIdentity&&e.push({key:"I",value:t(this.pluginOptions.eapIdentity)}),this.pluginOptions.eapAnonymousIdentity&&e.push({key:"A",value:t(this.pluginOptions.eapAnonymousIdentity)}),this.pluginOptions.eapPhase2Method&&e.push({key:"PH2",value:t(this.pluginOptions.eapPhase2Method)}))):e.push({key:"T",value:"nopass"}),e.push({key:"H",value:n?"true":"false"}),`WIFI:${e.map(({key:i,value:p})=>[i,p].join(":")).join(";")};;`}}export{i as EncryptionType};
2
2
  //# sourceMappingURL=wifi-plugin.js.map