UNPKG

@lspriv/wc-plugin-ics

Version:

小程序日历组件订阅插件

2 lines (1 loc) 28.8 kB
"use strict";var e,t,r=require("@lspriv/wx-calendar/lib");const s=/[ -\/TZ:\.]/,n=/^\d{4}[-\/]\d{1,2}[-\/]\d{1,2}[ T]\d{1,2}:\d{1,2}:\d{1,2}(\.\d{3})?Z?$/,i=/^\d{4}[-\/]\d{1,2}[-\/]\d{1,2}$/;t=e=>{let t=null;if(n.test(e)){t=e.split(s);const[r,n,i,o,a,l]=t;return`${r}/${n}/${i} ${o}:${a}:${l}`}if(i.test(e)){t=t||e.split(s);const[r,n,i]=t;return`${r}/${n}/${i} 00:00:00`}return null},e=(e,t)=>new Promise(((r,s)=>{e({...t,success:e=>{r(e)},fail:e=>{s(e)}})}));class o extends Error{constructor(e){super(e),e&&(this.message=e),this.name="ICalError"}}const a=e=>"number"==typeof e&&isNaN(e),l=e=>{const t=parseInt(e,10);if(a(t))throw new o('Could not extract integer from "'+e+'"');return t},u=e=>e<0?Math.ceil(e):Math.floor(e),c=e=>{switch("string"!=typeof e&&("number"==typeof e&&(e=parseInt(e)),e=String(e)),e.length){case 0:return"00";case 1:return"0"+e;default:return e}},d=(e,t=!1)=>{if(e&&"object"==typeof e){if(e instanceof Date)return new Date(e.getTime());if("clone"in e)return e.clone();if(Array.isArray(e))return e.map((e=>t?d(e,!0):e));{const r={};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=t?d(e[s],!0):e[s]);return r}}return e},h=(e,t,r)=>{for(;-1!==(r=e.indexOf(t,r));){if(!(r>0&&"\\"===e[r-1]))return r;r+=1}return-1},f=(e,r)=>t(e)||`${r.year}-${r.month}-${r.day} 00:00:00`,p=e=>{const t={};return t.factor="+"===e[0]?1:-1,t.hours=l(e.substr(1,2)),t.minutes=l(e.substr(4,2)),new y(t)},m=e=>{const t=new y;return t.fromSeconds(e),t};class y{constructor(e){this.hours=0,this.minutes=0,this.factor=1,this.icaltype="utc-offset",this.fromData(e)}fromData(e){if(e)for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(this[t]=e[t]);this.normalize()}normalize(){let e=this.toSeconds();const t=this.factor;for(;e<-43200;)e+=97200;for(;e>50400;)e-=97200;this.fromSeconds(e),0==e&&(this.factor=t)}toSeconds(){return this.factor*(60*this.minutes+3600*this.hours)}fromSeconds(e){let t=Math.abs(e);return this.factor=e<0?-1:1,this.hours=u(t/3600),t-=3600*this.hours,this.minutes=u(t/60),this}compare(e){const t=this.toSeconds(),r=e.toSeconds();return+(t>r)-+(r>t)}clone(){return m(this.toSeconds())}toString(){return(1==this.factor?"+":"-")+c(this.hours)+":"+c(this.minutes)}}class v{constructor(e){this.icaltype="binary",this.value=e}toString(){return this.value}}class g{constructor(e,t){this.parent=t||void 0,"string"==typeof e?(this.jCal=[e,{},G],this.jCal[2]=this.getDefaultType()):this.jCal=e,this.updateType()}get designSet(){return this.parent?this.parent.designSet:ue}getDefaultType(){const e=this.jCal[0],t=this.designSet;if(e in t.property){const r=t.property[e];if("defaultType"in r)return r.defaultType}return G}updateType(){const e=this.designSet,t=this.jCal[2],r=this.jCal[0];t in e.value&&("decorate"in e.value[t]?this.isDecorated=!0:this.isDecorated=!1,r in e.property&&(this.isMultiValue="multiValue"in e.property[r],this.isStructuredValue="structuredValue"in e.property[r]))}getFirstValue(){return this.hydrateValue(0)}getParameter(e){return e in this.jCal[1]?this.jCal[1][e]:void 0}hydrateValue(e){return this.values&&this.values[e]?this.values[e]:this.jCal.length<=3+e?null:this.isDecorated?(this.values||(this.values=[]),this.values[e]=this.decorate(this.jCal[3+e])):this.jCal[3+e]}decorate(e){const t=this.jCal[2];return this.designSet.value[t].decorate(e,this)}}class w{constructor(e,t){this.hydratedPropertyCount=0,"string"==typeof e&&(e=[e,[],[]]),this.jCal=e,this.parent=t||null}get designSet(){return this.parent&&this.parent.designSet||ye(this.jCal[0])}getFirstPropertyValue(e){const t=this.getFirstProperty(e);return t?t.getFirstValue():null}getFirstProperty(e){if(e){let t=0;const r=this.jCal[1],s=r.length;for(;t<s;t++)if(r[t][0]===e){return this.hydrateProperty(t)}}else if(this.jCal[1].length)return this.hydrateProperty(0);return null}hydrateProperty(e){if(this.properties||(this.properties=[],this.hydratedPropertyCount=0),this.properties[e])return this.properties[e];const t=new g(this.jCal[1][e],this);return this.hydratedPropertyCount++,this.properties[e]=t}}const S=["tzid","location","tznames","latitude","longitude"],k=function(e){return(new b).fromData(e)};class b{constructor(e){this.expandedUntilYear=0,this.component=null,this.changes=[],this.tzid="",this.fromData(e)}fromData(e){if(this.expandedUntilYear=0,this.changes=[],e instanceof w)this.component=e;else{if(e&&"component"in e)if("string"==typeof e.component){const t=Ae(e.component);this.component=new w(t)}else e.component instanceof w?this.component=e.component:this.component=null;for(const t in S)if(Object.prototype.hasOwnProperty.call(S,t)){const r=S[t];e&&r in e&&(this[r]=e[r])}}return this.component instanceof w&&!this.tzid&&(this.tzid=this.component.getFirstPropertyValue("tzid")||""),this}}class C{static getZone(e){return this.zones[e]}}C.zones=[];const T=k({tzid:"floating"}),A=k({tzid:"UTC"});class I{constructor(e,t){this.time=Object.create(null),this.time.year=0,this.time.month=1,this.time.day=1,this.time.hour=0,this.time.minute=0,this.time.second=0,this.time.isDate=!1,this.fromData(e,t)}fromData(e,t){if(e)for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){if("icaltype"===t)continue;this[t]=e[t]}if(t&&(this.zone=t),e&&!("isDate"in e)?this.isDate=!("hour"in e):e&&"isDate"in e&&(this.isDate=e.isDate),e&&"timezone"in e){const t=C.getZone(e.timezone);this.zone=t||T}return e&&"zone"in e&&(this.zone=e.zone),this.zone||(this.zone=T),this.cachedUnixTime=null,this}toString(){let e=this.year+"-"+c(this.month)+"-"+c(this.day);return this.isDate||(e+="T"+c(this.hour)+":"+c(this.minute)+":"+c(this.second),this.zone===A&&(e+="Z")),e}}const E=(e,t)=>{if(e.length<19)throw new Error('invalid date-time value: "'+e+'"');const r=e[19]&&"Z"===e[19]?"Z":t?t.getParameter("tzid"):void 0;return new I({year:l(e.substr(0,4)),month:l(e.substr(5,2)),day:l(e.substr(8,2)),hour:l(e.substr(11,2)),minute:l(e.substr(14,2)),second:l(e.substr(17,2)),timezone:r})},M=e=>new I({year:l(e.substr(0,4)),month:l(e.substr(5,2)),day:l(e.substr(8,2)),isDate:!0}),D=(e,t)=>e.length>10?E(e,t):M(e),N=/([PDWHMTS]{1,1})/;class x{constructor(e){this.weeks=0,this.days=0,this.hours=0,this.minutes=0,this.seconds=0,this.isNegative=!1,this.icalclass="icalduration",this.icaltype="duration",this.fromData(e)}fromData(e){const t=["weeks","days","hours","minutes","seconds","isNegative"];for(const r in t){if(!Object.prototype.hasOwnProperty.call(t,r))continue;const s=t[r];this[s]=e&&s in e?e[s]:0}}toSeconds(){const e=this.seconds+60*this.minutes+3600*this.hours+86400*this.days+604800*this.weeks;return this.isNegative?-e:e}toString(){if(0==this.toSeconds())return"PT0S";{let e="";return this.isNegative&&(e+="-"),e+="P",this.weeks&&(e+=this.weeks+"W"),this.days&&(e+=this.days+"D"),(this.hours||this.minutes||this.seconds)&&(e+="T",this.hours&&(e+=this.hours+"H"),this.minutes&&(e+=this.minutes+"M"),this.seconds&&(e+=this.seconds+"S")),e}}}const O=e=>{let t=0;const r=Object.create(null);let s=0;for(;-1!==(t=e.search(N));){const n=e[t],i=e.substr(0,t);e=e.substr(t+1),s+=P(n,i,r)}if(s<2)throw new o('invalid duration value: Not enough duration components in "'+e+'"');return new x(r)},P=(e,t,r)=>{let s;switch(e){case"P":r.isNegative=!(!t||"-"!==t);break;case"D":s="days";break;case"W":s="weeks";break;case"H":s="hours";break;case"M":s="minutes";break;case"S":s="seconds";break;default:return 0}if(s){if(!t&&0!==t)throw new o('invalid duration value: Missing number before "'+e+'"');const n=parseInt(t,10);if(a(n))throw new o('invalid duration value: Invalid number "'+t+'" before "'+e+'"');r[s]=n}return 1},L=e=>"P"===e[0]||"P"===e[1];class j{constructor(e){if(e&&"start"in e){if(e.start&&!(e.start instanceof I))throw new TypeError(".start must be an instance of ICAL.Time");this.start=e.start}if(e&&e.end&&e.duration)throw new o("cannot accept both end and duration");if(e&&"end"in e){if(e.end&&!(e.end instanceof I))throw new TypeError(".end must be an instance of ICAL.Time");this.end=e.end}if(e&&"duration"in e){if(e.duration&&!(e.duration instanceof x))throw new TypeError(".duration must be an instance of ICAL.Duration");this.duration=e.duration}}toJSON(){return[this.start.toString(),(this.end||this.duration).toString()]}}const R=e=>new j(e),$=(e,t,r)=>{const s=e=>E(e,t);return L(e[1])?R({start:s(e[0]),duration:O(e[1])}):R({start:s(e[0]),end:s(e[1])})},B=/^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/,Y=/^(SU|MO|TU|WE|TH|FR|SA)$/;var U;!function(e){e[e.SU=1]="SU",e[e.MO=2]="MO",e[e.TU=3]="TU",e[e.WE=4]="WE",e[e.TH=5]="TH",e[e.FR=6]="FR",e[e.SA=7]="SA"}(U||(U={}));class z{constructor(e){this.interval=1,this.wkst=2,this.icalclass="icalrecur",this.icaltype="recur",this.parts={},e&&"object"==typeof e&&this.fromData(e)}fromData(e){for(const t in e){const r=t.toUpperCase();r in H?Array.isArray(e[t])?this.parts[r]=e[t]:this.parts[r]=[e[t]]:this[t]=e[t]}this.interval&&"number"!=typeof this.interval&&K.INTERVAL(this.interval,this),this.wkst&&"number"!=typeof this.wkst&&(this.wkst=_(this.wkst)),!this.until||this.until instanceof I||(this.until=D(this.until))}toJSON(){const e=Object.create(null);e.freq=this.freq,this.count&&(e.count=this.count),this.interval>1&&(e.interval=this.interval);for(const t in this.parts){if(!Object.prototype.hasOwnProperty.call(this.parts,t))continue;const r=this.parts[t];Array.isArray(r)&&1==r.length?e[t.toLowerCase()]=r[0]:e[t.toLowerCase()]=d(this.parts[t])}return this.until&&(e.until=this.until.toString()),"wkst"in this&&2!==this.wkst&&(e.wkst=F(this.wkst)),e}}const V=function(e,t,r,s){let n=s;if("+"===s[0]&&(n=s.substr(1)),void 0!==t&&s<t)throw new o(e+': invalid value "'+s+'" must be > '+t);if(void 0!==r&&s>r)throw new o(e+': invalid value "'+s+'" must be < '+t);return l(n)},_=(e,t)=>(U[e]-1+7)%7+1,F=(e,t)=>{let r=e+1-1;return r>7&&(r-=7),U[r]},H={BYSECOND:V.bind(null,"BYSECOND",0,60),BYMINUTE:V.bind(null,"BYMINUTE",0,59),BYHOUR:V.bind(null,"BYHOUR",0,23),BYDAY:function(e){if(B.test(e))return e;throw new Error('invalid BYDAY value "'+e+'"')},BYMONTHDAY:V.bind(null,"BYMONTHDAY",-31,31),BYYEARDAY:V.bind(null,"BYYEARDAY",-366,366),BYWEEKNO:V.bind(null,"BYWEEKNO",-53,53),BYMONTH:V.bind(null,"BYMONTH",1,12),BYSETPOS:V.bind(null,"BYSETPOS",-366,366)},W=["SECONDLY","MINUTELY","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY"],K={FREQ:function(e,t){if(-1===W.indexOf(e))throw new o('invalid frequency "'+e+'" expected: "'+W.join(", ")+'"');t.freq=e},COUNT:function(e,t){t.count=l(e)},INTERVAL:function(e,t){t.interval=l(e),t.interval<1&&(t.interval=1)},UNTIL:function(e,t,r){e.length>10?t.until=ue.value["date-time"].fromICAL(e):t.until=ue.value.date.fromICAL(e),r||(t.until=D(t.until))},WKST:function(e,t){if(!Y.test(e))throw new o('invalid WKST value "'+e+'"');t.wkst=_(e)}},Z=(e,t)=>{const r=Object.create(null),s=e.split(";"),n=s.length;for(let e=0;e<n;e++){const n=s[e].split("="),i=n[0].toUpperCase(),o=n[0].toLowerCase(),a=o,l=n[1];if(i in H){const e=l.split(",");let t=0;const s=e.length;for(;t<s;t++)e[t]=H[i](e[t]);r[a]=1==e.length?e[0]:e}else i in K?K[i](l,r,t):r[o]=l}return r},G="unknown",q=e=>{switch(e){case"\\\\":return"\\";case"\\;":return";";case"\\,":return",";case"\\n":case"\\N":return"\n";default:return e}},Q=(e,t,r)=>-1===e.indexOf("\\")?e:(r&&(t=new RegExp(t.source+"|\\\\"+r)),e.replace(t,q)),X={boolean:{values:["TRUE","FALSE"],fromICAL:function(e){return"TRUE"===e}},float:{matches:/^[+-]?\d+\.\d+$/,fromICAL:function(e){const t=parseFloat(e);return a(t)?0:t}},integer:{fromICAL:function(e){const t=parseInt(e);return a(t)?0:t}},"utc-offset":{fromICAL:function(e){return e.length<6?e.substr(0,3)+":"+e.substr(3,2):e.substr(0,3)+":"+e.substr(3,2)+":"+e.substr(5,2)},decorate:function(e){return p(e)}},text:(J=/\\\\|\\;|\\,|\\[Nn]/g,{matches:/.*/,fromICAL:function(e,t){return Q(e,J,t)}}),uri:{},binary:{decorate:function(e){return new v(e)}},"cal-address":{},date:{decorate:function(e,t){return M(e)},fromICAL:function(e){return e.substr(0,4)+"-"+e.substr(4,2)+"-"+e.substr(6,2)}},"date-time":{fromICAL:function(e){{const t=e.substr(0,4)+"-"+e.substr(4,2)+"-"+e.substr(6,2)+"T"+e.substr(9,2)+":"+e.substr(11,2)+":"+e.substr(13,2);return e[15]&&"Z"===e[15]?t+"Z":t}},decorate:function(e,t){return E(e,t)}},duration:{decorate:function(e){return O(e)}},period:{fromICAL:function(e){const t=e.split("/");return t[0]=X["date-time"].fromICAL(t[0]),L(t[1])||(t[1]=X["date-time"].fromICAL(t[1])),t},decorate:function(e,t){return $(e,t)}},recur:{fromICAL:function(e){return Z(e,!0)},decorate:function(e){return new z(e)}},time:{fromICAL:function(e){if(e.length<6)return e;const t=e.substr(0,2)+":"+e.substr(2,2)+":"+e.substr(4,2);return"Z"===e[6]?t+"Z":t}}};var J;const ee={defaultType:"text"},te={defaultType:"text",multiValue:","},re={defaultType:"integer"},se={defaultType:"date-time",allowedTypes:["date-time","date"]},ne={defaultType:"date-time"},ie={defaultType:"uri"},oe={defaultType:"utc-offset"},ae={defaultType:"recur"},le={value:X,param:{cutype:{values:["INDIVIDUAL","GROUP","RESOURCE","ROOM","UNKNOWN"],allowXName:!0,allowIanaToken:!0},"delegated-from":{valueType:"cal-address",multiValue:",",multiValueSeparateDQuote:!0},"delegated-to":{valueType:"cal-address",multiValue:",",multiValueSeparateDQuote:!0},encoding:{values:["8BIT","BASE64"]},fbtype:{values:["FREE","BUSY","BUSY-UNAVAILABLE","BUSY-TENTATIVE"],allowXName:!0,allowIanaToken:!0},member:{valueType:"cal-address",multiValue:",",multiValueSeparateDQuote:!0},partstat:{values:["NEEDS-ACTION","ACCEPTED","DECLINED","TENTATIVE","DELEGATED","COMPLETED","IN-PROCESS"],allowXName:!0,allowIanaToken:!0},range:{values:["THISANDFUTURE"]},related:{values:["START","END"]},reltype:{values:["PARENT","CHILD","SIBLING"],allowXName:!0,allowIanaToken:!0},role:{values:["REQ-PARTICIPANT","CHAIR","OPT-PARTICIPANT","NON-PARTICIPANT"],allowXName:!0,allowIanaToken:!0},rsvp:{values:["TRUE","FALSE"]},"sent-by":{valueType:"cal-address"},tzid:{matches:/^\//},value:{values:["binary","boolean","cal-address","date","date-time","duration","float","integer","period","recur","text","time","uri","utc-offset"],allowXName:!0,allowIanaToken:!0}},property:{categories:te,url:ie,version:ee,uid:ee,action:ee,attach:{defaultType:"uri"},attendee:{defaultType:"cal-address"},calscale:ee,class:ee,comment:ee,completed:ne,contact:ee,created:ne,description:ee,dtend:se,dtstamp:ne,dtstart:se,due:se,duration:{defaultType:"duration"},exdate:{defaultType:"date-time",allowedTypes:["date-time","date"],multiValue:","},exrule:ae,freebusy:{defaultType:"period",multiValue:","},geo:{defaultType:"float",structuredValue:";"},"last-modified":ne,location:ee,method:ee,organizer:{defaultType:"cal-address"},"percent-complete":re,priority:re,prodid:ee,"related-to":ee,repeat:re,rdate:{defaultType:"date-time",allowedTypes:["date-time","date","period"],multiValue:",",detectType:function(e){return-1!==e.indexOf("/")?"period":-1===e.indexOf("T")?"date":"date-time"}},"recurrence-id":se,resources:te,"request-status":{defaultType:"text",structuredValue:";"},rrule:ae,sequence:re,status:ee,summary:ee,transp:ee,trigger:{defaultType:"duration",allowedTypes:["duration","date-time"]},tzoffsetfrom:oe,tzoffsetto:oe,tzurl:ie,tzid:ee,tzname:ee}},ue=le,ce={vevent:le,vtodo:le,vjournal:le,valarm:le,vfreebusy:le,vtimezone:le,daylight:le,standard:le},de="vcalendar",he="vevent",fe="vtodo",pe="vjournal",me="valarm",ye=e=>e&&e in ce?ce[e]:ue,ve=/[^ \t]/,ge=(e,t)=>{const r=e.length;let s,n,i=e.search(ve),o=i,a="";do{o=e.indexOf("\n",i)+1,n=o>1&&"\r"===e[o-2]?2:1,0===o&&(o=r,n=0),s=e[i]," "===s||"\t"===s?a+=e.substr(i+1,o-i-(n+1)):(a&&t(a),a=e.substr(i,o-i-n)),i=o}while(o!==r);a=a.trim(),a.length&&t(a)},we={"^'":'"',"^n":"\n","^^":"^"},Se=e=>e.replace(/\^['n^]/g,(function(e){return we[e]})),ke=(e,t,r,s)=>t in r.value&&"fromICAL"in r.value[t]?r.value[t].fromICAL(e,s):e,be=(e,t,r,s,n,i,o)=>{let a,l=0,u=0;if(0===t.length)return e;for(;-1!==(l=h(e,t,u));)a=e.substr(u,l-u),a=n?be(a,n,r,[],null,i,o):ke(a,r,i,o),s.push(a),u=l+t.length;return a=e.substr(u),a=n?be(a,n,r,[],null,i,o):ke(a,r,i,o),s.push(a),1==s.length?s[0]:s},Ce=(e,t,r)=>{let s=t,n=0;const i={};let a,l,u,c,d,f="",p=-1;for(;!1!==n&&-1!==(n=h(e,"=",n+1));){if(a=e.substr(s+1,n-s-1),0==a.length)throw new o("Empty parameter name in '"+e+"'");l=a.toLowerCase(),d=void 0,c=void 0,u=l in r.param&&r.param[l].valueType?r.param[l].valueType:"text",l in r.param&&(c=r.param[l].multiValue,r.param[l].multiValueSeparateDQuote&&(d=Se('"'+c+'"')));if('"'===e[n+1]){if(p=n+2,n=h(e,'"',p),c&&-1!=n){let t=!0;for(;t;)e[n+1]==c&&'"'==e[n+2]?n=h(e,'"',n+3):t=!1}if(-1===n)throw new o('invalid line (no matching double quote) "'+e+'"');f=e.substr(p,n-p),s=h(e,";",n),-1===s&&(n=!1)}else{p=n+1;let t=h(e,";",p);const r=h(e,":",p);-1!==r&&t>r?(t=r,n=!1):-1===t?(t=-1===r?e.length:r,n=!1):(s=t,n=t),f=e.substr(p,t-p)}if(f=Se(f),c){f=be(f,d||c,u,[],null,r)}else f=ke(f,u,r);c&&l in i?Array.isArray(i[l])?i[l].push(f):i[l]=[i[l],f]:i[l]=f}return[i,f,p]},Te=(e,t)=>{const r=e.indexOf(":");let s,n,i,a,l,u=e.indexOf(";"),c={};if(-1!==u&&-1!==r&&u>r&&(u=-1),-1!==u){if(i=e.substring(0,u).toLowerCase(),l=Ce(e.substring(u),0,t.designSet),-1==l[2])throw new o("Invalid parameters in '"+e+"'");if(c=l[0],s=l[1].length+l[2]+u,-1===(n=e.substring(s).indexOf(":")))throw new o("Missing parameter value in '"+e+"'");a=e.substring(s+n+1)}else{if(-1===r)throw new o('invalid line (no token ";" or ":") "'+e+'"');if(i=e.substring(0,r).toLowerCase(),a=e.substring(r+1),"begin"===i){const e=[a.toLowerCase(),[],[]];return 1===t.stack.length?t.component.push(e):t.component[2].push(e),t.stack.push(t.component),t.component=e,void(t.designSet||(t.designSet=ye(t.component[0])))}if("end"===i)return void(t.component=t.stack.pop())}let d,h=null,f=!1,p=!1,m=null;i in t.designSet.property&&(m=t.designSet.property[i],"multiValue"in m&&(f=m.multiValue),"structuredValue"in m&&(p=m.structuredValue),a&&"detectType"in m&&(h=m.detectType(a))),h||(h="value"in c?c.value.toLowerCase():m?m.defaultType:"unknown"),delete c.value,f&&p?(a=be(a,p,h,[],f,t.designSet,p),d=[i,c,h,a]):f?(d=[i,c,h],be(a,f,h,d,null,t.designSet,!1)):p?(a=be(a,p,h,[],null,t.designSet,p),d=[i,c,h,a]):(a=ke(a,h,t.designSet,!1),d=[i,c,h,a]),"vcard"!==t.component[0]||0!==t.component[1].length||"version"===i&&"4.0"===a||(t.designSet=ye("vcard3")),t.component[1].push(d)},Ae=e=>{const t=[],r={component:t,stack:[t]};if(ge(e,(function(e){Te(e,r)})),r.stack.length>1)throw new o("invalid ical body. component began but did not end");return 1==t.length?t[0]:t},Ie=(e,t)=>t.reduce(((e,t)=>(e[t[0]]=t[3],e)),{compname:e}),Ee=(e,...t)=>r.isFunction(e)?e(...t):e,Me=[he,me,fe,pe],De=(e,t)=>`[${t}]${e.uid||`${e.date.year}_${e.date.month}_${e.date.day}`}`,Ne=e=>new RegExp(`^\\[${e}\\]`),xe=/^\[(.*?)\]/,Oe=e=>{var t;return{icskey:(null===(t=e.match(xe))||void 0===t?void 0:t[1])||"",uid:e.replace(xe,"")}};class Pe{constructor(e){this.subcribes=[],this.marks=new Map,this.annualMarks=new Map,this.options=this.formOptions(Ee(e,this))}async PLUGIN_INITIALIZE(e){var t;if(this.service=e,(null===(t=this.options.subcribes)||void 0===t?void 0:t.length)&&(await this.loadSubcribes(this.options.subcribes),e.component._loaded_)){const t=[...this.marks.keys()].map((e=>r.formDateByStrKey(e)));if(t.length&&e.updateDates(t),this.annualMarks.size){const t=[...this.annualMarks.keys()].flatMap((e=>{var t;const r=null===(t=e.match(/^\d+/))||void 0===t?void 0:t[0];return r?parseInt(r):[]}));t.length&&e.updateAnnuals(t)}}delete this.options.subcribes}formOptions(e){const t=Array.isArray(null==e?void 0:e.eventMarkAs)?e.eventMarkAs:[(null==e?void 0:e.eventMarkAs)||"schedule"],r=Array.isArray(null==e?void 0:e.alarmMarkAs)?e.alarmMarkAs:[(null==e?void 0:e.alarmMarkAs)||"schedule"],s=Array.isArray(null==e?void 0:e.todoMarkAs)?e.todoMarkAs:[(null==e?void 0:e.todoMarkAs)||"schedule"],n=Array.isArray(null==e?void 0:e.journalMarkAs)?e.journalMarkAs:[(null==e?void 0:e.journalMarkAs)||"schedule"];return{...e,eventMarkAs:t,alarmMarkAs:r,todoMarkAs:s,journalMarkAs:n}}async loadSubcribes(e){await r.nextTick();for(const r of e){if(t=r.kind,["link","file","content"].includes(t)||(r.kind="link"),!r.source)throw new Error("invalid subcribe source");const[e,s]=await this.loadICS(r),n={...r,calname:r.calname||e["x-wr-calname"],icskey:r.icskey||`${e.prodid}@${e.version}`};this.generateMarks(s,n),this.subcribes.push(n)}var t}async loadICS(t){if("link"===t.kind){const r=await e(wx.downloadFile,{url:t.source});return this.parseFile(r.tempFilePath)}return"file"===t.kind?this.parseFile(t.source):this.parseJCal(Ae(t.source))}async load(e,t="link",s){const n=r.isString(e),i=Ee(n?s:e,this),o=n?e:i.source;if(!o)throw new Error("missing param [source]");const a=(n?t:i.kind)||"link",l={...i,source:o,kind:a};if(l.icskey&&this.subcribes.find((e=>e.icskey===l.icskey)))return l.icskey;const[u,c]=await this.loadICS(l),d={...l,calname:l.calname||u["x-wr-calname"],icskey:l.icskey||`${u.prodid}@${u.version}`};this.subcribes.push(d);const{dates:h,annuals:f}=this.generateMarks(c,d);return this.service.component._loaded_&&await r.promises([h.length&&this.service.updateDates(h),f.length&&this.service.updateAnnuals(f)]),d.icskey}parseFile(e){const t=wx.getFileSystemManager().readFileSync(e,"utf8"),r=Ae(t);return this.parseJCal(r)}parseJCal(e){if(e[0]!==de)throw new Error("ics file format error");return[Ie(de,e[1]),e[2]]}generateMarks(e,t){var s,n,i;const o={...this.options,...t},a=[],l=new Set;for(const t of e){const e=t[0];if(!Me.includes(e))continue;const i=Ie(e,t[1]),u=(null===(s=o.parseDate)||void 0===s?void 0:s.call(o,i))||r.normalDate(i.dtstart),c=`${u.year}_${u.month}_${u.day}`,d=De(i,o.icskey);i.date=u;const h=this.assignComponentHandle(d,i,o);h&&(this.collectMark(c,h),a.push(u));const f=null===(n=o.collectAnuualMark)||void 0===n?void 0:n.call(o,i,this.annualMarks);f&&(this.collectAnnualMark(c,d,f),l.add(u.year))}return null===(i=o.afterMarked)||void 0===i||i.call(o,o,this),{dates:a,annuals:[...l]}}assignComponentHandle(e,t,r){switch(t.compname){case he:return this.createIcsMark("event",e,t,r);case me:return this.createIcsMark("alarm",e,t,r);case fe:return this.createIcsMark("todo",e,t,r);case pe:return this.createIcsMark("journal",e,t,r);default:return}}createIcsMark(e,t,s,n){var i,o,a;if(n[e])return n[e](s,t);const l=n[`${e}MarkAs`],u=l.includes("festival"),c=l.includes("corner"),d=l.includes("schedule"),h={};let p=!1;if(u){let r;const o=`${e}FestivalName`;if(r=n[o]?null===(i=n[o])||void 0===i?void 0:i.call(n,s):s.summary,r){const i=Ee(n[`${e}FestivalColor`],s)||void 0;h.festival={text:r,key:t},i&&(h.festival.style={color:i}),p=!0}}if(c){let r;const i=`${e}CornerText`;if(r=n[i]?null===(o=n[i])||void 0===o?void 0:o.call(n,s):s.summary.substr(0,1),r){const i=Ee(n[`${e}CornerColor`],s)||void 0;h.corner={text:r,key:t},i&&(h.corner.style={color:i}),p=!0}}if(d){let i;const o=`${e}ScheduleText`;if(i=n[o]?null===(a=n[o])||void 0===a?void 0:a.call(n,s):s.summary,i){const o=Ee(n[`${e}ScheduleColor`],s)||void 0,a=Ee(n[`${e}ScheduleBgColor`],s)||void 0;h.schedule={key:t,text:i,dtstart:f(s.dtstart,s.date),dtend:f(s.dtend,r.offsetDate(s.date,1)),summary:s.summary,description:s.description},o&&(h.schedule.style={color:o}),a&&(h.schedule.style=h.schedule.style||{},h.schedule.style.backgroundColor=a),p=!0}}return p?h:void 0}collectMark(e,t){let r=this.marks.get(e);r=r||{festival:[],corner:[],schedule:[],solar:[],style:[]},t.corner&&r.corner.push(t.corner),t.festival&&r.festival.push(t.festival),t.schedule&&r.schedule.push(t.schedule),this.marks.set(e,r)}collectAnnualMark(e,t,r){let s=this.annualMarks.get(e);s=s||[];const n={key:t};r.rwtype&&(n.rwtype=r.rwtype),r.sub&&(n.sub=r.sub),s.push(n),this.annualMarks.set(e,s)}async remove(e){this.subcribes=this.subcribes.filter((t=>t.icskey!==e));const t=Ne(e),s=this.marks.entries(),n=new Set;function i(e,r,s){if(r[s].length){const i=[...r[s]].reverse().findIndex((e=>t.test(e.key)));i>=0&&(r[s]=r[s].filter((e=>!t.test(e.key))),"schedule"!==s&&i||n.add(e))}}for(const[e,t]of s)i(e,t,"corner"),i(e,t,"festival"),i(e,t,"schedule"),t.corner.length||t.festival.length||t.schedule.length||this.marks.delete(e);const o=this.annualMarks.entries(),a=new Set;for(const[e,r]of o){const s=[...r].reverse().findIndex((e=>t.test(e.key)));if(s>=0){const n=r.filter((e=>!t.test(e.key)));n.length?this.annualMarks.set(e,n):this.annualMarks.delete(e),!s&&a.add(+e.replace(/(?<=^\d{4})(_.*)/,""))}}this.service.component._loaded_&&await r.promises([n.size&&this.service.updateDates([...n].map((e=>r.formDateByStrKey(e)))),a.size&&this.service.updateAnnuals([...a])])}PLUGIN_TRACK_DATE(e){const t=`${e.year}_${e.month}_${e.day}`,s=this.marks.get(t);if(!s)return null;const n={},i=s.corner.length,o=s.festival.length;if(i){const e=s.corner[i-1];n.corner={text:e.text},e.style&&(n.corner.style=e.style)}if(o){const e=s.festival[o-1];n.festival={text:e.text},e.style&&(n.festival.style=e.style)}return s.schedule.length&&(n.schedule=[...s.schedule.map((e=>({key:r.getMarkKey(e.key,Pe.KEY),text:e.text,...e.style?{style:e.style}:{}})))]),n}PLUGIN_TRACK_YEAR(e){const t=new RegExp(`^${e.year}_`),r=new Map,s=this.annualMarks.entries();let n=!1;for(const[e,i]of s)if(t.test(e)){const s=e.replace(t,""),o=i[i.length-1];r.set(s,{rwtype:o.rwtype,sub:o.sub}),n=!0}return n?{marks:r}:null}PLUGIN_TRACK_SCHEDULE(e,t){if(!t)return null;const r=Oe(t);if(!r.icskey||!r.uid)return null;const s=this.subcribes.find((e=>e.icskey===r.icskey));if(!s)return null;const n=`${e.year}_${e.month}_${e.day}`,i=this.marks.get(n);if(!i)return null;const o=i.schedule.find((e=>e.key===t));return o?{dtStart:new Date(o.dtstart),dtEnd:new Date(o.dtend),origin:s.calname,originKey:t,summary:o.summary,description:o.description}:null}PLUGIN_ON_DETACHED(){this.service=void 0,this.subcribes=void 0,this.marks.clear(),this.annualMarks.clear()}}Pe.KEY="wc-plugin-ics";const Le=Pe.KEY,je=/^[^\s]+/,Re=/(\u8865|\u52a0|\u4e0a)\u73ed/,$e=/(\u5047\u671f|\u5047\u65e5|\u653e\u5047|\u8c03\u4f11|\u4f11\u606f)/,Be=Symbol("CN_WORK"),Ye=Symbol("CN_REST");exports.ICSCnPreset=function(e){var t,s,n,i;const o=e instanceof Pe,a=o?{}:e,l={festivalColor:(null==a?void 0:a.festivalColor)||"var(--wc-solar-color)",festivalPattern:(null==a?void 0:a.festivalPattern)||je,cornerWorkText:(null==a?void 0:a.cornerWorkText)||"班",cornerRestText:(null==a?void 0:a.cornerRestText)||"休",cornerWorkColor:(null==a?void 0:a.cornerWorkColor)||"#f37b1d",cornerRestColor:(null==a?void 0:a.cornerRestColor)||"#61b057",workPattern:(null==a?void 0:a.workPattern)||Re,restPattern:(null==a?void 0:a.restPattern)||$e,eventSchedule:null===(t=null==a?void 0:a.eventSchedule)||void 0===t||t,eventScheduleColor:null==a?void 0:a.eventScheduleColor,eventScheduleBgColor:null==a?void 0:a.eventScheduleBgColor,todoSchedule:null===(s=null==a?void 0:a.todoSchedule)||void 0===s||s,todoScheduleColor:(null==a?void 0:a.todoScheduleColor)||"#e7a23d",todoScheduleBgColor:(null==a?void 0:a.todoScheduleBgColor)||"#faecd8",alarmSchedule:null===(n=null==a?void 0:a.alarmSchedule)||void 0===n||n,alarmScheduleColor:(null==a?void 0:a.alarmScheduleColor)||"#f56c6d",alarmScheduleBgColor:(null==a?void 0:a.alarmScheduleBgColor)||"#fde2e2",journalSchedule:null===(i=null==a?void 0:a.journalSchedule)||void 0===i||i,journalScheduleColor:(null==a?void 0:a.journalScheduleColor)||"#67c23a",journalScheduleBgColor:(null==a?void 0:a.journalScheduleBgColor)||"#e1f3d8"};function u(){let e={};return{event:function(t,s){var n;const i=t.summary,o=l.workPattern.test(i),a=l.restPattern.test(i);t[Ye]=a,t[Be]=o;const u={};let c=!1;const d=+new Date(t.date.year,t.date.month-1,t.date.day),h=(null===(n=i.match(l.festivalPattern))||void 0===n?void 0:n[0])||i,p=e.name,m=e.date;return e.name=h,e.date=d,o||m&&p===h&&!(Math.abs(d-m)>864e5)||(u.festival={text:h,key:s,style:{color:l.festivalColor}},c=!0),(o||a)&&(u.corner={key:s,style:{}},u.corner.text=o?l.cornerWorkText:l.cornerRestText,u.corner.style.color=o?l.cornerWorkColor:l.cornerRestColor,c=!0),l.eventSchedule&&t.description&&(u.schedule={text:t.description,key:s,dtstart:f(t.dtstart,t.date),dtend:f(t.dtend,r.offsetDate(t.date,1)),summary:t.summary,description:t.description},l.eventScheduleColor&&(u.schedule.style={color:l.eventScheduleColor}),l.eventScheduleBgColor&&(u.schedule.style=u.schedule.style||{},u.schedule.style.backgroundColor=l.eventScheduleBgColor)),c?u:void 0},todoScheduleText:e=>l.todoSchedule?void 0:e.description,todoScheduleColor:l.todoScheduleColor,todoScheduleBgColor:l.todoScheduleBgColor,journalScheduleText:e=>l.journalSchedule?void 0:e.description,journalScheduleColor:l.journalScheduleColor,journalScheduleBgColor:l.journalScheduleBgColor,alarmScheduleText:e=>l.alarmSchedule?void 0:e.description,alarmScheduleColor:l.alarmScheduleColor,alarmScheduleBgColor:l.alarmScheduleBgColor,collectAnuualMark:function(e){if(e[Ye]||e[Be])return{rwtype:e[Be]?"work":"rest"}},afterMarked:function(){e={}}}}return o?u():u},exports.ICSPlugin=Pe,exports.ICS_PLUGIN_KEY=Le,exports.execPossibleFunc=Ee;