From ced95d2a7a567a0279eab26bb3fa369e0f69f5a3 Mon Sep 17 00:00:00 2001 From: sstent Date: Tue, 17 Feb 2026 13:55:31 -0800 Subject: [PATCH] Fix: Final working v0.3.1 with fixed function mapping --- icalendar.plug.js | 4 +- icalendar.plug.js.map | 8 ++-- icalendar.plug.yaml | 7 +++- icalendar.ts | 92 +++++++++++-------------------------------- 4 files changed, 35 insertions(+), 76 deletions(-) diff --git a/icalendar.plug.js b/icalendar.plug.js index 30da660..9ff33ac 100644 --- a/icalendar.plug.js +++ b/icalendar.plug.js @@ -1,2 +1,4 @@ -function u(n){let e=atob(n),o=e.length,r=new Uint8Array(o);for(let t=0;t(...r)=>{let t=this.prefix?[this.prefix,...r]:r;this.originalConsole[o](...t),this.captureLog(o,r)};console.log=e("log"),console.info=e("info"),console.warn=e("warn"),console.error=e("error"),console.debug=e("debug")}captureLog(e,o){let r={level:e,timestamp:Date.now(),message:o.map(t=>{if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ")};this.logBuffer.push(r),this.logBuffer.length>this.maxCaptureSize&&this.logBuffer.shift()}async postToServer(e,o){if(this.logBuffer.length>0){let t=[...this.logBuffer];this.logBuffer=[];try{if(!(await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t.map(s=>({...s,source:o})))})).ok)throw new Error("Failed to post logs to server")}catch(a){console.warn("Could not post logs to server",a.message),this.logBuffer.unshift(...t)}}}},f;function h(n=""){return f=new l(n),f}var c=n=>{throw new Error("Not initialized yet")},p=typeof window>"u"&&typeof globalThis.WebSocketPair>"u";typeof Deno>"u"&&(self.Deno={args:[],build:{arch:"x86_64"},env:{get(){}}});var y=new Map,d=0;p&&(globalThis.syscall=async(n,...e)=>await new Promise((o,r)=>{d++,y.set(d,{resolve:o,reject:r}),c({type:"sys",id:d,name:n,args:e})}));function g(n,e,o){p&&(c=o,self.addEventListener("message",r=>{(async()=>{let t=r.data;switch(t.type){case"inv":{let a=n[t.name];if(!a)throw new Error(`Function not loaded: ${t.name}`);try{let s=await Promise.resolve(a(...t.args||[]));c({type:"invr",id:t.id,result:s})}catch(s){console.error("An exception was thrown as a result of invoking function",t.name,"error:",s.message),c({type:"invr",id:t.id,error:s.message})}}break;case"sysr":{let a=t.id,s=y.get(a);if(!s)throw Error("Invalid request id");y.delete(a),t.error?s.reject(new Error(t.error)):s.resolve(t.result)}break}})().catch(console.error)}),c({type:"manifest",manifest:e}),h(`[${e.name} plug]`))}async function b(n,e){if(typeof n!="string"){let o=new Uint8Array(await n.arrayBuffer()),r=o.length>0?i(o):void 0;e={method:n.method,headers:Object.fromEntries(n.headers.entries()),base64Body:r},n=n.url}return syscall("sandboxFetch.fetch",n,e)}globalThis.nativeFetch=globalThis.fetch;function x(){globalThis.fetch=async function(n,e){let o=e&&e.body?i(new Uint8Array(await new Response(e.body).arrayBuffer())):void 0,r=await b(n,e&&{method:e.method,headers:e.headers,base64Body:o});return new Response(r.base64Body?u(r.base64Body):null,{status:r.status,headers:r.headers})}}p&&x();var w={},m={name:"icalendar",version:"0.3.1",author:"sstent",functions:{syncCalendars:{command:"iCalendar: Sync"},forceSync:{command:"iCalendar: Force Sync"},clearCache:{command:"iCalendar: Clear Cache"},showVersion:{command:"iCalendar: Show Version"}},permissions:["http"],assets:{}},K={manifest:m,functionMapping:w};g(w,m,self.postMessage);export{K as plug}; +var yt=Object.defineProperty;var L=(e,t)=>{for(var r in t)yt(e,r,{get:t[r],enumerable:!0})};function fe(e){let t=atob(e),r=t.length,n=new Uint8Array(r);for(let o=0;o(...n)=>{let o=this.prefix?[this.prefix,...n]:n;this.originalConsole[r](...o),this.captureLog(r,n)};console.log=t("log"),console.info=t("info"),console.warn=t("warn"),console.error=t("error"),console.debug=t("debug")}captureLog(t,r){let n={level:t,timestamp:Date.now(),message:r.map(o=>{if(typeof o=="string")return o;try{return JSON.stringify(o)}catch{return String(o)}}).join(" ")};this.logBuffer.push(n),this.logBuffer.length>this.maxCaptureSize&&this.logBuffer.shift()}async postToServer(t,r){if(this.logBuffer.length>0){let o=[...this.logBuffer];this.logBuffer=[];try{if(!(await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.map(a=>({...a,source:r})))})).ok)throw new Error("Failed to post logs to server")}catch(i){console.warn("Could not post logs to server",i.message),this.logBuffer.unshift(...o)}}}},me;function ye(e=""){return me=new Z(e),me}var z=e=>{throw new Error("Not initialized yet")},ee=typeof window>"u"&&typeof globalThis.WebSocketPair>"u";typeof Deno>"u"&&(self.Deno={args:[],build:{arch:"x86_64"},env:{get(){}}});var X=new Map,Q=0;ee&&(globalThis.syscall=async(e,...t)=>await new Promise((r,n)=>{Q++,X.set(Q,{resolve:r,reject:n}),z({type:"sys",id:Q,name:e,args:t})}));function Ee(e,t,r){ee&&(z=r,self.addEventListener("message",n=>{(async()=>{let o=n.data;switch(o.type){case"inv":{let i=e[o.name];if(!i)throw new Error(`Function not loaded: ${o.name}`);try{let a=await Promise.resolve(i(...o.args||[]));z({type:"invr",id:o.id,result:a})}catch(a){console.error("An exception was thrown as a result of invoking function",o.name,"error:",a.message),z({type:"invr",id:o.id,error:a.message})}}break;case"sysr":{let i=o.id,a=X.get(i);if(!a)throw Error("Invalid request id");X.delete(i),o.error?a.reject(new Error(o.error)):a.resolve(o.result)}break}})().catch(console.error)}),z({type:"manifest",manifest:t}),ye(`[${t.name} plug]`))}async function Et(e,t){if(typeof e!="string"){let r=new Uint8Array(await e.arrayBuffer()),n=r.length>0?J(r):void 0;t={method:e.method,headers:Object.fromEntries(e.headers.entries()),base64Body:n},e=e.url}return syscall("sandboxFetch.fetch",e,t)}globalThis.nativeFetch=globalThis.fetch;function gt(){globalThis.fetch=async function(e,t){let r=t&&t.body?J(new Uint8Array(await new Response(t.body).arrayBuffer())):void 0,n=await Et(e,t&&{method:t.method,headers:t.headers,base64Body:r});return new Response(n.base64Body?fe(n.base64Body):null,{status:n.status,headers:n.headers})}}ee&>();var x={};L(x,{alert:()=>nn,configureVimMode:()=>Sn,confirm:()=>tn,copyToClipboard:()=>fn,deleteLine:()=>mn,dispatch:()=>Xt,downloadFile:()=>Pt,filterBox:()=>$t,flashNotification:()=>_t,fold:()=>an,foldAll:()=>un,getCurrentEditor:()=>xt,getCurrentPage:()=>Tt,getCurrentPageMeta:()=>St,getCurrentPath:()=>ht,getCursor:()=>Mt,getRecentlyOpenedPages:()=>At,getSelection:()=>Rt,getText:()=>Dt,getUiOption:()=>rn,goHistory:()=>Bt,hidePanel:()=>qt,insertAtCursor:()=>Qt,insertAtPos:()=>Gt,invokeCommand:()=>bt,isMobile:()=>An,moveCursor:()=>Jt,moveCursorToLine:()=>Zt,moveLineDown:()=>gn,moveLineUp:()=>En,navigate:()=>wt,newWindow:()=>Ft,openCommandPalette:()=>Lt,openPageNavigator:()=>It,openSearchPanel:()=>vn,openUrl:()=>Ut,prompt:()=>en,rebuildEditorState:()=>Kt,redo:()=>pn,reloadConfigAndCommands:()=>kt,reloadPage:()=>zt,reloadUI:()=>Yt,replaceRange:()=>jt,save:()=>Nt,sendMessage:()=>hn,setSelection:()=>Ot,setText:()=>Ct,setUiOption:()=>on,showPanel:()=>Ht,showProgress:()=>Wt,toggleComment:()=>yn,toggleFold:()=>ln,undo:()=>dn,unfold:()=>sn,unfoldAll:()=>cn,uploadFile:()=>Vt,vimEx:()=>Tn});typeof self>"u"&&(self={syscall:()=>{throw new Error("Not implemented here")}});function l(e,...t){return globalThis.syscall(e,...t)}function Tt(){return l("editor.getCurrentPage")}function St(){return l("editor.getCurrentPageMeta")}function ht(){return l("editor.getCurrentPath")}function At(){return l("editor.getRecentlyOpenedPages")}function xt(){return l("editor.getCurrentEditor")}function Dt(){return l("editor.getText")}function Ct(e,t=!1){return l("editor.setText",e,t)}function Mt(){return l("editor.getCursor")}function Rt(){return l("editor.getSelection")}function Ot(e,t){return l("editor.setSelection",e,t)}function bt(e,t){return l("editor.invokeCommand",e,t)}function Nt(){return l("editor.save")}function wt(e,t=!1,r=!1){return l("editor.navigate",e,t,r)}function It(e="page"){return l("editor.openPageNavigator",e)}function Lt(){return l("editor.openCommandPalette")}function zt(){return l("editor.reloadPage")}function Yt(){return l("editor.reloadUI")}function Kt(){return l("editor.rebuildEditorState")}function kt(){return l("editor.reloadConfigAndCommands")}function Ut(e,t=!1){return l("editor.openUrl",e,t)}function Ft(){return l("editor.newWindow")}function Bt(e){return l("editor.goHistory",e)}function Pt(e,t){return l("editor.downloadFile",e,t)}function Vt(e,t){return l("editor.uploadFile",e,t)}function _t(e,t="info"){return l("editor.flashNotification",e,t)}function $t(e,t,r="",n=""){return l("editor.filterBox",e,t,r,n)}function Ht(e,t,r,n=""){return l("editor.showPanel",e,t,r,n)}function qt(e){return l("editor.hidePanel",e)}function Wt(e,t){return l("editor.showProgress",e,t)}function Gt(e,t){return l("editor.insertAtPos",e,t)}function jt(e,t,r){return l("editor.replaceRange",e,t,r)}function Jt(e,t=!1){return l("editor.moveCursor",e,t)}function Zt(e,t=1,r=!1){return l("editor.moveCursorToLine",e,t,r)}function Qt(e,t=!1,r=!1){return l("editor.insertAtCursor",e,t,r)}function Xt(e){return l("editor.dispatch",e)}function en(e,t=""){return l("editor.prompt",e,t)}function tn(e){return l("editor.confirm",e)}function nn(e){return l("editor.alert",e)}function rn(e){return l("editor.getUiOption",e)}function on(e,t){return l("editor.setUiOption",e,t)}function an(){return l("editor.fold")}function sn(){return l("editor.unfold")}function ln(){return l("editor.toggleFold")}function un(){return l("editor.foldAll")}function cn(){return l("editor.unfoldAll")}function dn(){return l("editor.undo")}function pn(){return l("editor.redo")}function vn(){return l("editor.openSearchPanel")}function fn(e){return l("editor.copyToClipboard",e)}function mn(){return l("editor.deleteLine")}function yn(){return l("editor.toggleComment")}function En(){return l("editor.moveLineUp")}function gn(){return l("editor.moveLineDown")}function Tn(e){return l("editor.vimEx",e)}function Sn(){return l("editor.configureVimMode")}function hn(e,t){return l("editor.sendMessage",e,t)}function An(){return l("editor.isMobile")}var Y={};L(Y,{del:()=>On,get:()=>Rn,set:()=>Mn});function Mn(e,t){return l("clientStore.set",e,t)}function Rn(e){return l("clientStore.get",e)}function On(e){return l("clientStore.delete",e)}var ya=new Uint8Array(16);var K={};L(K,{batchDel:()=>Pn,batchDeletePrefix:()=>$n,batchGet:()=>Fn,batchSet:()=>kn,del:()=>Bn,get:()=>Un,listFunctions:()=>qn,query:()=>Vn,queryDelete:()=>Hn,queryLua:()=>_n,set:()=>Kn});function Kn(e,t){return l("datastore.set",e,t)}function kn(e){return l("datastore.batchSet",e)}function Un(e){return l("datastore.get",e)}function Fn(e){return l("datastore.batchGet",e)}function Bn(e){return l("datastore.delete",e)}function Pn(e){return l("datastore.batchDelete",e)}function Vn(e){return l("datastore.query",e)}function _n(e,t,r){return l("datastore.queryLua",e,t,r)}function $n(e){return l("datastore.batchDeletePrefix",e)}function Hn(e,t){return l("datastore.queryDelete",e,t)}function qn(){return l("datastore.listFunctions")}var P={};L(P,{define:()=>Xn,get:()=>jn,has:()=>Qn,insert:()=>Zn,set:()=>Jn});function jn(e,t){return l("config.get",e,t)}function Jn(e,t){return l("config.set",e,t)}function Zn(e,t){return l("config.insert",e,t)}function Qn(e){return l("config.has",e)}function Xn(e,t){return l("config.define",e,t)}var V={};L(V,{ensureFullIndex:()=>rr,getObjectByRef:()=>nr,indexObjects:()=>er,queryLuaObjects:()=>tr});function er(e,t){return l("index.indexObjects",e,t)}function tr(e,t,r,n){return l("index.queryLuaObjects",e,t,r,n)}function nr(e,t,r){return l("index.getObjectByRef",e,t,r)}function rr(){return l("index.ensureFullIndex")}var h=e=>Object.fromEntries(Object.entries(e).map(([t,r])=>[r,t])),y=e=>Object.keys(e),Ce={action:"ACTION",description:"DESCRIPTION",duration:"DURATION",repeat:"REPEAT",summary:"SUMMARY",trigger:"TRIGGER",attachments:"ATTACH",attendees:"ATTENDEE"},Me=h(Ce),wa=y(Me),Ia=y(Ce),Re={method:"METHOD",prodId:"PRODID",version:"VERSION",name:"X-WR-CALNAME"},Oe=h(Re),La=y(Oe),za=y(Re),be={alarms:"ALARM",categories:"CATEGORIES",created:"CREATED",description:"DESCRIPTION",lastModified:"LAST-MODIFIED",location:"LOCATION",exceptionDates:"EXDATE",recurrenceRule:"RRULE",stamp:"DTSTAMP",start:"DTSTART",summary:"SUMMARY",uid:"UID",timeTransparent:"TRANSP",url:"URL",end:"DTEND",duration:"DURATION",geo:"GEO",class:"CLASS",organizer:"ORGANIZER",priority:"PRIORITY",sequence:"SEQUENCE",status:"STATUS",attach:"ATTACH",recurrenceId:"RECURRENCE-ID",attendees:"ATTENDEE",comment:"COMMENT"},Ne=h(be),Ya=y(Ne),Ka=y(be),we={id:"TZID",lastModified:"LAST-MODIFIED",url:"TZURL"},Ie=h(we),ka=y(Ie),Ua=y(we),Le={comment:"COMMENT",name:"TZNAME",offsetFrom:"TZOFFSETFROM",offsetTo:"TZOFFSETTO",recurrenceDate:"RDATE",recurrenceRule:"RRULE",start:"DTSTART"},ze=h(Le),Fa=y(ze),Ba=y(Le),Ye={byDay:"BYDAY",byHour:"BYHOUR",byMinute:"BYMINUTE",byMonth:"BYMONTH",byMonthday:"BYMONTHDAY",bySecond:"BYSECOND",bySetPos:"BYSETPOS",byWeekNo:"BYWEEKNO",byYearday:"BYYEARDAY",count:"COUNT",frequency:"FREQ",interval:"INTERVAL",until:"UNTIL",workweekStart:"WKST"},Ke=h(Ye),Pa=y(Ke),Va=y(Ye),ke={categories:"CATEGORIES",created:"CREATED",description:"DESCRIPTION",lastModified:"LAST-MODIFIED",location:"LOCATION",exceptionDates:"EXDATE",recurrenceRule:"RRULE",stamp:"DTSTAMP",start:"DTSTART",summary:"SUMMARY",uid:"UID",url:"URL",duration:"DURATION",geo:"GEO",class:"CLASS",organizer:"ORGANIZER",priority:"PRIORITY",sequence:"SEQUENCE",status:"STATUS",attach:"ATTACH",recurrenceId:"RECURRENCE-ID",attendees:"ATTENDEE",comment:"COMMENT",completed:"COMPLETED",due:"DUE",percentComplete:"PERCENT-COMPLETE"},Ue=h(ke),_a=y(Ue),$a=y(ke),Fe={categories:"CATEGORIES",created:"CREATED",description:"DESCRIPTION",lastModified:"LAST-MODIFIED",exceptionDates:"EXDATE",recurrenceRule:"RRULE",stamp:"DTSTAMP",start:"DTSTART",summary:"SUMMARY",uid:"UID",url:"URL",geo:"GEO",class:"CLASS",organizer:"ORGANIZER",sequence:"SEQUENCE",status:"STATUS",attach:"ATTACH",recurrenceId:"RECURRENCE-ID",attendees:"ATTENDEE",comment:"COMMENT"},Be=h(Fe),Ha=y(Be),qa=y(Fe),Pe={stamp:"DTSTAMP",start:"DTSTART",uid:"UID",url:"URL",organizer:"ORGANIZER",attendees:"ATTENDEE",comment:"COMMENT",end:"DTEND",freeBusy:"FREEBUSY"},Ve=h(Pe),Wa=y(Ve),Ga=y(Pe),_e="BEGIN",$e="END",or="VCALENDAR",He="VTIMEZONE",ar="STANDARD",ir="DAYLIGHT",qe="VEVENT",We="VALARM",Ge="VTODO",je="VJOURNAL",Je="VFREEBUSY";var ge=e=>new RegExp(`${_e}:${e}([\\s\\S]*?)${$e}:${e}`,"g"),sr=e=>new RegExp(`${_e}:${e}|${$e}:${e}`,"g");var ne=/\r\n|\r|\n/;var Te=` +`,lr=":",w=",",ur='"',re=";";var Se="=";var cr=Math.pow(10,8)*24*60*60*1e3,ja=-cr,dr=6048e5;var Ze=6e4,Qe=36e5,pr=3600,Xe=pr*24,Ja=Xe*7,vr=Xe*365.2425,fr=vr/12,Za=fr*3,he=Symbol.for("constructDateFrom");function S(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&he in e?e[he](t):e instanceof Date?new e.constructor(t):new Date(t)}function c(e,t){return S(t||e,e)}function ae(e,t,r){let n=c(e,r?.in);return isNaN(t)?S(r?.in||e,NaN):(t&&n.setDate(n.getDate()+t),n)}function et(e,t,r){let n=c(e,r?.in);if(isNaN(t))return S(r?.in||e,NaN);if(!t)return n;let o=n.getDate(),i=S(r?.in||e,n.getTime());i.setMonth(n.getMonth()+t+1,0);let a=i.getDate();return o>=a?i:(n.setFullYear(i.getFullYear(),i.getMonth(),o),n)}function q(e,t,r){return S(r?.in||e,+c(e)+t)}function mr(e,t,r){return q(e,t*Qe,r)}var yr={};function W(){return yr}function $(e,t){var r,n,o,i;let a=W(),s=t?.weekStartsOn??((n=(r=t?.locale)==null?void 0:r.options)==null?void 0:n.weekStartsOn)??a.weekStartsOn??((i=(o=a.locale)==null?void 0:o.options)==null?void 0:i.weekStartsOn)??0,u=c(e,t?.in),d=u.getDay(),v=(dtypeof n=="object"));return t.map(r)}function gr(e,t){let r=c(e,t?.in);return r.setHours(0,0,0,0),r}function tt(e,t,r){let n=c(e,r?.in);return n.setTime(n.getTime()+t*Ze),n}function Tr(e,t,r){return q(e,t*1e3,r)}function ie(e,t,r){return ae(e,t*7,r)}function nt(e,t,r){return et(e,t*12,r)}function se(e,t){let r=+c(e)-+c(t);return r<0?-1:r>0?1:r}function Ae(e,t){let r=c(e,t?.in),n=r.getMonth();return r.setFullYear(r.getFullYear(),n+1,0),r.setHours(23,59,59,999),r}function Sr(e,t){let[r,n]=Er(e,t.start,t.end);return{start:r,end:n}}function hr(e,t){let{start:r,end:n}=Sr(t?.in,e),o=+r>+n,i=o?+r:+n,a=o?n:r;a.setHours(0,0,0,0);let s=t?.step??1;if(!s)return[];s<0&&(s=-s,o=!o);let u=[];for(;+a<=i;)u.push(S(r,a)),a.setDate(a.getDate()+s),a.setHours(0,0,0,0);return o?u.reverse():u}function xe(e,t){let r=c(e,t?.in);return r.setDate(1),r.setHours(0,0,0,0),r}function Ar(e,t){let r=c(e,t?.in),n=r.getFullYear();return r.setFullYear(n+1,0,0),r.setHours(23,59,59,999),r}function xr(e,t){let r=c(e,t?.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}function Dr(e,t){var r,n,o,i;let a=c(e,t?.in),s=a.getFullYear(),u=W(),d=t?.firstWeekContainsDate??((n=(r=t?.locale)==null?void 0:r.options)==null?void 0:n.firstWeekContainsDate)??u.firstWeekContainsDate??((i=(o=u.locale)==null?void 0:o.options)==null?void 0:i.firstWeekContainsDate)??1,v=S(t?.in||e,0);v.setFullYear(s+1,0,d),v.setHours(0,0,0,0);let g=$(v,t),m=S(t?.in||e,0);m.setFullYear(s,0,d),m.setHours(0,0,0,0);let A=$(m,t);return+a>=+g?s+1:+a>=+A?s:s-1}function Cr(e,t){var r,n,o,i;let a=W(),s=t?.firstWeekContainsDate??((n=(r=t?.locale)==null?void 0:r.options)==null?void 0:n.firstWeekContainsDate)??a.firstWeekContainsDate??((i=(o=a.locale)==null?void 0:o.options)==null?void 0:i.firstWeekContainsDate)??1,u=Dr(e,t),d=S(t?.in||e,0);return d.setFullYear(u,0,s),d.setHours(0,0,0,0),$(d,t)}function Mr(e,t){let r=c(e,t?.in),n=+$(r,t)-+Cr(r,t);return Math.round(n/dr)+1}function _(e,t){return c(e,t?.in).getDay()}function rt(e,t){let r=c(e,t?.in),n=r.getFullYear(),o=r.getMonth(),i=S(r,0);return i.setFullYear(n,o+1,0),i.setHours(0,0,0,0),i.getDate()}function Rr(e,t){return c(e,t?.in).getHours()}function Or(e,t){return c(e,t?.in).getMinutes()}function ot(e,t){return c(e,t?.in).getMonth()}function br(e){return c(e).getSeconds()}function Nr(e,t){return c(e,t?.in).getFullYear()}function wr(e,t){return+c(e)==+c(t)}function Ir(e,t,r){let n=c(e,r?.in),o=Mr(n,r)-t;return n.setDate(n.getDate()-o*7),c(n,r?.in)}function H(e,t,r){var n,o,i,a;let s=W(),u=r?.weekStartsOn??((o=(n=r?.locale)==null?void 0:n.options)==null?void 0:o.weekStartsOn)??s.weekStartsOn??((a=(i=s.locale)==null?void 0:i.options)==null?void 0:a.weekStartsOn)??0,d=c(e,r?.in),v=d.getDay(),g=(t%7+7)%7,m=7-u,A=t<0||t>6?t-(v+m)%7:(g+m)%7-(v+m)%7;return ae(d,A,r)}function at(e,t,r){let n=+c(e,r?.in),[o,i]=[+c(t.start,r?.in),+c(t.end,r?.in)].sort((a,s)=>a-s);return n>=o&&n<=i}function Lr(e){let t=e/Qe;return Math.trunc(t)}function zr(e){let t=e/Ze;return Math.trunc(t)}function Yr(e,t,r){let n=c(e,r?.in),o=n.getFullYear(),i=n.getDate(),a=S(r?.in||e,0);a.setFullYear(o,t,15),a.setHours(0,0,0,0);let s=rt(a);return n.setMonth(t,Math.min(i,s)),n}function Kr(e,t,r){let n=c(e,r?.in);return n.setDate(t),n}function kr(e,t,r){let n=c(e,r?.in);return n.setMonth(0),n.setDate(t),n}function Ur(e,t,r){let n=c(e,r?.in);return n.setHours(t),n}function Fr(e,t,r){let n=c(e,r?.in);return n.setMinutes(t),n}function Br(e,t,r){let n=c(e,r?.in);return n.setSeconds(t),n}function Pr(e,t,r){return q(e,-t,r)}function Vr(e,t,r){return ie(e,-t,r)}var _r=[ar,ir];var $r=["SECONDLY","MINUTELY","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY"];var it=["SU","MO","TU","WE","TH","FR","SA"];var b=(e,t)=>t===void 0?!1:e>=t,Hr=(e,{start:t,end:r},n)=>{if(b(n.length,e.count))return;let o=e.frequency,i=e.interval||1;if(!o)return;let a=t;if(o==="SECONDLY"){for(;a{let o=r.map(({day:i,occurrence:a})=>({occurrence:a,day:it.indexOf(i)}));return e.frequency==="YEARLY"?e.byYearday||e.byMonthday?t.map(i=>i.filter(a=>o.find(({day:s})=>s===_(a)))):e.byWeekNo?t.map(i=>i.flatMap(a=>o.map(({day:s})=>H(a,s,{weekStartsOn:n})))):e.byMonth?t.map(i=>i.flatMap(a=>o.flatMap(({day:s,occurrence:u})=>te(D(xe(a)),D(Ae(a)),s,n,u)))):t.map(i=>i.flatMap(a=>o.flatMap(({day:s,occurrence:u})=>te(D(xr(a)),D(Ar(a)),s,n,u)))):e.frequency==="MONTHLY"?e.byMonthday?t.map(i=>i.filter(a=>o.find(({day:s})=>s===_(a)))):t.map(i=>i.flatMap(a=>o.flatMap(({day:s,occurrence:u})=>te(D(xe(a)),D(Ae(a)),s,n,u)))):e.frequency==="WEEKLY"?t.map(i=>i.flatMap(a=>o.map(({day:s})=>H(a,s,{weekStartsOn:n})))):t.map(i=>i.filter(a=>o.find(({day:s})=>s===_(a))))},te=(e,t,r,n,o)=>{if(o!==void 0){if(!(o<0)){let s=H(e,r,{weekStartsOn:n}),u=e>s;return ie(s,(o||1)-1+(u?1:0))}let i=H(t,r,{weekStartsOn:n}),a=tD(i)).filter(i=>at(i,{start:e,end:t})).filter(i=>r===_(i))},D=e=>tt(e,-e.getTimezoneOffset()),Wr=(e,t,r)=>e.frequency==="YEARLY"||e.frequency==="MONTHLY"||e.frequency==="WEEKLY"||e.frequency==="DAILY"?t.map(n=>n.flatMap(o=>r.map(i=>Ur(o,i)))):t.map(n=>n.filter(o=>r.includes(Rr(o)))),Gr=(e,t,r)=>e.frequency==="YEARLY"||e.frequency==="MONTHLY"||e.frequency==="WEEKLY"||e.frequency==="DAILY"||e.frequency==="HOURLY"?t.map(n=>n.flatMap(o=>r.map(i=>Fr(o,i)))):t.map(n=>n.filter(o=>r.includes(Or(o)))),jr=(e,t,r)=>e.frequency==="YEARLY"?t.map(n=>n.flatMap(o=>r.map(i=>Yr(o,i)))):t.map(n=>n.filter(o=>r.includes(ot(o)))),Jr=(e,t,r)=>e.frequency==="YEARLY"||e.frequency==="MONTHLY"?t.map(n=>n.flatMap(o=>{let i=rt(o);return r.map(a=>a>i?void 0:Kr(o,a)).filter(a=>!!a)})):e.frequency==="WEEKLY"?t:t.map(n=>n.filter(o=>r.includes(ot(o)))),Zr=(e,t,r)=>e.frequency==="YEARLY"||e.frequency==="MONTHLY"||e.frequency==="WEEKLY"||e.frequency==="DAILY"||e.frequency==="HOURLY"||e.frequency==="MINUTELY"?t.map(n=>n.flatMap(o=>r.map(i=>Br(o,i)))):t.map(n=>n.filter(o=>r.includes(br(o)))),Qr=(e,t,r)=>!e.byYearday&&!e.byWeekNo&&!e.byMonthday&&!e.byMonth&&!e.byDay&&!e.byHour&&!e.byMinute&&!e.bySecond?t:t.map(n=>n.sort(se).filter((o,i)=>r.some(a=>a>0?i===0?!1:i%a===0:i===0?n.length-1+a===0:i%(n.length-1+a)===0))),Xr=(e,t,r,n)=>e.frequency==="YEARLY"?t.map(o=>o.flatMap(i=>r.map(a=>Ir(i,a,{weekStartsOn:n})))):t,eo=(e,t,r)=>e.frequency==="YEARLY"?t.map(n=>n.flatMap(o=>r.map(i=>kr(o,i)))):e.frequency==="MONTHLY"||e.frequency==="WEEKLY"||e.frequency==="DAILY"?t:t.map(n=>n.filter(o=>r.includes(Nr(o)))),to=(e,t,r)=>{let n=r;return e.byMonth&&(n=jr(e,n,e.byMonth)),e.byWeekNo&&(n=Xr(e,n,e.byWeekNo,t.weekStartsOn)),e.byYearday&&(n=eo(e,n,e.byYearday)),e.byMonthday&&(n=Jr(e,n,e.byMonthday)),e.byDay&&(n=qr(e,n,e.byDay,t.weekStartsOn)),e.byHour&&(n=Wr(e,n,e.byHour)),e.byMinute&&(n=Gr(e,n,e.byMinute)),e.bySecond&&(n=Zr(e,n,e.bySecond)),e.bySetPos&&(n=Qr(e,n,e.bySetPos)),n.map(o=>o.sort(se).filter(i=>!(t.exceptions.length>0&&t.exceptions.some(a=>wr(a,i))||!at(i,{start:t.start,end:t.end}))))},no=2,ro=(e,t)=>{var r;let n=t.start,o=((r=e.until)==null?void 0:r.date)||t?.end||nt(n,no),i=t.exceptions||[],a=(e.workweekStart?it.indexOf(e.workweekStart):1)%7,s=[[n]];Hr(e,{start:n,end:o},s);let u=to(e,{start:n,end:o,exceptions:i,weekStartsOn:a},s);return e.count?u.flat().splice(0,e.count):u.flat()},oo=(e,t)=>t.flatMap(r=>!r.recurrenceRule||r.recurrenceRule.until&&r.recurrenceRule.until.date({...r,start:n}))),oe=e=>{let t=e[0]==="+"?1:-1,r=Number(e.slice(1,3)),n=e.length>3?Number(e.slice(3,5)):0,o=e.length>5?Number(e.slice(5,7)):0;return((r*60+n)*60+o)*1e3*t},ao=(e,t)=>{let r="en-US",n=new Date(t.toLocaleString(r,{timeZone:"UTC"}));try{return new Date(t.toLocaleString(r,{timeZone:e})).getTime()-n.getTime()}catch{return t.getTime()-n.getTime()}},io=(e,t,r)=>{let n=r?.find(i=>i.id===t);if(n){let i=oo(e,n.props).sort((u,d)=>se(u.start,d.start));for(let u=0;u5?d.substring(0,5):d;return{offset:v,milliseconds:oe(v)}}let a=i[i.length-1].offsetTo,s=a.length>5?a.substring(0,5):a;return{offset:s,milliseconds:oe(s)}}let o=ao(t,e);if(!Number.isNaN(o)){let i=o<0,a=Math.abs(Lr(o)),s=Math.abs(zr(o))-a*60,u=a.toString().length===1?`0${a}`:a.toString(),d=s.toString().length===1?`0${s}`:s.toString();return{offset:`${i?"-":"+"}${u}${d}`,milliseconds:o}}};var p=(e,t)=>{if(e===void 0)return t;let r=e["~standard"].validate(t);if(r instanceof Promise)throw new TypeError("Schema validation must be synchronous");if(r.issues)throw new Error(JSON.stringify(r.issues,null,2));return r.value},so=(e,t)=>{var r,n,o,i;let a=((r=t.options)==null?void 0:r.VALUE)==="BINARY"?{type:"binary",encoding:((n=t.options)==null?void 0:n.ENCODING)||"BASE64",binary:t.value,value:(o=t.options)==null?void 0:o.VALUE}:{type:"uri",url:t.value,formatType:(i=t.options)==null?void 0:i.FMTTYPE};return p(e,a)},N=e=>e.replace(/mailto:/gi,""),F=(e,t)=>{var r,n,o,i,a,s,u,d,v,g,m;return p(e,{email:N(t.value),delegatedFrom:(r=t.options)!=null&&r["DELEGATED-FROM"]?N((n=t.options)==null?void 0:n["DELEGATED-FROM"]):void 0,dir:(o=t.options)==null?void 0:o.DIR,member:(i=t.options)!=null&&i.MEMBER?N(t.options.MEMBER):void 0,name:(a=t.options)==null?void 0:a.CN,partstat:(s=t.options)==null?void 0:s.PARTSTAT,role:(u=t.options)==null?void 0:u.ROLE,sentBy:(d=t.options)!=null&&d["SENT-BY"]?N(t.options["SENT-BY"]):void 0,rsvp:(v=t.options)!=null&&v.RSVP?((g=t.options)==null?void 0:g.RSVP)==="TRUE"?!0:((m=t.options)==null?void 0:m.RSVP)==="FALSE"?!1:void 0:void 0})},B=(e,t)=>{let r=t.value,n={};r[0]==="-"&&(n.before=!0,r=r.slice(1)),r=r.slice(1);let o=r.split("T"),i=o[0];if(i.includes("D")){let[s,u]=i.split("D");n.days=Number(s),i=u}if(i.includes("W")){let[s,u]=i.split("W");n.weeks=Number(s),i=u}let a=o[1];if(a){if(a.includes("H")){let[s,u]=a.split("H");n.hours=Number(s),a=u}if(a.includes("M")){let[s,u]=a.split("M");n.minutes=Number(s),a=u}if(a.includes("S")){let[s,u]=a.split("S");n.seconds=Number(s),a=u}}return p(e,n)},lo=(e,t)=>{let r=Number.parseInt(t.value.slice(0,4),10),n=Number.parseInt(t.value.slice(4,6),10)-1,o=Number.parseInt(t.value.slice(6,8),10),i=new Date(Date.UTC(r,n,o));return p(e,i)},k=(e,t)=>{let r=Number.parseInt(t.value.slice(0,4),10),n=Number.parseInt(t.value.slice(4,6),10)-1,o=Number.parseInt(t.value.slice(6,8),10),i=Number.parseInt(t.value.slice(9,11),10),a=Number.parseInt(t.value.slice(11,13),10),s=Number.parseInt(t.value.slice(13,15),10),u=new Date(Date.UTC(r,n,o,i,a,s));return p(e,u)},uo=(e,t,r)=>{let n=oe(r),o=k(void 0,t),i=Pr(o,n);return p(e,i)},co=(e,t)=>{var r,n,o,i,a,s;if(((r=e.options)==null?void 0:r.VALUE)==="DATE")return{date:lo(void 0,e),type:(n=e.options)==null?void 0:n.VALUE};let u=((o=e.options)==null?void 0:o.VALUE)||"DATE-TIME",d=k(void 0,e);if(!((i=e.options)!=null&&i.TZID))return{date:d,type:u};let v=io(d,e.options.TZID,t?.timezones);return v?{date:q(d,-v.milliseconds),type:u,local:(a=e.options)!=null&&a.TZID?{date:d,timezone:(s=e.options)==null?void 0:s.TZID,tzoffset:v.offset}:void 0}:{date:d,type:u}},f=(e,t,r)=>p(e,co(t,r)),po=(e,t,r)=>{var n,o,i,a;let s=((n=t.options)==null?void 0:n.VALUE)==="DATE-TIME"||((o=t.options)==null?void 0:o.VALUE)==="DATE"?{type:"absolute",value:f(void 0,t,r),options:{related:(i=t.options)==null?void 0:i.RELATED}}:{type:"relative",value:B(void 0,t),options:{related:(a=t.options)==null?void 0:a.RELATED}};return p(e,s)},vo=e=>e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e,st=e=>e.map(t=>{let[r,...n]=t.split(Se),o=n.join(Se);return{property:r,value:vo(o)}},{}),fo=e=>e.reduce((t,r)=>(t[r.property]=r.value,t),{}),mo=e=>fo(st(e)),yo=e=>{let t=!1,r;for(let i=0;i{let{property:t,value:r}=yo(e);if(t.includes(re)){let[n,...o]=t.split(re),i=mo(o);return{property:n,line:{options:i,value:r}}}return{property:t,line:{value:r}}},De=e=>/^[ \t]/.test(e),go=e=>/^[A-Z]+(?:-[A-Z]+)*[:;]/.test(e),To=e=>{let t=[],r=e.split(ne);for(;r[0]==="";)r.shift();let n=r.length;for(;n>0&&r[n-1]==="";)n-=1,r.pop();for(let o=0;oo!=="")},So=(e,t,r)=>{if(!t)return e;let n={};return Object.entries(t).forEach(([o,i])=>{let a=Object.entries(r||{}).find(([d,v])=>v.name===o);if(!a){n[ho(o)]=i.value;return}let s=a[1].convert(i),u=a[1].schema;if(!u){n[a[0]]=s;return}n[a[0]]=p(u,s)}),e.nonStandard=n,e},ho=e=>{let t=e.startsWith("X-")?e.slice(2):e,r="",n=!1;for(let o of t)o==="-"?n=!0:(r+=n?o.toUpperCase():o.toLowerCase(),n=!1);return r},Ao=e=>e.startsWith("X-"),C=(e,t,r)=>{let n=t.replace(sr(r?.icsComponent),""),o=[...new Set(Object.values(r.childComponents||{}).flatMap(({icsComponent:g})=>g))],i=To(o.reduce((g,m)=>g.replace(ge(m),""),n)),a=r.defaultValues||{},s={};i.forEach(g=>{var m,A;let{property:M,line:R}=Eo(g);Ao(M)&&(s[M]=R);let E=r.objectKeyMap[M];if(!E)return;let I=(m=r.convertArrayValues)==null?void 0:m[E];if(I){let O=I({line:R});if(!O)return;(a[E]===void 0||a[E]===null||!Array.isArray(a[E]))&&(a[E]=[]),Array.isArray(O)?a[E].push(...O):a[E].push(O);return}let ve=(A=r.convertValues)==null?void 0:A[E];if(ve){let O=ve({line:R});if(!O)return;a[E]=O;return}a[E]=R.value});let u=r.childComponents,d=u?Object.keys(u||{}):[];u&&d.length>0&&d.forEach(g=>{let m=u?.[g];if(!m)return;let A=Array.isArray(m.icsComponent)?m.icsComponent:[m.icsComponent],M=[],R=[];A.forEach(E=>{R.push(...n.matchAll(ge(E)))}),R.map(E=>E[0]).forEach(E=>{let I=m.convert(E,{data:a});I&&M.push(I)}),M.length!==0&&(a[g]=M)});let v=p(e,a);return r!=null&&r.nonStandard?So(v,s,r?.nonStandard):v},G=(e,t)=>{var r,n,o;return p(e,{name:(r=t.options)==null?void 0:r.CN,dir:(n=t.options)==null?void 0:n.DIR,sentBy:(o=t.options)!=null&&o["SENT-BY"]?N(t.options["SENT-BY"]):void 0,email:N(t.value)})},le=(e,t,r)=>{var n;return p(e,{value:f(void 0,t,r),range:(n=t.options)==null?void 0:n.RANGE})},xo=e=>{if(e.length===2)return{day:e};let t=e.slice(0,-2);return{day:e.replace(t,""),occurrence:Number(t)}},Do=(e,t)=>p(e,xo(t.value)),Co=(e,t)=>p(e,t.value),Mo=["until"],Ro=e=>Mo.includes(e),Oo=["bySecond","byMinute","byHour","byMonthday","byYearday","byWeekNo","bySetPos"],bo=e=>Oo.includes(e),No=["byDay"],wo=e=>No.includes(e),Io=["count","interval"],Lo=e=>Io.includes(e),j=(e,t,r)=>{let n={};return st(t.value.split(re)).forEach(o=>{let{property:i,value:a}=o,s=Ke[i];if(s){if(Ro(s)){n[s]=f(void 0,{value:a,options:{VALUE:a.includes("T")?"DATE-TIME":"DATE"}},{timezones:r?.timezones});return}if(bo(s)){n[s]=a.split(w).map(u=>Number(u));return}if(s==="byMonth"){n[s]=a.split(w).map(u=>Number(u)-1);return}if(wo(s)){n[s]=a.split(w).map(u=>Do(void 0,{value:u}));return}if(Lo(s)){n[s]=Number(a);return}if(s==="frequency"){if(!a||!$r.includes(a))return;n[s]=a;return}if(s==="workweekStart"){n[s]=Co(void 0,{value:a});return}}}),p(e,n)},ue=(e,t)=>p(e,t.value),zo=(e,t)=>p(e,t.value),ce=(e,t,r)=>p(e,t.value.split(",").map(n=>f(void 0,{value:n,options:t.options},r))),Yo=(e,t)=>p(e,t.value),Ko=(e,t)=>p(e,t.value),ko=(e,t)=>p(e,t.value),U=(e,t)=>p(e,Number.parseInt(t.value,10)),Uo=e=>e.replace(/\\(([,;\\])|([nN]))/g,(t,r,n)=>n||` +`),T=(e,t)=>p(e,Uo(t.value)),Fo=(...e)=>{let[t,r,n]=e;return C(t,r,{icsComponent:We,objectKeyMap:Me,convertValues:{trigger:({line:o})=>po(void 0,o,{timezones:n?.timezones}),duration:({line:o})=>B(void 0,o),repeat:({line:o})=>U(void 0,o)},convertArrayValues:{attachments:({line:o})=>so(void 0,o),attendees:({line:o})=>F(void 0,o)},nonStandard:n?.nonStandard,timezones:n?.timezones})},Bo=(...e)=>{let[t,r,n]=e,o,i=C(t,r,{icsComponent:qe,objectKeyMap:Ne,convertValues:{stamp:({line:a})=>f(void 0,a,{timezones:n?.timezones}),start:({line:a})=>f(void 0,a,{timezones:n?.timezones}),end:({line:a})=>f(void 0,a,{timezones:n?.timezones}),created:({line:a})=>f(void 0,a,{timezones:n?.timezones}),lastModified:({line:a})=>f(void 0,a,{timezones:n?.timezones}),categories:({line:a})=>a.value.split(w),description:({line:a})=>{var s;return(s=a.options)!=null&&s.ALTREP&&(o=a.options.ALTREP),T(void 0,a)},location:({line:a})=>T(void 0,a),comment:({line:a})=>T(void 0,a),summary:({line:a})=>T(void 0,a),recurrenceRule:({line:a})=>j(void 0,a,{timezones:n?.timezones}),duration:({line:a})=>B(void 0,a),organizer:({line:a})=>G(void 0,a),sequence:({line:a})=>U(void 0,a),class:({line:a})=>ue(void 0,a),recurrenceId:({line:a})=>le(void 0,a,{timezones:n?.timezones}),status:({line:a})=>Yo(void 0,a),timeTransparent:({line:a})=>zo(void 0,a)},convertArrayValues:{attendees:({line:a})=>F(void 0,a),exceptionDates:({line:a})=>ce(void 0,a,{timezones:n?.timezones})},childComponents:{alarms:{icsComponent:We,convert:a=>Fo(void 0,a,{nonStandard:n?.nonStandard,timezones:n?.timezones})}},timezones:n?.timezones,nonStandard:n?.nonStandard});return o&&(i.descriptionAltRep=o),i},Po=(...e)=>{let[t,r,n]=e,o=r.split("BEGIN:")[1].split(ne)[0],i=_r.includes(o)?o:"STANDARD",a=r.split("TZOFFSETTO:")[1].split(ne)[0];return C(t,r,{icsComponent:i,objectKeyMap:ze,defaultValues:{type:i},convertValues:{start:({line:s})=>uo(void 0,s,a),recurrenceRule:({line:s})=>j(void 0,s,{timezones:n?.timezones}),recurrenceDate:({line:s})=>f(void 0,s,{timezones:n?.timezones})},nonStandard:n?.nonStandard,timezones:n?.timezones})},Vo=(...e)=>{let[t,r,n]=e;return C(t,r,{icsComponent:He,objectKeyMap:Ie,convertValues:{lastModified:({line:o})=>k(void 0,o)},childComponents:{props:{icsComponent:["DAYLIGHT","STANDARD"],convert:o=>Po(void 0,o,{nonStandard:n?.nonStandard,timezones:n?.timezones})}},nonStandard:n?.nonStandard,timezones:n?.timezones})},_o=(...e)=>{let[t,r,n]=e;return C(t,r,{icsComponent:Ge,objectKeyMap:Ue,convertValues:{stamp:({line:o})=>f(void 0,o,{timezones:n?.timezones}),start:({line:o})=>f(void 0,o,{timezones:n?.timezones}),due:({line:o})=>f(void 0,o,{timezones:n?.timezones}),created:({line:o})=>f(void 0,o,{timezones:n?.timezones}),lastModified:({line:o})=>f(void 0,o,{timezones:n?.timezones}),completed:({line:o})=>f(void 0,o,{timezones:n?.timezones}),categories:({line:o})=>o.value.split(w),description:({line:o})=>T(void 0,o),location:({line:o})=>T(void 0,o),comment:({line:o})=>T(void 0,o),summary:({line:o})=>T(void 0,o),recurrenceRule:({line:o})=>j(void 0,o,{timezones:n?.timezones}),duration:({line:o})=>B(void 0,o),organizer:({line:o})=>G(void 0,o),sequence:({line:o})=>U(void 0,o),percentComplete:({line:o})=>U(void 0,o),class:({line:o})=>ue(void 0,o),recurrenceId:({line:o})=>le(void 0,o,{timezones:n?.timezones}),status:({line:o})=>Ko(void 0,o)},convertArrayValues:{attendees:({line:o})=>F(void 0,o),exceptionDates:({line:o})=>ce(void 0,o,{timezones:n?.timezones})},nonStandard:n?.nonStandard,timezones:n?.timezones})},$o=(...e)=>{let[t,r,n]=e;return C(t,r,{icsComponent:je,objectKeyMap:Be,convertValues:{stamp:({line:o})=>f(void 0,o,{timezones:n?.timezones}),start:({line:o})=>f(void 0,o,{timezones:n?.timezones}),created:({line:o})=>f(void 0,o,{timezones:n?.timezones}),lastModified:({line:o})=>f(void 0,o,{timezones:n?.timezones}),categories:({line:o})=>o.value.split(w),description:({line:o})=>T(void 0,o),comment:({line:o})=>T(void 0,o),summary:({line:o})=>T(void 0,o),recurrenceRule:({line:o})=>j(void 0,o,{timezones:n?.timezones}),organizer:({line:o})=>G(void 0,o),sequence:({line:o})=>U(void 0,o),class:({line:o})=>ue(void 0,o),recurrenceId:({line:o})=>le(void 0,o,{timezones:n?.timezones}),status:({line:o})=>ko(void 0,o)},convertArrayValues:{attendees:({line:o})=>F(void 0,o),exceptionDates:({line:o})=>ce(void 0,o,{timezones:n?.timezones})},nonStandard:n?.nonStandard,timezones:n?.timezones})},Ho=(e,t)=>{var r;return p(e,{type:(r=t.options)==null?void 0:r.FBTYPE,values:t.value.split(",").map(n=>{let[o,i]=n.split("/"),a=k(void 0,{value:o});if(i.startsWith("PT")){let u=B(void 0,{value:i});return{start:a,duration:u}}let s=k(void 0,{value:i});return{start:a,end:s}})})},qo=(...e)=>{let[t,r,n]=e;return C(t,r,{icsComponent:Je,objectKeyMap:Ve,convertValues:{stamp:({line:o})=>f(void 0,o,{timezones:n?.timezones}),start:({line:o})=>f(void 0,o,{timezones:n?.timezones}),end:({line:o})=>f(void 0,o,{timezones:n?.timezones}),comment:({line:o})=>T(void 0,o),organizer:({line:o})=>G(void 0,o)},convertArrayValues:{attendees:({line:o})=>F(void 0,o),freeBusy:({line:o})=>Ho(void 0,o)},nonStandard:n?.nonStandard,timezones:n?.timezones})},lt=(...e)=>{let[t,r,n]=e;return C(t,r,{icsComponent:or,objectKeyMap:Oe,convertValues:{version:({line:o})=>o.value},childComponents:{timezones:{icsComponent:He,convert:o=>Vo(void 0,o,{nonStandard:n?.nonStandard})},events:{icsComponent:qe,convert:(o,{data:i})=>Bo(void 0,o,{nonStandard:n?.nonStandard,timezones:i.timezones})},todos:{icsComponent:Ge,convert:(o,{data:i})=>_o(void 0,o,{nonStandard:n?.nonStandard,timezones:i.timezones})},journals:{icsComponent:je,convert:(o,{data:i})=>$o(void 0,o,{nonStandard:n?.nonStandard,timezones:i.timezones})},freeBusy:{icsComponent:Je,convert:(o,{data:i})=>qo(void 0,o,{nonStandard:n?.nonStandard,timezones:i.timezones})}},nonStandard:n?.nonStandard})};var Wo="0.3.1",ct="icalendar:lastSync",Go={"GMT Standard Time":0,"W. Europe Standard Time":1,"Central Europe Standard Time":1,"Romance Standard Time":1,"Central European Standard Time":1,"Eastern Standard Time":-5,"Central Standard Time":-6,"Mountain Standard Time":-7,"Pacific Standard Time":-8,UTC:0,None:0};function jo(e){let t=r=>String(r).padStart(2,"0");return e.getFullYear()+"-"+t(e.getMonth()+1)+"-"+t(e.getDate())+"T"+t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+"."+String(e.getMilliseconds()).padStart(3,"0")}function ut(e,t=0){if(!e)return"";let r="";if(e.local&&typeof e.local.date=="string"?r=e.local.date:typeof e.date=="string"?r=e.date:e.date instanceof Date?r=e.date.toISOString():e instanceof Date&&(r=e.toISOString()),!r)return"";let n=new Date(r.replace("Z","")+"Z"),o=e.local?.timezone||e.timezone||"UTC",i=Go[o]??0,a=n.getTime()-i*36e5,s=new Date(a+t*36e5);return jo(s)}function Jo(e){return e&&typeof e=="object"&&"date"in e&&"type"in e}async function Zo(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return Array.from(new Uint8Array(t)).map(r=>r.toString(16).padStart(2,"0")).join("")}function de(e,t=0){if(e==null)return e;if(Jo(e))return ut(e,t);if(e instanceof Date)return ut({date:e},t);if(Array.isArray(e))return e.map(r=>de(r,t));if(typeof e=="object"){let r={};for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=de(e[n],t));return r}return e}async function Qo(){try{let e=await P.get("icalendar",{sources:[]}),t=[],r=e.tzShift??0,n=e.sources;return n&&typeof n=="object"&&(n.tzShift!==void 0&&r===0&&(r=n.tzShift),Array.isArray(n)?t=n.filter(o=>o&&typeof o.url=="string"):n.url&&(t=[n])),{sources:t,tzShift:r}}catch{return{sources:[],tzShift:0}}}async function Xo(e,t=0){let r=e.url.trim();r.includes(" ")&&(r=encodeURI(r));let n=await fetch(r);if(!n.ok)throw new Error(`HTTP ${n.status}`);let o=lt(void 0,await n.text());return o.events?await Promise.all(o.events.map(async i=>{let a=`${i.start?.date||""}${i.uid||i.summary||""}`,s=await Zo(a);return de({...i,ref:s,tag:"ical-event",sourceName:e.name},t)})):[]}async function pe(){try{let{sources:e,tzShift:t}=await Qo();if(e.length===0)return;await x.flashNotification("Syncing calendars...","info");let r=[];for(let n of e)try{let o=await Xo(n,t);r.push(...o)}catch(o){console.error(`Failed to sync ${n.name}:`,o)}await V.indexObjects("$icalendar",r),await x.flashNotification(`Synced ${r.length} events`,"info")}catch(e){console.error("Sync failed:",e)}}async function dt(){await Y.del(ct),await pe()}async function pt(){if(!await x.confirm("Clear all calendar events?"))return;let e=await K.query({prefix:["ridx","$icalendar"]}),t=[];for(let{key:r}of e)t.push(r),t.push(["idx",...r.slice(2),"$icalendar"]);t.length>0&&await K.batchDel(t),await Y.del(ct),await x.flashNotification("Calendar index cleared","info")}async function vt(){await x.flashNotification(`iCalendar Plug ${Wo}`,"info")}var ft={syncCalendars:pe,forceSync:dt,clearCache:pt,showVersion:vt},mt={name:"Library/sstent/icalendar",version:"0.3.1",author:"sstent",functions:{syncCalendars:{path:"icalendar.ts:syncCalendars",command:"iCalendar: Sync"},forceSync:{path:"icalendar.ts:forceSync",command:"iCalendar: Force Sync"},clearCache:{path:"icalendar.ts:clearCache",command:"iCalendar: Clear Cache"},showVersion:{path:"icalendar.ts:showVersion",command:"iCalendar: Show Version"}},permissions:["http"],assets:{}},si={manifest:mt,functionMapping:ft};Ee(ft,mt,self.postMessage);export{si as plug}; //# sourceMappingURL=icalendar.plug.js.map diff --git a/icalendar.plug.js.map b/icalendar.plug.js.map index 71d8bbb..b8f99a5 100644 --- a/icalendar.plug.js.map +++ b/icalendar.plug.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["https://deno.land/x/silverbullet@2.4.1/plug-api/lib/crypto.ts", "https://deno.land/x/silverbullet@2.4.1/client/lib/logger.ts", "https://deno.land/x/silverbullet@2.4.1/client/plugos/worker_runtime.ts", "../tmp/976fdaefe18a41c2.js"], - "sourcesContent": ["export function base64Decode(s: string): Uint8Array {\n const binString = atob(s);\n const len = binString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binString.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function base64Encode(buffer: Uint8Array | string): string {\n if (typeof buffer === \"string\") {\n buffer = new TextEncoder().encode(buffer);\n }\n let binary = \"\";\n const len = buffer.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary);\n}\n\nexport function base64EncodedDataUrl(\n mimeType: string,\n buffer: Uint8Array,\n): string {\n return `data:${mimeType};base64,${base64Encode(buffer)}`;\n}\n\nexport function base64DecodeDataUrl(dataUrl: string): Uint8Array {\n const b64Encoded = dataUrl.split(\",\", 2)[1];\n return base64Decode(b64Encoded);\n}\n\n/**\n * Perform sha256 hash using the browser's crypto APIs\n * Note: this will only work over HTTPS\n * @param message\n */\nexport async function hashSHA256(\n message: string | Uint8Array,\n): Promise {\n // Transform the string into an ArrayBuffer\n const encoder = new TextEncoder();\n const data: Uint8Array = typeof message === \"string\"\n ? encoder.encode(message)\n : message;\n\n // Generate the hash\n const hashBuffer = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n data as BufferSource,\n );\n\n // Transform the hash into a hex string\n return Array.from(new Uint8Array(hashBuffer)).map((b) =>\n b.toString(16).padStart(2, \"0\")\n ).join(\"\");\n}\n\n/**\n * To avoid database clashes based on space folder path name, base URLs and encryption keys we derive\n * a database name from a hash of all these combined together\n */\nexport async function deriveDbName(\n type: \"data\" | \"files\",\n spaceFolderPath: string,\n baseURI: string,\n encryptionKey?: CryptoKey,\n): Promise {\n let keyPart = \"\";\n if (encryptionKey) {\n keyPart = await exportKey(encryptionKey);\n }\n const spaceHash = await hashSHA256(\n `${spaceFolderPath}:${baseURI}:${keyPart}`,\n );\n return `sb_${type}_${spaceHash}`;\n}\n\n// Fixed counter for AES-CTR all zeroes, for determinism\nconst fixedCounter = new Uint8Array(16);\n\nexport async function encryptStringDeterministic(\n key: CryptoKey,\n clearText: string,\n): Promise {\n const encrypted = await crypto.subtle.encrypt(\n { name: \"AES-CTR\", counter: fixedCounter, length: fixedCounter.length * 8 },\n key,\n new TextEncoder().encode(clearText),\n );\n return base64Encode(new Uint8Array(encrypted));\n}\n\nexport async function decryptStringDeterministic(\n key: CryptoKey,\n cipherText: string,\n): Promise {\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-CTR\", counter: fixedCounter, length: fixedCounter.length * 8 },\n key,\n base64Decode(cipherText) as BufferSource,\n );\n return new TextDecoder().decode(decrypted);\n}\n\n// Encrypt using AES-GCM with random IV; output = IV + ciphertext\nexport async function encryptAesGcm(\n key: CryptoKey,\n data: Uint8Array,\n): Promise {\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 96-bit IV recommended for GCM\n const encryptedBuffer = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n data as BufferSource,\n );\n const encrypted = new Uint8Array(encryptedBuffer);\n\n // Prepend IV to ciphertext\n const result = new Uint8Array(iv.length + encrypted.length);\n result.set(iv, 0);\n result.set(encrypted, iv.length);\n return result;\n}\n\n// Decrypt using AES-GCM assuming input format IV + ciphertext\nexport async function decryptAesGcm(\n key: CryptoKey,\n encryptedData: Uint8Array,\n): Promise {\n const iv = encryptedData.slice(0, 12); // extract IV (first 12 bytes)\n const ciphertext = encryptedData.slice(12);\n const decryptedBuffer = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv },\n key,\n ciphertext,\n );\n return new Uint8Array(decryptedBuffer);\n}\n\nexport async function deriveCTRKeyFromPassword(\n password: string,\n salt: Uint8Array,\n): Promise {\n // Encode password to ArrayBuffer\n const passwordBytes = new TextEncoder().encode(password);\n\n // Import password as a CryptoKey\n const baseKey = await crypto.subtle.importKey(\n \"raw\",\n passwordBytes,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\", \"deriveKey\"],\n );\n\n return crypto.subtle.deriveKey(\n {\n name: \"PBKDF2\",\n salt: salt as BufferSource,\n iterations: 100000,\n hash: \"SHA-256\",\n },\n baseKey,\n {\n name: \"AES-CTR\",\n length: 256,\n },\n true, // extractable\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport function importKey(b64EncodedKey: string): Promise {\n return crypto.subtle.importKey(\n \"raw\",\n base64Decode(b64EncodedKey) as BufferSource,\n { name: \"AES-CTR\" },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport async function exportKey(ctrKey: CryptoKey): Promise {\n const key = await crypto.subtle.exportKey(\"raw\", ctrKey);\n return base64Encode(new Uint8Array(key));\n}\n\nexport async function deriveGCMKeyFromCTR(\n ctrKey: CryptoKey,\n): Promise {\n const rawKey = await crypto.subtle.exportKey(\"raw\", ctrKey);\n return crypto.subtle.importKey(\n \"raw\",\n rawKey,\n { name: \"AES-GCM\" },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n}\n", "// Logger that monkey patches console methods with prefixes and can capture logs for server transmission\n\nexport interface LogEntry {\n level: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n timestamp: number;\n message: string;\n}\n\nexport class Logger {\n private originalConsole: {\n log: typeof console.log;\n info: typeof console.info;\n warn: typeof console.warn;\n error: typeof console.error;\n debug: typeof console.debug;\n };\n public logBuffer: LogEntry[] = [];\n\n constructor(\n private prefix: string = \"\",\n private maxCaptureSize: number = 1000,\n ) {\n this.prefix = prefix;\n\n // Store original console methods\n this.originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console),\n };\n\n this.patchConsole();\n }\n\n private patchConsole(): void {\n const createPatchedMethod = (level: keyof typeof this.originalConsole) => {\n return (...args: any[]) => {\n const prefixedArgs = this.prefix ? [this.prefix, ...args] : args;\n\n // Call original console method\n this.originalConsole[level](...prefixedArgs);\n\n // Capture log if capturing is enabled\n this.captureLog(level, args);\n };\n };\n\n console.log = createPatchedMethod(\"log\");\n console.info = createPatchedMethod(\"info\");\n console.warn = createPatchedMethod(\"warn\");\n console.error = createPatchedMethod(\"error\");\n console.debug = createPatchedMethod(\"debug\");\n }\n\n private captureLog(level: LogEntry[\"level\"], args: any[]): void {\n const entry: LogEntry = {\n level,\n timestamp: Date.now(),\n message: args.map((arg) => {\n if (typeof arg === \"string\") {\n return arg;\n }\n try {\n return JSON.stringify(arg);\n } catch {\n // Handle circular references or other JSON.stringify failures\n return String(arg);\n }\n }).join(\" \"),\n };\n\n this.logBuffer.push(entry);\n\n // Maintain max capture size by removing oldest entries\n if (this.logBuffer.length > this.maxCaptureSize) {\n this.logBuffer.shift();\n }\n }\n\n /**\n * Posts all buffered logs to a server endpoint\n */\n async postToServer(logEndpoint: string, source: string) {\n const logs = this.logBuffer;\n if (logs.length > 0) {\n // Flush the buffer\n const logCopy = [...this.logBuffer];\n this.logBuffer = [];\n try {\n const resp = await fetch(logEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(logCopy.map((entry) => ({ ...entry, source }))),\n });\n if (!resp.ok) {\n throw new Error(\"Failed to post logs to server\");\n }\n } catch (e: any) {\n console.warn(\"Could not post logs to server\", e.message);\n // Put back the logs into the buffer\n this.logBuffer.unshift(...logCopy);\n }\n }\n }\n}\n\n// Global logger instance\nlet globalLogger: Logger | undefined = undefined;\n\nexport function initLogger(prefix: string = \"\"): Logger {\n globalLogger = new Logger(prefix);\n return globalLogger;\n}\n", "// This is the runtime imported from the compiled plug worker code\nimport type { ControllerMessage, WorkerMessage } from \"./protocol.ts\";\nimport type {\n ProxyFetchRequest64,\n ProxyFetchResponse64,\n} from \"./proxy_fetch.ts\";\nimport { base64Decode, base64Encode } from \"../../plug-api/lib/crypto.ts\";\nimport { initLogger } from \"../lib/logger.ts\";\n\ndeclare global {\n function syscall(name: string, ...args: any[]): Promise;\n}\n\nlet workerPostMessage = (_msg: ControllerMessage): void => {\n throw new Error(\"Not initialized yet\");\n};\n\n// Are we running in a (web) worker?\n\n// Determines if we're running in a web worker environment (Deno or browser)\n// - in a browser's main threads, typeof window is \"object\"\n// - in a browser's worker threads, typeof window === \"undefined\"\n// - in Deno's main thread typeof window === \"object\"\n// - in Deno's workers typeof window === \"undefined\n// - in Cloudflare workers typeof window === \"undefined\", but typeof globalThis.WebSocketPair is defined\nconst runningAsWebWorker = typeof window === \"undefined\" &&\n // @ts-ignore: globalThis\n typeof globalThis.WebSocketPair === \"undefined\";\n\nif (typeof Deno === \"undefined\") {\n // @ts-ignore: Deno hack\n self.Deno = {\n args: [],\n // @ts-ignore: Deno hack\n build: {\n arch: \"x86_64\",\n },\n env: {\n // @ts-ignore: Deno hack\n get() {\n },\n },\n };\n}\n\nconst pendingRequests = new Map<\n number,\n {\n resolve: (result: unknown) => void;\n reject: (e: any) => void;\n }\n>();\n\nlet syscallReqId = 0;\n\nif (runningAsWebWorker) {\n globalThis.syscall = async (name: string, ...args: any[]) => {\n return await new Promise((resolve, reject) => {\n syscallReqId++;\n pendingRequests.set(syscallReqId, { resolve, reject });\n workerPostMessage({\n type: \"sys\",\n id: syscallReqId,\n name,\n args,\n });\n });\n };\n}\n\nexport function setupMessageListener(\n // deno-lint-ignore ban-types\n functionMapping: Record,\n manifest: any,\n postMessageFn: (msg: ControllerMessage) => void,\n) {\n if (!runningAsWebWorker) {\n // Don't do any of this stuff if this is not a web worker\n // This caters to the NoSandbox run mode\n return;\n }\n workerPostMessage = postMessageFn;\n self.addEventListener(\"message\", (event: { data: WorkerMessage }) => {\n (async () => {\n const data = event.data;\n switch (data.type) {\n case \"inv\":\n {\n const fn = functionMapping[data.name!];\n if (!fn) {\n throw new Error(`Function not loaded: ${data.name}`);\n }\n try {\n const result = await Promise.resolve(fn(...(data.args || [])));\n workerPostMessage({\n type: \"invr\",\n id: data.id,\n result: result,\n } as ControllerMessage);\n } catch (e: any) {\n console.error(\n \"An exception was thrown as a result of invoking function\",\n data.name,\n \"error:\",\n e.message,\n );\n workerPostMessage({\n type: \"invr\",\n id: data.id!,\n error: e.message,\n });\n }\n }\n break;\n case \"sysr\":\n {\n const syscallId = data.id;\n const lookup = pendingRequests.get(syscallId);\n if (!lookup) {\n throw Error(\"Invalid request id\");\n }\n pendingRequests.delete(syscallId);\n if (data.error) {\n lookup.reject(new Error(data.error));\n } else {\n lookup.resolve(data.result);\n }\n }\n\n break;\n }\n })().catch(console.error);\n });\n // Signal initialization with manifest\n workerPostMessage({\n type: \"manifest\",\n manifest,\n });\n initLogger(`[${manifest.name} plug]`);\n}\n\nexport async function sandboxFetch(\n reqInfo: RequestInfo,\n options?: ProxyFetchRequest64,\n): Promise {\n if (typeof reqInfo !== \"string\") {\n const body = new Uint8Array(await reqInfo.arrayBuffer());\n const encodedBody = body.length > 0 ? base64Encode(body) : undefined;\n options = {\n method: reqInfo.method,\n headers: Object.fromEntries(reqInfo.headers.entries()),\n base64Body: encodedBody,\n };\n reqInfo = reqInfo.url;\n }\n return syscall(\"sandboxFetch.fetch\", reqInfo, options);\n}\n\n// @ts-ignore: monkey patching fetch\nglobalThis.nativeFetch = globalThis.fetch;\n\n// Monkey patch fetch()\nexport function monkeyPatchFetch() {\n // @ts-ignore: monkey patching fetch\n globalThis.fetch = async function (\n reqInfo: RequestInfo,\n init?: RequestInit,\n ): Promise {\n const encodedBody = init && init.body\n ? base64Encode(\n new Uint8Array(await (new Response(init.body)).arrayBuffer()),\n )\n : undefined;\n const r = await sandboxFetch(\n reqInfo,\n init && {\n method: init.method,\n headers: init.headers as Record,\n base64Body: encodedBody,\n },\n );\n // Casting the response to \"any\" for now, since of weird Deno typing\n return new Response(\n (r.base64Body ? base64Decode(r.base64Body) : null) as any,\n {\n status: r.status,\n headers: r.headers,\n },\n );\n };\n}\n\nif (runningAsWebWorker) {\n monkeyPatchFetch();\n}\n", "\nimport { setupMessageListener } from \"https://deno.land/x/silverbullet@2.4.1/client/plugos/worker_runtime.ts\";\n\n// Imports\n\n\n// Function mapping\nconst functionMapping = {\n\n};\n\n// Manifest\nconst manifest = {\n \"name\": \"icalendar\",\n \"version\": \"0.3.1\",\n \"author\": \"sstent\",\n \"functions\": {\n \"syncCalendars\": {\n \"command\": \"iCalendar: Sync\"\n },\n \"forceSync\": {\n \"command\": \"iCalendar: Force Sync\"\n },\n \"clearCache\": {\n \"command\": \"iCalendar: Clear Cache\"\n },\n \"showVersion\": {\n \"command\": \"iCalendar: Show Version\"\n }\n },\n \"permissions\": [\n \"http\"\n ],\n \"assets\": {}\n};\n\nexport const plug = {manifest, functionMapping};\n\nsetupMessageListener(functionMapping, manifest, self.postMessage);\n"], - "mappings": "AAAO,SAASA,EAAaC,EAAS,CACpC,IAAMC,EAAY,KAAKD,CAAA,EACjBE,EAAMD,EAAU,OAChBE,EAAQ,IAAI,WAAWD,CAAA,EAC7B,QAASE,EAAI,EAAGA,EAAIF,EAAKE,IACvBD,EAAMC,CAAA,EAAKH,EAAU,WAAWG,CAAA,EAElC,OAAOD,CACT,CAEO,SAASE,EAAaC,EAA2B,CAClD,OAAOA,GAAW,WACpBA,EAAS,IAAI,YAAA,EAAc,OAAOA,CAAA,GAEpC,IAAIC,EAAS,GACPL,EAAMI,EAAO,WACnB,QAASF,EAAI,EAAGA,EAAIF,EAAKE,IACvBG,GAAU,OAAO,aAAaD,EAAOF,CAAA,CAAE,EAEzC,OAAO,KAAKG,CAAA,CACd,CA6DA,IAAMC,EAAe,IAAI,WAAW,EAAA,ECzE7B,IAAMC,EAAN,KAAM,uBACH,gBAOD,UAEP,YACUC,EAAiB,GACjBC,EAAyB,IACjC,MAFQ,OAAAD,OACA,eAAAC,OAJH,UAAwB,CAAA,EAM7B,KAAK,OAASD,EAGd,KAAK,gBAAkB,CACrB,IAAK,QAAQ,IAAI,KAAK,OAAA,EACtB,KAAM,QAAQ,KAAK,KAAK,OAAA,EACxB,KAAM,QAAQ,KAAK,KAAK,OAAA,EACxB,MAAO,QAAQ,MAAM,KAAK,OAAA,EAC1B,MAAO,QAAQ,MAAM,KAAK,OAAA,CAC5B,EAEA,KAAK,aAAY,CACnB,CAEQ,cAAqB,CAC3B,IAAME,EAAuBC,GACpB,IAAIC,IAAA,CACT,IAAMC,EAAe,KAAK,OAAS,CAAC,KAAK,UAAWD,GAAQA,EAG5D,KAAK,gBAAgBD,CAAA,EAAM,GAAIE,CAAA,EAG/B,KAAK,WAAWF,EAAOC,CAAA,CACzB,EAGF,QAAQ,IAAMF,EAAoB,KAAA,EAClC,QAAQ,KAAOA,EAAoB,MAAA,EACnC,QAAQ,KAAOA,EAAoB,MAAA,EACnC,QAAQ,MAAQA,EAAoB,OAAA,EACpC,QAAQ,MAAQA,EAAoB,OAAA,CACtC,CAEQ,WAAWC,EAA0BC,EAAmB,CAC9D,IAAME,EAAkB,CACtB,MAAAH,EACA,UAAW,KAAK,IAAG,EACnB,QAASC,EAAK,IAAKG,GAAA,CACjB,GAAI,OAAOA,GAAQ,SACjB,OAAOA,EAET,GAAI,CACF,OAAO,KAAK,UAAUA,CAAA,CACxB,MAAQ,CAEN,OAAO,OAAOA,CAAA,CAChB,CACF,CAAA,EAAG,KAAK,GAAA,CACV,EAEA,KAAK,UAAU,KAAKD,CAAA,EAGhB,KAAK,UAAU,OAAS,KAAK,gBAC/B,KAAK,UAAU,MAAK,CAExB,CAKA,MAAM,aAAaE,EAAqBC,EAAgB,CAEtD,GADa,KAAK,UACT,OAAS,EAAG,CAEnB,IAAMC,EAAU,IAAI,KAAK,WACzB,KAAK,UAAY,CAAA,EACjB,GAAI,CAQF,GAAI,EAPS,MAAM,MAAMF,EAAa,CACpC,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAUE,EAAQ,IAAKJ,IAAW,CAAE,GAAGA,EAAO,OAAAG,CAAO,EAAC,CAAA,CACnE,CAAA,GACU,GACR,MAAM,IAAI,MAAM,+BAAA,CAEpB,OAASE,EAAQ,CACf,QAAQ,KAAK,gCAAiCA,EAAE,OAAO,EAEvD,KAAK,UAAU,QAAO,GAAID,CAAA,CAC5B,CACF,CACF,CACF,EAGIE,EAEG,SAASC,EAAWb,EAAiB,GAAE,CAC5C,OAAAY,EAAe,IAAIb,EAAOC,CAAA,EACnBY,CACT,CCvGA,IAAIE,EAAqBC,GAAA,CACvB,MAAM,IAAI,MAAM,qBAAA,CAClB,EAUMC,EAAqB,OAAO,OAAW,KAE3C,OAAO,WAAW,cAAkB,IAElC,OAAO,KAAS,MAElB,KAAK,KAAO,CACV,KAAM,CAAA,EAEN,MAAO,CACL,KAAM,QACR,EACA,IAAK,CAEH,KAAA,CACA,CACF,CACF,GAGF,IAAMC,EAAkB,IAAI,IAQxBC,EAAe,EAEfF,IACF,WAAW,QAAU,MAAOG,KAAiBC,IACpC,MAAM,IAAI,QAAQ,CAACC,EAASC,IAAA,CACjCJ,IACAD,EAAgB,IAAIC,EAAc,CAAE,QAAAG,EAAS,OAAAC,CAAO,CAAA,EACpDR,EAAkB,CAChB,KAAM,MACN,GAAII,EACJ,KAAAC,EACA,KAAAC,CACF,CAAA,CACF,CAAA,GAIG,SAASG,EAEdC,EACAC,EACAC,EAA+C,CAE1CV,IAKLF,EAAoBY,EACpB,KAAK,iBAAiB,UAAYC,GAAA,EAC/B,SAAA,CACC,IAAMC,EAAOD,EAAM,KACnB,OAAQC,EAAK,KAAI,CACf,IAAK,MACH,CACE,IAAMC,EAAKL,EAAgBI,EAAK,IAAI,EACpC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,wBAAwBD,EAAK,IAAI,EAAE,EAErD,GAAI,CACF,IAAME,EAAS,MAAM,QAAQ,QAAQD,EAAA,GAAOD,EAAK,MAAQ,CAAA,CAAE,CAAA,EAC3Dd,EAAkB,CAChB,KAAM,OACN,GAAIc,EAAK,GACT,OAAQE,CACV,CAAA,CACF,OAASC,EAAQ,CACf,QAAQ,MACN,2DACAH,EAAK,KACL,SACAG,EAAE,OAAO,EAEXjB,EAAkB,CAChB,KAAM,OACN,GAAIc,EAAK,GACT,MAAOG,EAAE,OACX,CAAA,CACF,CACF,CACA,MACF,IAAK,OACH,CACE,IAAMC,EAAYJ,EAAK,GACjBK,EAAShB,EAAgB,IAAIe,CAAA,EACnC,GAAI,CAACC,EACH,MAAM,MAAM,oBAAA,EAEdhB,EAAgB,OAAOe,CAAA,EACnBJ,EAAK,MACPK,EAAO,OAAO,IAAI,MAAML,EAAK,KAAK,CAAA,EAElCK,EAAO,QAAQL,EAAK,MAAM,CAE9B,CAEA,KACJ,CACF,GAAC,EAAI,MAAM,QAAQ,KAAK,CAC1B,CAAA,EAEAd,EAAkB,CAChB,KAAM,WACN,SAAAW,CACF,CAAA,EACAS,EAAW,IAAIT,EAAS,IAAI,QAAQ,EACtC,CAEA,eAAsBU,EACpBC,EACAC,EAA6B,CAE7B,GAAI,OAAOD,GAAY,SAAU,CAC/B,IAAME,EAAO,IAAI,WAAW,MAAMF,EAAQ,YAAW,CAAA,EAC/CG,EAAcD,EAAK,OAAS,EAAIE,EAAaF,CAAA,EAAQ,OAC3DD,EAAU,CACR,OAAQD,EAAQ,OAChB,QAAS,OAAO,YAAYA,EAAQ,QAAQ,QAAO,CAAA,EACnD,WAAYG,CACd,EACAH,EAAUA,EAAQ,GACpB,CACA,OAAO,QAAQ,qBAAsBA,EAASC,CAAA,CAChD,CAGA,WAAW,YAAc,WAAW,MAG7B,SAASI,GAAA,CAEd,WAAW,MAAQ,eACjBL,EACAM,EAAkB,CAElB,IAAMH,EAAcG,GAAQA,EAAK,KAC7BF,EACA,IAAI,WAAW,MAAO,IAAI,SAASE,EAAK,IAAI,EAAG,YAAW,CAAA,CAAA,EAE1D,OACE,EAAI,MAAMP,EACdC,EACAM,GAAQ,CACN,OAAQA,EAAK,OACb,QAASA,EAAK,QACd,WAAYH,CACd,CAAA,EAGF,OAAO,IAAI,SACR,EAAE,WAAaI,EAAa,EAAE,UAAU,EAAI,KAC7C,CACE,OAAQ,EAAE,OACV,QAAS,EAAE,OACb,CAAA,CAEJ,CACF,CAEI3B,GACFyB,EAAA,EC1LF,IAAMG,EAAkB,CAExB,EAGMC,EAAW,CACf,KAAQ,YACR,QAAW,QACX,OAAU,SACV,UAAa,CACX,cAAiB,CACf,QAAW,iBACb,EACA,UAAa,CACX,QAAW,uBACb,EACA,WAAc,CACZ,QAAW,wBACb,EACA,YAAe,CACb,QAAW,yBACb,CACF,EACA,YAAe,CACb,MACF,EACA,OAAU,CAAC,CACb,EAEaC,EAAO,CAAC,SAAAD,EAAU,gBAAAD,CAAe,EAE9CG,EAAqBH,EAAiBC,EAAU,KAAK,WAAW", - "names": ["base64Decode", "s", "binString", "len", "bytes", "i", "base64Encode", "buffer", "binary", "fixedCounter", "Logger", "prefix", "maxCaptureSize", "createPatchedMethod", "level", "args", "prefixedArgs", "entry", "arg", "logEndpoint", "source", "logCopy", "e", "globalLogger", "initLogger", "workerPostMessage", "_msg", "runningAsWebWorker", "pendingRequests", "syscallReqId", "name", "args", "resolve", "reject", "setupMessageListener", "functionMapping", "manifest", "postMessageFn", "event", "data", "fn", "result", "e", "syscallId", "lookup", "initLogger", "sandboxFetch", "reqInfo", "options", "body", "encodedBody", "base64Encode", "monkeyPatchFetch", "init", "base64Decode", "functionMapping", "manifest", "plug", "setupMessageListener"] + "sources": ["https://deno.land/x/silverbullet@2.4.1/plug-api/lib/crypto.ts", "https://deno.land/x/silverbullet@2.4.1/client/lib/logger.ts", "https://deno.land/x/silverbullet@2.4.1/client/plugos/worker_runtime.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/syscalls/editor.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/syscall.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/syscalls/client_store.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/lib/crypto.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/syscalls/datastore.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/syscalls/config.ts", "https://jsr.io/@silverbulletmd/silverbullet/2.4.1/plug-api/syscalls/index.ts", "../../node_modules/.deno/ts-ics@2.4.0/node_modules/ts-ics/dist/index.js", "../../icalendar.ts", "../../../tmp/ab8bdc28f0708b52.js"], + "sourcesContent": ["export function base64Decode(s: string): Uint8Array {\n const binString = atob(s);\n const len = binString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binString.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function base64Encode(buffer: Uint8Array | string): string {\n if (typeof buffer === \"string\") {\n buffer = new TextEncoder().encode(buffer);\n }\n let binary = \"\";\n const len = buffer.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary);\n}\n\nexport function base64EncodedDataUrl(\n mimeType: string,\n buffer: Uint8Array,\n): string {\n return `data:${mimeType};base64,${base64Encode(buffer)}`;\n}\n\nexport function base64DecodeDataUrl(dataUrl: string): Uint8Array {\n const b64Encoded = dataUrl.split(\",\", 2)[1];\n return base64Decode(b64Encoded);\n}\n\n/**\n * Perform sha256 hash using the browser's crypto APIs\n * Note: this will only work over HTTPS\n * @param message\n */\nexport async function hashSHA256(\n message: string | Uint8Array,\n): Promise {\n // Transform the string into an ArrayBuffer\n const encoder = new TextEncoder();\n const data: Uint8Array = typeof message === \"string\"\n ? encoder.encode(message)\n : message;\n\n // Generate the hash\n const hashBuffer = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n data as BufferSource,\n );\n\n // Transform the hash into a hex string\n return Array.from(new Uint8Array(hashBuffer)).map((b) =>\n b.toString(16).padStart(2, \"0\")\n ).join(\"\");\n}\n\n/**\n * To avoid database clashes based on space folder path name, base URLs and encryption keys we derive\n * a database name from a hash of all these combined together\n */\nexport async function deriveDbName(\n type: \"data\" | \"files\",\n spaceFolderPath: string,\n baseURI: string,\n encryptionKey?: CryptoKey,\n): Promise {\n let keyPart = \"\";\n if (encryptionKey) {\n keyPart = await exportKey(encryptionKey);\n }\n const spaceHash = await hashSHA256(\n `${spaceFolderPath}:${baseURI}:${keyPart}`,\n );\n return `sb_${type}_${spaceHash}`;\n}\n\n// Fixed counter for AES-CTR all zeroes, for determinism\nconst fixedCounter = new Uint8Array(16);\n\nexport async function encryptStringDeterministic(\n key: CryptoKey,\n clearText: string,\n): Promise {\n const encrypted = await crypto.subtle.encrypt(\n { name: \"AES-CTR\", counter: fixedCounter, length: fixedCounter.length * 8 },\n key,\n new TextEncoder().encode(clearText),\n );\n return base64Encode(new Uint8Array(encrypted));\n}\n\nexport async function decryptStringDeterministic(\n key: CryptoKey,\n cipherText: string,\n): Promise {\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-CTR\", counter: fixedCounter, length: fixedCounter.length * 8 },\n key,\n base64Decode(cipherText) as BufferSource,\n );\n return new TextDecoder().decode(decrypted);\n}\n\n// Encrypt using AES-GCM with random IV; output = IV + ciphertext\nexport async function encryptAesGcm(\n key: CryptoKey,\n data: Uint8Array,\n): Promise {\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 96-bit IV recommended for GCM\n const encryptedBuffer = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n data as BufferSource,\n );\n const encrypted = new Uint8Array(encryptedBuffer);\n\n // Prepend IV to ciphertext\n const result = new Uint8Array(iv.length + encrypted.length);\n result.set(iv, 0);\n result.set(encrypted, iv.length);\n return result;\n}\n\n// Decrypt using AES-GCM assuming input format IV + ciphertext\nexport async function decryptAesGcm(\n key: CryptoKey,\n encryptedData: Uint8Array,\n): Promise {\n const iv = encryptedData.slice(0, 12); // extract IV (first 12 bytes)\n const ciphertext = encryptedData.slice(12);\n const decryptedBuffer = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv },\n key,\n ciphertext,\n );\n return new Uint8Array(decryptedBuffer);\n}\n\nexport async function deriveCTRKeyFromPassword(\n password: string,\n salt: Uint8Array,\n): Promise {\n // Encode password to ArrayBuffer\n const passwordBytes = new TextEncoder().encode(password);\n\n // Import password as a CryptoKey\n const baseKey = await crypto.subtle.importKey(\n \"raw\",\n passwordBytes,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\", \"deriveKey\"],\n );\n\n return crypto.subtle.deriveKey(\n {\n name: \"PBKDF2\",\n salt: salt as BufferSource,\n iterations: 100000,\n hash: \"SHA-256\",\n },\n baseKey,\n {\n name: \"AES-CTR\",\n length: 256,\n },\n true, // extractable\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport function importKey(b64EncodedKey: string): Promise {\n return crypto.subtle.importKey(\n \"raw\",\n base64Decode(b64EncodedKey) as BufferSource,\n { name: \"AES-CTR\" },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport async function exportKey(ctrKey: CryptoKey): Promise {\n const key = await crypto.subtle.exportKey(\"raw\", ctrKey);\n return base64Encode(new Uint8Array(key));\n}\n\nexport async function deriveGCMKeyFromCTR(\n ctrKey: CryptoKey,\n): Promise {\n const rawKey = await crypto.subtle.exportKey(\"raw\", ctrKey);\n return crypto.subtle.importKey(\n \"raw\",\n rawKey,\n { name: \"AES-GCM\" },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n}\n", "// Logger that monkey patches console methods with prefixes and can capture logs for server transmission\n\nexport interface LogEntry {\n level: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n timestamp: number;\n message: string;\n}\n\nexport class Logger {\n private originalConsole: {\n log: typeof console.log;\n info: typeof console.info;\n warn: typeof console.warn;\n error: typeof console.error;\n debug: typeof console.debug;\n };\n public logBuffer: LogEntry[] = [];\n\n constructor(\n private prefix: string = \"\",\n private maxCaptureSize: number = 1000,\n ) {\n this.prefix = prefix;\n\n // Store original console methods\n this.originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console),\n };\n\n this.patchConsole();\n }\n\n private patchConsole(): void {\n const createPatchedMethod = (level: keyof typeof this.originalConsole) => {\n return (...args: any[]) => {\n const prefixedArgs = this.prefix ? [this.prefix, ...args] : args;\n\n // Call original console method\n this.originalConsole[level](...prefixedArgs);\n\n // Capture log if capturing is enabled\n this.captureLog(level, args);\n };\n };\n\n console.log = createPatchedMethod(\"log\");\n console.info = createPatchedMethod(\"info\");\n console.warn = createPatchedMethod(\"warn\");\n console.error = createPatchedMethod(\"error\");\n console.debug = createPatchedMethod(\"debug\");\n }\n\n private captureLog(level: LogEntry[\"level\"], args: any[]): void {\n const entry: LogEntry = {\n level,\n timestamp: Date.now(),\n message: args.map((arg) => {\n if (typeof arg === \"string\") {\n return arg;\n }\n try {\n return JSON.stringify(arg);\n } catch {\n // Handle circular references or other JSON.stringify failures\n return String(arg);\n }\n }).join(\" \"),\n };\n\n this.logBuffer.push(entry);\n\n // Maintain max capture size by removing oldest entries\n if (this.logBuffer.length > this.maxCaptureSize) {\n this.logBuffer.shift();\n }\n }\n\n /**\n * Posts all buffered logs to a server endpoint\n */\n async postToServer(logEndpoint: string, source: string) {\n const logs = this.logBuffer;\n if (logs.length > 0) {\n // Flush the buffer\n const logCopy = [...this.logBuffer];\n this.logBuffer = [];\n try {\n const resp = await fetch(logEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(logCopy.map((entry) => ({ ...entry, source }))),\n });\n if (!resp.ok) {\n throw new Error(\"Failed to post logs to server\");\n }\n } catch (e: any) {\n console.warn(\"Could not post logs to server\", e.message);\n // Put back the logs into the buffer\n this.logBuffer.unshift(...logCopy);\n }\n }\n }\n}\n\n// Global logger instance\nlet globalLogger: Logger | undefined = undefined;\n\nexport function initLogger(prefix: string = \"\"): Logger {\n globalLogger = new Logger(prefix);\n return globalLogger;\n}\n", "// This is the runtime imported from the compiled plug worker code\nimport type { ControllerMessage, WorkerMessage } from \"./protocol.ts\";\nimport type {\n ProxyFetchRequest64,\n ProxyFetchResponse64,\n} from \"./proxy_fetch.ts\";\nimport { base64Decode, base64Encode } from \"../../plug-api/lib/crypto.ts\";\nimport { initLogger } from \"../lib/logger.ts\";\n\ndeclare global {\n function syscall(name: string, ...args: any[]): Promise;\n}\n\nlet workerPostMessage = (_msg: ControllerMessage): void => {\n throw new Error(\"Not initialized yet\");\n};\n\n// Are we running in a (web) worker?\n\n// Determines if we're running in a web worker environment (Deno or browser)\n// - in a browser's main threads, typeof window is \"object\"\n// - in a browser's worker threads, typeof window === \"undefined\"\n// - in Deno's main thread typeof window === \"object\"\n// - in Deno's workers typeof window === \"undefined\n// - in Cloudflare workers typeof window === \"undefined\", but typeof globalThis.WebSocketPair is defined\nconst runningAsWebWorker = typeof window === \"undefined\" &&\n // @ts-ignore: globalThis\n typeof globalThis.WebSocketPair === \"undefined\";\n\nif (typeof Deno === \"undefined\") {\n // @ts-ignore: Deno hack\n self.Deno = {\n args: [],\n // @ts-ignore: Deno hack\n build: {\n arch: \"x86_64\",\n },\n env: {\n // @ts-ignore: Deno hack\n get() {\n },\n },\n };\n}\n\nconst pendingRequests = new Map<\n number,\n {\n resolve: (result: unknown) => void;\n reject: (e: any) => void;\n }\n>();\n\nlet syscallReqId = 0;\n\nif (runningAsWebWorker) {\n globalThis.syscall = async (name: string, ...args: any[]) => {\n return await new Promise((resolve, reject) => {\n syscallReqId++;\n pendingRequests.set(syscallReqId, { resolve, reject });\n workerPostMessage({\n type: \"sys\",\n id: syscallReqId,\n name,\n args,\n });\n });\n };\n}\n\nexport function setupMessageListener(\n // deno-lint-ignore ban-types\n functionMapping: Record,\n manifest: any,\n postMessageFn: (msg: ControllerMessage) => void,\n) {\n if (!runningAsWebWorker) {\n // Don't do any of this stuff if this is not a web worker\n // This caters to the NoSandbox run mode\n return;\n }\n workerPostMessage = postMessageFn;\n self.addEventListener(\"message\", (event: { data: WorkerMessage }) => {\n (async () => {\n const data = event.data;\n switch (data.type) {\n case \"inv\":\n {\n const fn = functionMapping[data.name!];\n if (!fn) {\n throw new Error(`Function not loaded: ${data.name}`);\n }\n try {\n const result = await Promise.resolve(fn(...(data.args || [])));\n workerPostMessage({\n type: \"invr\",\n id: data.id,\n result: result,\n } as ControllerMessage);\n } catch (e: any) {\n console.error(\n \"An exception was thrown as a result of invoking function\",\n data.name,\n \"error:\",\n e.message,\n );\n workerPostMessage({\n type: \"invr\",\n id: data.id!,\n error: e.message,\n });\n }\n }\n break;\n case \"sysr\":\n {\n const syscallId = data.id;\n const lookup = pendingRequests.get(syscallId);\n if (!lookup) {\n throw Error(\"Invalid request id\");\n }\n pendingRequests.delete(syscallId);\n if (data.error) {\n lookup.reject(new Error(data.error));\n } else {\n lookup.resolve(data.result);\n }\n }\n\n break;\n }\n })().catch(console.error);\n });\n // Signal initialization with manifest\n workerPostMessage({\n type: \"manifest\",\n manifest,\n });\n initLogger(`[${manifest.name} plug]`);\n}\n\nexport async function sandboxFetch(\n reqInfo: RequestInfo,\n options?: ProxyFetchRequest64,\n): Promise {\n if (typeof reqInfo !== \"string\") {\n const body = new Uint8Array(await reqInfo.arrayBuffer());\n const encodedBody = body.length > 0 ? base64Encode(body) : undefined;\n options = {\n method: reqInfo.method,\n headers: Object.fromEntries(reqInfo.headers.entries()),\n base64Body: encodedBody,\n };\n reqInfo = reqInfo.url;\n }\n return syscall(\"sandboxFetch.fetch\", reqInfo, options);\n}\n\n// @ts-ignore: monkey patching fetch\nglobalThis.nativeFetch = globalThis.fetch;\n\n// Monkey patch fetch()\nexport function monkeyPatchFetch() {\n // @ts-ignore: monkey patching fetch\n globalThis.fetch = async function (\n reqInfo: RequestInfo,\n init?: RequestInit,\n ): Promise {\n const encodedBody = init && init.body\n ? base64Encode(\n new Uint8Array(await (new Response(init.body)).arrayBuffer()),\n )\n : undefined;\n const r = await sandboxFetch(\n reqInfo,\n init && {\n method: init.method,\n headers: init.headers as Record,\n base64Body: encodedBody,\n },\n );\n // Casting the response to \"any\" for now, since of weird Deno typing\n return new Response(\n (r.base64Body ? base64Decode(r.base64Body) : null) as any,\n {\n status: r.status,\n headers: r.headers,\n },\n );\n };\n}\n\nif (runningAsWebWorker) {\n monkeyPatchFetch();\n}\n", "import { syscall } from \"../syscall.ts\";\nimport type { FilterOption, UploadFile } from \"../types/client.ts\";\nimport type { Path, Ref } from \"../lib/ref.ts\";\nimport type { PageMeta } from \"../types/index.ts\";\n\n/**\n * Exposes various editor utilities.\n * Important: These syscalls are only available in the client.\n * @module\n */\n\n/**\n * Returns the name of the page or document currently open in the editor.\n * @returns the current page name\n */\nexport function getCurrentPage(): Promise {\n return syscall(\"editor.getCurrentPage\");\n}\n\n/**\n * Returns the meta data of the page or document currently open in the editor.\n * @returns the current page meta data\n */\nexport function getCurrentPageMeta(): Promise {\n return syscall(\"editor.getCurrentPageMeta\");\n}\n\n/**\n * Returns the path of the page or document currently open in the editor.\n * @returns the current page path\n */\nexport function getCurrentPath(): Promise {\n return syscall(\"editor.getCurrentPath\");\n}\n\n/**\n * Returns the names of the pages that have been recently opened\n * @returns the names of the recently opened pages\n */\nexport function getRecentlyOpenedPages(): Promise {\n return syscall(\"editor.getRecentlyOpenedPages\");\n}\n\n/**\n * Returns the name of the currently open editor.\n * @returns the name of the current editor\n */\nexport function getCurrentEditor(): Promise {\n return syscall(\"editor.getCurrentEditor\");\n}\n\n/**\n * Returns the full text of the currently open page\n */\nexport function getText(): Promise {\n return syscall(\"editor.getText\");\n}\n\n/**\n * This updates the editor text, but in a minimal-diff way:\n * it compares the current editor text with the new text, and only sends the changes to the editor, thereby preserving cursor location\n */\nexport function setText(\n newText: string,\n isolateHistory = false,\n): Promise {\n return syscall(\"editor.setText\", newText, isolateHistory);\n}\n\n/**\n * Returns the position (in # of characters from the beginning of the file) of the cursor in the editor\n */\nexport function getCursor(): Promise {\n return syscall(\"editor.getCursor\");\n}\n\n/**\n * Returns the line number and column number of the cursor in the editor\n */\nexport function getSelection(): Promise<\n { from: number; to: number; text: string }\n> {\n return syscall(\"editor.getSelection\");\n}\n\n/**\n * Sets the position of the cursor in the editor\n * @param from the start position of the selection\n * @param to the end position of the selection\n */\nexport function setSelection(from: number, to: number): Promise {\n return syscall(\"editor.setSelection\", from, to);\n}\n\n/**\n * Invoke a client command by name\n * Note: only available on the client\n * @param name name of the command\n * @param args arguments to pass to the command\n */\nexport function invokeCommand(name: string, args?: string[]): Promise {\n return syscall(\"editor.invokeCommand\", name, args);\n}\n\n/**\n * Forces a save of the current page\n */\nexport function save(): Promise {\n return syscall(\"editor.save\");\n}\n\n/**\n * Navigates to the specified page reference\n * @param pageRef the page reference to navigate to\n * @param replaceState whether to replace the current history state in the browser history\n * @param newWindow whether to open the page in a new window\n */\nexport function navigate(\n ref: Ref | string,\n replaceState = false,\n newWindow = false,\n): Promise {\n return syscall(\"editor.navigate\", ref, replaceState, newWindow);\n}\n\n/**\n * Opens the page navigator\n * @param mode the mode to open the navigator in\n */\nexport function openPageNavigator(\n mode: \"page\" | \"meta\" | \"document\" | \"all\" = \"page\",\n): Promise {\n return syscall(\"editor.openPageNavigator\", mode);\n}\n\n/**\n * Opens the command palette\n */\nexport function openCommandPalette(): Promise {\n return syscall(\"editor.openCommandPalette\");\n}\n\n/**\n * Force reloads the current page\n */\nexport function reloadPage(): Promise {\n return syscall(\"editor.reloadPage\");\n}\n\n/**\n * Force reloads the browser UI\n */\nexport function reloadUI(): Promise {\n return syscall(\"editor.reloadUI\");\n}\n\n/**\n * Rebuilds the editor state to ensure the dispatch updates the state.\n */\nexport function rebuildEditorState(): Promise {\n return syscall(\"editor.rebuildEditorState\");\n}\n\n/**\n * Reloads the config and commands, also in the server\n */\nexport function reloadConfigAndCommands(): Promise {\n return syscall(\"editor.reloadConfigAndCommands\");\n}\n\n/**\n * Opens the specified URL in the browser\n * @param url the URL to open\n * @param existingWindow whether to open the URL in an existing window\n */\nexport function openUrl(url: string, existingWindow = false): Promise {\n return syscall(\"editor.openUrl\", url, existingWindow);\n}\n\nexport function newWindow(): Promise {\n return syscall(\"editor.newWindow\");\n}\n\n/**\n * This is calling the `go()` method from the History Web API.\n * @param delta Position in history to move to relative to the current page,\n * where a negative value moves backwards, and positive forwards\n */\nexport function goHistory(delta: number): Promise {\n return syscall(\"editor.goHistory\", delta);\n}\n\n/**\n * Force the client to download the file in dataUrl with filename as file name\n * @param filename the name of the file to download\n * @param dataUrl the dataUrl of the file to download\n */\nexport function downloadFile(filename: string, dataUrl: string): Promise {\n return syscall(\"editor.downloadFile\", filename, dataUrl);\n}\n\n/**\n * Triggers the browser's native file upload dialog/popup\n * @param accept the file types to accept\n * @param capture the capture mode for the file input\n */\nexport function uploadFile(\n accept?: string,\n capture?: string,\n): Promise {\n return syscall(\"editor.uploadFile\", accept, capture);\n}\n\n/**\n * Shows a flash notification to the user (top right corner)\n * @param message the message to show\n * @param type the type of notification to show\n */\nexport function flashNotification(\n message: string,\n type: \"info\" | \"error\" = \"info\",\n): Promise {\n return syscall(\"editor.flashNotification\", message, type);\n}\n\n/**\n * Exposes a filter box UI (similar to the page navigator and command palette)\n * @param label the label to show left of the input box\n * @param options the options to show and to filter on\n * @param helpText the help text to show below the input box\n * @param placeHolder the placeholder text to show in the input box\n */\nexport function filterBox(\n label: string,\n options: FilterOption[],\n helpText = \"\",\n placeHolder = \"\",\n): Promise {\n return syscall(\"editor.filterBox\", label, options, helpText, placeHolder);\n}\n\n/**\n * Shows a panel in the editor\n * @param id the location of the panel to show\n * @param mode the mode or \"size\" of the panel\n * @param html the html content of the panel\n * @param script the script content of the panel\n */\nexport function showPanel(\n id: \"lhs\" | \"rhs\" | \"bhs\" | \"modal\",\n mode: number,\n html: string,\n script = \"\",\n): Promise {\n return syscall(\"editor.showPanel\", id, mode, html, script);\n}\n\n/**\n * Hides a panel in the editor\n * @param id the location of the panel to hide\n */\nexport function hidePanel(\n id: \"lhs\" | \"rhs\" | \"bhs\" | \"modal\",\n): Promise {\n return syscall(\"editor.hidePanel\", id);\n}\n\nexport function showProgress(\n progressPercentage?: number,\n progressType?: string,\n): Promise {\n return syscall(\"editor.showProgress\", progressPercentage, progressType);\n}\n\n/**\n * Insert text at the specified position into the editor\n * @param text the text to insert\n * @param pos\n */\nexport function insertAtPos(text: string, pos: number): Promise {\n return syscall(\"editor.insertAtPos\", text, pos);\n}\n\n/**\n * Replace the text in the specified range in the editor\n * @param from the start position of the range\n * @param to the end position of the range\n * @param text the text to replace with\n */\nexport function replaceRange(\n from: number,\n to: number,\n text: string,\n): Promise {\n return syscall(\"editor.replaceRange\", from, to, text);\n}\n\n/**\n * Move the cursor to the specified position in the editor\n * @param pos the position to move the cursor to\n * @param center whether to center the cursor in the editor after moving\n */\nexport function moveCursor(pos: number, center = false): Promise {\n return syscall(\"editor.moveCursor\", pos, center);\n}\n\n/**\n * Move the cursor to the specified line and column in the editor\n * @param line the line number to move the cursor to\n * @param column the column number to move the cursor to\n * @param center whether to center the cursor in the editor after moving\n */\nexport function moveCursorToLine(\n line: number,\n column = 1,\n center = false,\n): Promise {\n return syscall(\"editor.moveCursorToLine\", line, column, center);\n}\n\n/**\n * Insert text at the cursor position in the editor\n * @param text the text to insert\n */\nexport function insertAtCursor(\n text: string,\n scrollIntoView = false,\n cursorPlaceHolder = false,\n): Promise {\n return syscall(\n \"editor.insertAtCursor\",\n text,\n scrollIntoView,\n cursorPlaceHolder,\n );\n}\n\n/**\n * Dispatch a CodeMirror transaction: https://codemirror.net/docs/ref/#state.Transaction\n */\nexport function dispatch(change: any): Promise {\n return syscall(\"editor.dispatch\", change);\n}\n\n/**\n * Prompt the user for text input\n * @param message the message to show in the prompt\n * @param defaultValue a default value pre-filled in the prompt\n * @returns\n */\nexport function prompt(\n message: string,\n defaultValue = \"\",\n): Promise {\n return syscall(\"editor.prompt\", message, defaultValue);\n}\n\n/**\n * Prompt the user for confirmation\n * @param message the message to show in the confirmation dialog\n * @returns\n */\nexport function confirm(\n message: string,\n): Promise {\n return syscall(\"editor.confirm\", message);\n}\n\n/**\n * Prompt the user for confirmation\n * @param message the message to show in the confirmation dialog\n * @returns\n */\nexport function alert(\n message: string,\n): Promise {\n return syscall(\"editor.alert\", message);\n}\n\n/**\n * Get the value of a UI option\n * @param key the key of the UI option to get\n * @returns\n */\nexport function getUiOption(key: string): Promise {\n return syscall(\"editor.getUiOption\", key);\n}\n\n/**\n * Set the value of a UI option\n * @param key the key of the UI option to set\n * @param value the value to set the UI option to\n */\nexport function setUiOption(key: string, value: any): Promise {\n return syscall(\"editor.setUiOption\", key, value);\n}\n\n/**\n * Perform a fold at the current cursor position\n */\nexport function fold(): Promise {\n return syscall(\"editor.fold\");\n}\n\n/**\n * Perform an unfold at the current cursor position\n */\nexport function unfold(): Promise {\n return syscall(\"editor.unfold\");\n}\n\n/**\n * Toggle the fold at the current cursor position\n */\nexport function toggleFold(): Promise {\n return syscall(\"editor.toggleFold\");\n}\n\n/**\n * Fold all code blocks in the editor\n */\nexport function foldAll(): Promise {\n return syscall(\"editor.foldAll\");\n}\n\n/**\n * Unfold all code blocks in the editor\n */\nexport function unfoldAll(): Promise {\n return syscall(\"editor.unfoldAll\");\n}\n\n/**\n * Perform an undo operation of the last edit in the editor\n */\nexport function undo(): Promise {\n return syscall(\"editor.undo\");\n}\n\n/**\n * Perform a redo operation of the last undo in the editor\n */\nexport function redo(): Promise {\n return syscall(\"editor.redo\");\n}\n\n/**\n * Open the editor's native search panel\n */\nexport function openSearchPanel(): Promise {\n return syscall(\"editor.openSearchPanel\");\n}\n\n/**\n * Copy the specified data to the clipboard\n * @param data the data to copy\n */\nexport function copyToClipboard(data: string | Blob): Promise {\n return syscall(\"editor.copyToClipboard\", data);\n}\n\n/**\n * Delete the current line in the editor\n */\nexport function deleteLine(): Promise {\n return syscall(\"editor.deleteLine\");\n}\n\n/**\n * Comment or uncomment the current line in the editor\n */\nexport function toggleComment(): Promise {\n return syscall(\"editor.toggleComment\");\n}\n\nexport function moveLineUp(): Promise {\n return syscall(\"editor.moveLineUp\");\n}\n\nexport function moveLineDown(): Promise {\n return syscall(\"editor.moveLineDown\");\n}\n\n// Vim-mode specific syscalls\n\n/**\n * Execute a Vim ex command\n * @param exCommand the ex command to execute\n */\nexport function vimEx(exCommand: string): Promise {\n return syscall(\"editor.vimEx\", exCommand);\n}\n\n/**\n * Execute a vim config using the CodeMirror Vim Mode API\n */\nexport function configureVimMode(): Promise {\n return syscall(\"editor.configureVimMode\");\n}\n\n// Document editor specific syscalls\n\n/**\n * Send a message - or event if you will - to the currently used document editor\n * @param type the message type, which can be listend to\n * @param data data attached to the message\n */\nexport function sendMessage(type: string, data?: any): Promise {\n return syscall(\"editor.sendMessage\", type, data);\n}\n\n/**\n * Check if the editor is running on a mobile device\n */\nexport function isMobile(): Promise {\n return syscall(\"editor.isMobile\");\n}\n", "// declare global {\n// function syscall(name: string, ...args: any[]): Promise;\n// }\n\n// This is the case when running tests only, so giving it a dummy syscall function\nif (typeof self === \"undefined\") {\n (self as any) = {\n syscall: () => {\n throw new Error(\"Not implemented here\");\n },\n };\n}\n\n// Late binding syscall\nexport function syscall(name: string, ...args: any[]): Promise {\n return (globalThis as any).syscall(name, ...args);\n}\n", "import { syscall } from \"../syscall.ts\";\n\n/**\n * Implements a very simple (string) key value store for the client.\n * Generally should only be used to set some client-specific states, such as preferences.\n * @module\n */\n\n/**\n * Sets a value in the client store.\n * @param key the key to set\n * @param value the value to set\n */\nexport function set(key: string, value: any): Promise {\n return syscall(\"clientStore.set\", key, value);\n}\n\n/**\n * Gets a value from the client store.\n * @param key the key to get\n * @returns the value associated with the key\n */\nexport function get(key: string): Promise {\n return syscall(\"clientStore.get\", key);\n}\n\n/**\n * Deletes a value from the client store.\n * @param key the key to delete\n */\nexport function del(key: string): Promise {\n return syscall(\"clientStore.delete\", key);\n}\n", "export function base64Decode(s: string): Uint8Array {\n const binString = atob(s);\n const len = binString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binString.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function base64Encode(buffer: Uint8Array | string): string {\n if (typeof buffer === \"string\") {\n buffer = new TextEncoder().encode(buffer);\n }\n let binary = \"\";\n const len = buffer.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary);\n}\n\nexport function base64EncodedDataUrl(\n mimeType: string,\n buffer: Uint8Array,\n): string {\n return `data:${mimeType};base64,${base64Encode(buffer)}`;\n}\n\nexport function base64DecodeDataUrl(dataUrl: string): Uint8Array {\n const b64Encoded = dataUrl.split(\",\", 2)[1];\n return base64Decode(b64Encoded);\n}\n\n/**\n * Perform sha256 hash using the browser's crypto APIs\n * Note: this will only work over HTTPS\n * @param message\n */\nexport async function hashSHA256(\n message: string | Uint8Array,\n): Promise {\n // Transform the string into an ArrayBuffer\n const encoder = new TextEncoder();\n const data: Uint8Array = typeof message === \"string\"\n ? encoder.encode(message)\n : message;\n\n // Generate the hash\n const hashBuffer = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n data as BufferSource,\n );\n\n // Transform the hash into a hex string\n return Array.from(new Uint8Array(hashBuffer)).map((b) =>\n b.toString(16).padStart(2, \"0\")\n ).join(\"\");\n}\n\n/**\n * To avoid database clashes based on space folder path name, base URLs and encryption keys we derive\n * a database name from a hash of all these combined together\n */\nexport async function deriveDbName(\n type: \"data\" | \"files\",\n spaceFolderPath: string,\n baseURI: string,\n encryptionKey?: CryptoKey,\n): Promise {\n let keyPart = \"\";\n if (encryptionKey) {\n keyPart = await exportKey(encryptionKey);\n }\n const spaceHash = await hashSHA256(\n `${spaceFolderPath}:${baseURI}:${keyPart}`,\n );\n return `sb_${type}_${spaceHash}`;\n}\n\n// Fixed counter for AES-CTR all zeroes, for determinism\nconst fixedCounter = new Uint8Array(16);\n\nexport async function encryptStringDeterministic(\n key: CryptoKey,\n clearText: string,\n): Promise {\n const encrypted = await crypto.subtle.encrypt(\n { name: \"AES-CTR\", counter: fixedCounter, length: fixedCounter.length * 8 },\n key,\n new TextEncoder().encode(clearText),\n );\n return base64Encode(new Uint8Array(encrypted));\n}\n\nexport async function decryptStringDeterministic(\n key: CryptoKey,\n cipherText: string,\n): Promise {\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-CTR\", counter: fixedCounter, length: fixedCounter.length * 8 },\n key,\n base64Decode(cipherText) as BufferSource,\n );\n return new TextDecoder().decode(decrypted);\n}\n\n// Encrypt using AES-GCM with random IV; output = IV + ciphertext\nexport async function encryptAesGcm(\n key: CryptoKey,\n data: Uint8Array,\n): Promise {\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 96-bit IV recommended for GCM\n const encryptedBuffer = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n data as BufferSource,\n );\n const encrypted = new Uint8Array(encryptedBuffer);\n\n // Prepend IV to ciphertext\n const result = new Uint8Array(iv.length + encrypted.length);\n result.set(iv, 0);\n result.set(encrypted, iv.length);\n return result;\n}\n\n// Decrypt using AES-GCM assuming input format IV + ciphertext\nexport async function decryptAesGcm(\n key: CryptoKey,\n encryptedData: Uint8Array,\n): Promise {\n const iv = encryptedData.slice(0, 12); // extract IV (first 12 bytes)\n const ciphertext = encryptedData.slice(12);\n const decryptedBuffer = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv },\n key,\n ciphertext,\n );\n return new Uint8Array(decryptedBuffer);\n}\n\nexport async function deriveCTRKeyFromPassword(\n password: string,\n salt: Uint8Array,\n): Promise {\n // Encode password to ArrayBuffer\n const passwordBytes = new TextEncoder().encode(password);\n\n // Import password as a CryptoKey\n const baseKey = await crypto.subtle.importKey(\n \"raw\",\n passwordBytes,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\", \"deriveKey\"],\n );\n\n return crypto.subtle.deriveKey(\n {\n name: \"PBKDF2\",\n salt: salt as BufferSource,\n iterations: 100000,\n hash: \"SHA-256\",\n },\n baseKey,\n {\n name: \"AES-CTR\",\n length: 256,\n },\n true, // extractable\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport function importKey(b64EncodedKey: string): Promise {\n return crypto.subtle.importKey(\n \"raw\",\n base64Decode(b64EncodedKey) as BufferSource,\n { name: \"AES-CTR\" },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport async function exportKey(ctrKey: CryptoKey): Promise {\n const key = await crypto.subtle.exportKey(\"raw\", ctrKey);\n return base64Encode(new Uint8Array(key));\n}\n\nexport async function deriveGCMKeyFromCTR(\n ctrKey: CryptoKey,\n): Promise {\n const rawKey = await crypto.subtle.exportKey(\"raw\", ctrKey);\n return crypto.subtle.importKey(\n \"raw\",\n rawKey,\n { name: \"AES-GCM\" },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n}\n", "import type { LuaCollectionQuery } from \"../../client/space_lua/query_collection.ts\";\nimport { syscall } from \"../syscall.ts\";\n\nimport type { KV, KvKey, KvQuery } from \"../types/datastore.ts\";\n\n/**\n * Exposes a key value story with query capabilities.\n * @module\n */\n\n/**\n * Sets a value in the key value store.\n * @param key the key to set\n * @param value the value to set\n */\nexport function set(key: KvKey, value: any): Promise {\n return syscall(\"datastore.set\", key, value);\n}\n\n/**\n * Sets multiple values in the key value store.\n * @param kvs the key value pairs to set\n */\nexport function batchSet(kvs: KV[]): Promise {\n return syscall(\"datastore.batchSet\", kvs);\n}\n\n/**\n * Gets a value from the key value store.\n * @param key the key to get\n * @returns the value associated with the key (or undefined if not found)\n */\nexport function get(key: KvKey): Promise {\n return syscall(\"datastore.get\", key);\n}\n\n/**\n * Gets multiple values from the key value store.\n * @param keys the keys to get\n * @returns the values associated with the keys (or undefined if not found)\n */\nexport function batchGet(keys: KvKey[]): Promise<(any | undefined)[]> {\n return syscall(\"datastore.batchGet\", keys);\n}\n\n/**\n * Deletes a value from the key value store.\n * @param key the key to delete\n */\nexport function del(key: KvKey): Promise {\n return syscall(\"datastore.delete\", key);\n}\n\n/**\n * Deletes multiple values from the key value store.\n * @param keys the keys to delete\n */\nexport function batchDel(keys: KvKey[]): Promise {\n return syscall(\"datastore.batchDelete\", keys);\n}\n\nexport function query(options: KvQuery): Promise {\n return syscall(\"datastore.query\", options);\n}\n\nexport function queryLua(\n prefix: string[],\n query: LuaCollectionQuery,\n scopeVariables?: Record,\n): Promise {\n return syscall(\"datastore.queryLua\", prefix, query, scopeVariables);\n}\n\nexport function batchDeletePrefix(prefix: KvKey): Promise {\n return syscall(\"datastore.batchDeletePrefix\", prefix);\n}\n\n/**\n * Queries the key value store and deletes all matching items\n * @param query the query to run\n * @param variables the variables that can be referenced inside the query\n */\nexport function queryDelete(\n query: KvQuery,\n variables?: Record,\n): Promise {\n return syscall(\"datastore.queryDelete\", query, variables);\n}\n\n/**\n * Lists all functions currently defined and available for use in queries\n * @returns the names of all functions in the key value store\n */\nexport function listFunctions(): Promise {\n return syscall(\"datastore.listFunctions\");\n}\n", "import { syscall } from \"../syscall.ts\";\n\n/**\n * Gets a config value by path, with support for dot notation.\n * @param path The path to get the value from\n * @param defaultValue The default value to return if the path doesn't exist\n * @returns The value at the path, or the default value\n */\nexport function get(path: string, defaultValue: T): Promise {\n return syscall(\"config.get\", path, defaultValue);\n}\n\n/**\n * Sets a config value by path, with support for dot notation.\n * @param path The path to set the value at\n * @param value The value to set\n */\nexport function set(path: string, value: T): Promise;\n/**\n * Sets multiple config values at once.\n * @param values An object containing key-value pairs to set\n */\nexport function set(values: Record): Promise;\nexport function set(\n pathOrValues: string | Record,\n value?: T,\n): Promise {\n return syscall(\"config.set\", pathOrValues, value);\n}\n\n/**\n * Inserts a config value into an array\n */\nexport function insert(\n path: string | string[],\n value: T,\n): Promise {\n return syscall(\"config.insert\", path, value);\n}\n\n/**\n * Checks if a config path exists.\n * @param path The path to check\n * @returns True if the path exists, false otherwise\n */\nexport function has(path: string): Promise {\n return syscall(\"config.has\", path);\n}\n\n/**\n * Defines a JSON schema for a configuration key.\n * The schema will be used to validate values when setting this key.\n * @param key The configuration key to define a schema for\n * @param schema The JSON schema to validate against\n */\nexport function define(key: string, schema: any): Promise {\n return syscall(\"config.define\", key, schema);\n}\n", "import type { LuaCollectionQuery } from \"../../client/space_lua/query_collection.ts\";\nimport { syscall } from \"../syscall.ts\";\nimport type { ObjectValue } from \"../types/index.ts\";\n\n/**\n * Exposes the SilverBullet object indexing system\n * @module\n */\n\n/**\n * Indexes objects for a specific page\n * @param page - The page identifier where objects will be indexed\n * @param objects - Array of objects to be indexed\n * @returns Promise that resolves when indexing is complete\n */\nexport function indexObjects(\n page: string,\n objects: ObjectValue[],\n): Promise {\n return syscall(\"index.indexObjects\", page, objects);\n}\n\n/**\n * Queries objects using a Lua-based collection query\n * @param tag - The tag to filter objects by\n * @param query - Lua query parameters to filter objects\n * @param scopedVariables - Optional variables to be used in the Lua query\n * @returns Promise that resolves with an array of matching objects\n */\nexport function queryLuaObjects(\n tag: string,\n query: LuaCollectionQuery,\n scopedVariables?: Record,\n ttlSecs?: number,\n): Promise[]> {\n return syscall(\"index.queryLuaObjects\", tag, query, scopedVariables, ttlSecs);\n}\n\n/**\n * Retrieves a specific object by its reference\n * @param page - The page identifier where the object is located\n * @param tag - The tag of the object\n * @param ref - The reference identifier of the object\n * @returns Promise that resolves with the matching object or undefined if not found\n */\nexport function getObjectByRef(\n page: string,\n tag: string,\n ref: string,\n): Promise | undefined> {\n return syscall(\"index.getObjectByRef\", page, tag, ref);\n}\n\n/**\n * Ensures that the full index is built and up-to-date\n */\nexport function ensureFullIndex(): Promise {\n return syscall(\"index.ensureFullIndex\");\n}\n", "var g=t=>Object.fromEntries(Object.entries(t).map(([e,r])=>[r,e])),I=t=>Object.keys(t);var Ce={action:\"ACTION\",description:\"DESCRIPTION\",duration:\"DURATION\",repeat:\"REPEAT\",summary:\"SUMMARY\",trigger:\"TRIGGER\",attachments:\"ATTACH\",attendees:\"ATTENDEE\"},$e=g(Ce),hn=I($e),Kn=I(Ce);var Ne={method:\"METHOD\",prodId:\"PRODID\",version:\"VERSION\",name:\"X-WR-CALNAME\"},Ze=g(Ne),Yn=I(Ze),Bn=I(Ne);var ve={alarms:\"ALARM\",categories:\"CATEGORIES\",created:\"CREATED\",description:\"DESCRIPTION\",lastModified:\"LAST-MODIFIED\",location:\"LOCATION\",exceptionDates:\"EXDATE\",recurrenceRule:\"RRULE\",stamp:\"DTSTAMP\",start:\"DTSTART\",summary:\"SUMMARY\",uid:\"UID\",timeTransparent:\"TRANSP\",url:\"URL\",end:\"DTEND\",duration:\"DURATION\",geo:\"GEO\",class:\"CLASS\",organizer:\"ORGANIZER\",priority:\"PRIORITY\",sequence:\"SEQUENCE\",status:\"STATUS\",attach:\"ATTACH\",recurrenceId:\"RECURRENCE-ID\",attendees:\"ATTENDEE\",comment:\"COMMENT\"},Xe=g(ve),Un=I(Xe),Wn=I(ve);var Ae={id:\"TZID\",lastModified:\"LAST-MODIFIED\",url:\"TZURL\"},Qe=g(Ae),wn=I(Qe),Hn=I(Ae);var be={comment:\"COMMENT\",name:\"TZNAME\",offsetFrom:\"TZOFFSETFROM\",offsetTo:\"TZOFFSETTO\",recurrenceDate:\"RDATE\",recurrenceRule:\"RRULE\",start:\"DTSTART\"},et=g(be),Zn=I(et),Xn=I(be);var xt={byDay:\"BYDAY\",byHour:\"BYHOUR\",byMinute:\"BYMINUTE\",byMonth:\"BYMONTH\",byMonthday:\"BYMONTHDAY\",bySecond:\"BYSECOND\",bySetPos:\"BYSETPOS\",byWeekNo:\"BYWEEKNO\",byYearday:\"BYYEARDAY\",count:\"COUNT\",frequency:\"FREQ\",interval:\"INTERVAL\",until:\"UNTIL\",workweekStart:\"WKST\"},tt=g(xt),to=I(tt),ro=I(xt);var Ve={categories:\"CATEGORIES\",created:\"CREATED\",description:\"DESCRIPTION\",lastModified:\"LAST-MODIFIED\",location:\"LOCATION\",exceptionDates:\"EXDATE\",recurrenceRule:\"RRULE\",stamp:\"DTSTAMP\",start:\"DTSTART\",summary:\"SUMMARY\",uid:\"UID\",url:\"URL\",duration:\"DURATION\",geo:\"GEO\",class:\"CLASS\",organizer:\"ORGANIZER\",priority:\"PRIORITY\",sequence:\"SEQUENCE\",status:\"STATUS\",attach:\"ATTACH\",recurrenceId:\"RECURRENCE-ID\",attendees:\"ATTENDEE\",comment:\"COMMENT\",completed:\"COMPLETED\",due:\"DUE\",percentComplete:\"PERCENT-COMPLETE\"},rt=g(Ve),ao=I(rt),so=I(Ve);var Me={categories:\"CATEGORIES\",created:\"CREATED\",description:\"DESCRIPTION\",lastModified:\"LAST-MODIFIED\",exceptionDates:\"EXDATE\",recurrenceRule:\"RRULE\",stamp:\"DTSTAMP\",start:\"DTSTART\",summary:\"SUMMARY\",uid:\"UID\",url:\"URL\",geo:\"GEO\",class:\"CLASS\",organizer:\"ORGANIZER\",sequence:\"SEQUENCE\",status:\"STATUS\",attach:\"ATTACH\",recurrenceId:\"RECURRENCE-ID\",attendees:\"ATTENDEE\",comment:\"COMMENT\"},nt=g(Me),io=I(nt),po=I(Me);var ze={stamp:\"DTSTAMP\",start:\"DTSTART\",uid:\"UID\",url:\"URL\",organizer:\"ORGANIZER\",attendees:\"ATTENDEE\",comment:\"COMMENT\",end:\"DTEND\",freeBusy:\"FREEBUSY\"},ot=g(ze),yo=I(ot),lo=I(ze);var at=\"BEGIN\",st=\"END\",xe=\"VCALENDAR\",X=\"VTIMEZONE\",ct=\"STANDARD\",mt=\"DAYLIGHT\",Q=\"VEVENT\",ee=\"VALARM\",te=\"VTODO\",re=\"VJOURNAL\",ne=\"VFREEBUSY\",Io=[xe,X,ct,mt,Q,ee,te,re,ne];var it=t=>new RegExp(`${at}:${t}([\\\\s\\\\S]*?)${st}:${t}`,\"g\"),St=t=>new RegExp(`${at}:${t}|${st}:${t}`,\"g\");var Dt=/\\r\\n/,Se=/\\r\\n|\\r|\\n/,Le=`\\r\n`,pt=`\n`,gt=\":\",b=\",\",Ot='\"',oe=\";\",Vo=\" \",De=\"=\",ut=75;var _e=t=>`${t}${Le}`,f=(t,e,r)=>r?e==null?\"\":_e(`${t};${r}:${e}`):_e(`${t}:${e}`),Rt=t=>_e(`BEGIN:${t}`),Ct=t=>_e(`END:${t}`);var S=t=>{if(!(t.length<1))return`${t.map(e=>`${e.key}${De}${e.value}`).join(oe)}`};var Nt=t=>{if(t.type===\"uri\"){let e=S([t.formatType&&{key:\"FMTTYPE\",value:t.formatType}].filter(r=>!!r));return f(\"ATTACH\",t.url,e)}if(t.type===\"binary\"){let e=S([t.value&&{key:\"VALUE\",value:t.value},t.encoding&&{key:\"ENCODING\",value:t.encoding}].filter(r=>!!r));return f(\"ATTACH\",t.binary,e)}throw Error(`IcsAttachment has no type! ${JSON.stringify(t)}`)};var k=(t,e)=>e?`\"MAILTO:${t}\"`:`MAILTO:${t}`;var V=(t,e)=>{let r=S([t.dir&&{key:\"DIR\",value:`\"${t.dir}\"`},t.delegatedFrom&&{key:\"DELEGATED-FROM\",value:k(t.delegatedFrom,!0)},t.member&&{key:\"MEMBER\",value:k(t.member,!0)},t.role&&{key:\"ROLE\",value:t.role},t.name&&{key:\"CN\",value:t.name},t.partstat&&{key:\"PARTSTAT\",value:t.partstat},t.sentBy&&{key:\"SENT-BY\",value:k(t.sentBy,!0)},t.rsvp!==void 0&&(t.rsvp===!0||t.rsvp===!1)&&{key:\"RSVP\",value:t.rsvp===!0?\"TRUE\":\"FALSE\"}].filter(n=>!!n));return f(e,k(t.email),r)};var M=t=>{if(Object.values(t).filter(r=>typeof r==\"number\").length===0)return;let e=\"\";return t.before&&(e+=\"-\"),e+=\"P\",t.weeks!==void 0&&(e+=`${t.weeks}W`),t.days!==void 0&&(e+=`${t.days}D`),(t.hours!==void 0||t.minutes!==void 0||t.seconds!==void 0)&&(e+=\"T\",t.hours!==void 0&&(e+=`${t.hours}H`),t.minutes!==void 0&&(e+=`${t.minutes}M`),t.seconds!==void 0&&(e+=`${t.seconds}S`)),e};var mn=Math.pow(10,8)*24*60*60*1e3,qo=-mn,vt=6048e5,At=864e5,ce=6e4,me=36e5;var pn=3600;var bt=pn*24,$o=bt*7,un=bt*365.2425,dn=un/12,Zo=dn*3,dt=Symbol.for(\"constructDateFrom\");function x(t,e){return typeof t==\"function\"?t(e):t&&typeof t==\"object\"&&dt in t?t[dt](e):t instanceof Date?new t.constructor(e):new Date(e)}function i(t,e){return x(e||t,t)}function Y(t,e,r){let n=i(t,r==null?void 0:r.in);return isNaN(e)?x((r==null?void 0:r.in)||t,NaN):(e&&n.setDate(n.getDate()+e),n)}function he(t,e,r){let n=i(t,r==null?void 0:r.in);if(isNaN(e))return x((r==null?void 0:r.in)||t,NaN);if(!e)return n;let o=n.getDate(),s=x((r==null?void 0:r.in)||t,n.getTime());s.setMonth(n.getMonth()+e+1,0);let a=s.getDate();return o>=a?s:(n.setFullYear(s.getFullYear(),s.getMonth(),o),n)}function z(t,e,r){return x((r==null?void 0:r.in)||t,+i(t)+e)}function Ke(t,e,r){return z(t,e*me,r)}var fn={};function B(){return fn}function ae(t,e){var c,m,p,d;let r=B(),n=(e==null?void 0:e.weekStartsOn)??((m=(c=e==null?void 0:e.locale)==null?void 0:c.options)==null?void 0:m.weekStartsOn)??r.weekStartsOn??((d=(p=r.locale)==null?void 0:p.options)==null?void 0:d.weekStartsOn)??0,o=i(t,e==null?void 0:e.in),s=o.getDay(),a=(stypeof n==\"object\"));return e.map(r)}function ge(t,e){let r=i(t,e==null?void 0:e.in);return r.setHours(0,0,0,0),r}function Vt(t,e,r){let[n,o]=F(r==null?void 0:r.in,t,e),s=ge(n),a=ge(o),c=+s-ft(s),m=+a-ft(a);return Math.round((c-m)/At)}function ie(t,e,r){let n=i(t,r==null?void 0:r.in);return n.setTime(n.getTime()+e*ce),n}function Pe(t,e,r){return z(t,e*1e3,r)}function j(t,e,r){return Y(t,e*7,r)}function ke(t,e,r){return he(t,e*12,r)}function pe(t,e){let r=+i(t)-+i(e);return r<0?-1:r>0?1:r}function Ye(t){return t instanceof Date||typeof t==\"object\"&&Object.prototype.toString.call(t)===\"[object Date]\"}function Be(t,e,r){let[n,o]=F(r==null?void 0:r.in,t,e),s=Mt(n,o),a=Math.abs(Vt(n,o));n.setDate(n.getDate()-s*a);let c=+(Mt(n,o)===-s),m=s*(a-c);return m===0?0:m}function Mt(t,e){let r=t.getFullYear()-e.getFullYear()||t.getMonth()-e.getMonth()||t.getDate()-e.getDate()||t.getHours()-e.getHours()||t.getMinutes()-e.getMinutes()||t.getSeconds()-e.getSeconds()||t.getMilliseconds()-e.getMilliseconds();return r<0?-1:r>0?1:r}function U(t){return e=>{let n=(t?Math[t]:Math.trunc)(e);return n===0?0:n}}function zt(t,e,r){let[n,o]=F(r==null?void 0:r.in,t,e),s=(+n-+o)/me;return U(r==null?void 0:r.roundingMethod)(s)}function Fe(t,e){return+i(t)-+i(e)}function Lt(t,e,r){let n=Fe(t,e)/ce;return U(r==null?void 0:r.roundingMethod)(n)}function yt(t,e){let r=i(t,e==null?void 0:e.in),n=r.getMonth();return r.setFullYear(r.getFullYear(),n+1,0),r.setHours(23,59,59,999),r}function _t(t,e,r){let n=Fe(t,e)/1e3;return U(r==null?void 0:r.roundingMethod)(n)}function ht(t,e,r){let n=Be(t,e,r)/7;return U(r==null?void 0:r.roundingMethod)(n)}function Kt(t,e){let[r,n]=F(t,e.start,e.end);return{start:r,end:n}}function Pt(t,e){let{start:r,end:n}=Kt(e==null?void 0:e.in,t),o=+r>+n,s=o?+r:+n,a=o?n:r;a.setHours(0,0,0,0);let c=(e==null?void 0:e.step)??1;if(!c)return[];c<0&&(c=-c,o=!o);let m=[];for(;+a<=s;)m.push(x(r,a)),a.setDate(a.getDate()+c),a.setHours(0,0,0,0);return o?m.reverse():m}function lt(t,e){let r=i(t,e==null?void 0:e.in);return r.setDate(1),r.setHours(0,0,0,0),r}function kt(t,e){let r=i(t,e==null?void 0:e.in),n=r.getFullYear();return r.setFullYear(n+1,0,0),r.setHours(23,59,59,999),r}function Yt(t,e){let r=i(t,e==null?void 0:e.in);return r.setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r}function Bt(t,e){var d,l,E,v;let r=i(t,e==null?void 0:e.in),n=r.getFullYear(),o=B(),s=(e==null?void 0:e.firstWeekContainsDate)??((l=(d=e==null?void 0:e.locale)==null?void 0:d.options)==null?void 0:l.firstWeekContainsDate)??o.firstWeekContainsDate??((v=(E=o.locale)==null?void 0:E.options)==null?void 0:v.firstWeekContainsDate)??1,a=x((e==null?void 0:e.in)||t,0);a.setFullYear(n+1,0,s),a.setHours(0,0,0,0);let c=ae(a,e),m=x((e==null?void 0:e.in)||t,0);m.setFullYear(n,0,s),m.setHours(0,0,0,0);let p=ae(m,e);return+r>=+c?n+1:+r>=+p?n:n-1}function Ft(t,e){var c,m,p,d;let r=B(),n=(e==null?void 0:e.firstWeekContainsDate)??((m=(c=e==null?void 0:e.locale)==null?void 0:c.options)==null?void 0:m.firstWeekContainsDate)??r.firstWeekContainsDate??((d=(p=r.locale)==null?void 0:p.options)==null?void 0:d.firstWeekContainsDate)??1,o=Bt(t,e),s=x((e==null?void 0:e.in)||t,0);return s.setFullYear(o,0,n),s.setHours(0,0,0,0),ae(s,e)}function jt(t,e){let r=i(t,e==null?void 0:e.in),n=+ae(r,e)-+Ft(r,e);return Math.round(n/vt)+1}function Oe(t,e){return i(t,e==null?void 0:e.in).getDay()}function je(t,e){let r=i(t,e==null?void 0:e.in),n=r.getFullYear(),o=r.getMonth(),s=x(r,0);return s.setFullYear(n,o+1,0),s.setHours(0,0,0,0),s.getDate()}function Ut(t,e){return i(t,e==null?void 0:e.in).getHours()}function Wt(t,e){return i(t,e==null?void 0:e.in).getMinutes()}function Ue(t,e){return i(t,e==null?void 0:e.in).getMonth()}function Gt(t){return i(t).getSeconds()}function Jt(t,e){return i(t,e==null?void 0:e.in).getFullYear()}function wt(t,e){return+i(t)==+i(e)}function Ht(t,e,r){let n=i(t,r==null?void 0:r.in),o=jt(n,r)-e;return n.setDate(n.getDate()-o*7),i(n,r==null?void 0:r.in)}function Re(t,e,r){var l,E,v,D;let n=B(),o=(r==null?void 0:r.weekStartsOn)??((E=(l=r==null?void 0:r.locale)==null?void 0:l.options)==null?void 0:E.weekStartsOn)??n.weekStartsOn??((D=(v=n.locale)==null?void 0:v.options)==null?void 0:D.weekStartsOn)??0,s=i(t,r==null?void 0:r.in),a=s.getDay(),m=(e%7+7)%7,p=7-o,d=e<0||e>6?e-(a+p)%7:(m+p)%7-(a+p)%7;return Y(s,d,r)}function We(t,e,r){let n=+i(t,r==null?void 0:r.in),[o,s]=[+i(e.start,r==null?void 0:r.in),+i(e.end,r==null?void 0:r.in)].sort((a,c)=>a-c);return n>=o&&n<=s}function qt(t){let e=t/me;return Math.trunc(e)}function $t(t){let e=t/ce;return Math.trunc(e)}function Zt(t,e,r){let n=i(t,r==null?void 0:r.in),o=n.getFullYear(),s=n.getDate(),a=x((r==null?void 0:r.in)||t,0);a.setFullYear(o,e,15),a.setHours(0,0,0,0);let c=je(a);return n.setMonth(e,Math.min(s,c)),n}function Xt(t,e,r){let n=i(t,r==null?void 0:r.in);return n.setDate(e),n}function Qt(t,e,r){let n=i(t,r==null?void 0:r.in);return n.setMonth(0),n.setDate(e),n}function er(t,e,r){let n=i(t,r==null?void 0:r.in);return n.setHours(e),n}function tr(t,e,r){let n=i(t,r==null?void 0:r.in);return n.setMinutes(e),n}function rr(t,e,r){let n=i(t,r==null?void 0:r.in);return n.setSeconds(e),n}function nr(t,e,r){return z(t,-e,r)}function or(t,e,r){return j(t,-e,r)}var Mc=(t,e)=>{let r=Math.abs(ht(e,t)),n=Math.abs(Be(e,t)),o=n-r*7,s=Math.abs(zt(e,t)),a=s-n*24,c=Math.abs(Lt(e,t)),m=c-s*60,d=Math.abs(_t(e,t))-c*60;return{before:t>e,weeks:r,days:o,hours:a,minutes:m,seconds:d}};var ar=(t,e)=>{let r=e.before?-1:1,n=(e.seconds||0)*r,o=(e.minutes||0)*r,s=(e.hours||0)*r,a=(e.days||0)*r,c=(e.weeks||0)*r;return j(Y(Ke(ie(Pe(t,n),o),s),a),c)};var Yc=t=>t.end?t.end.date:ar(t.start.date,t.duration);var Fc=[\"PUBLISH\"],jc=[\"2.0\"];var sr=[ct,mt];var Jc=[\"FREE\",\"BUSY\",\"BUSY-UNAVAILABLE\",\"BUSY-TENTATIVE\"];var om=[\"BASE64\"],am=[\"BINARY\"];var cm=[\"NEEDS-ACTION\",\"ACCEPTED\",\"DECLINED\",\"TENTATIVE\",\"DELEGATED\"];var im=[\"DATE\",\"DATE-TIME\"];var cr=[\"SECONDLY\",\"MINUTELY\",\"HOURLY\",\"DAILY\",\"WEEKLY\",\"MONTHLY\",\"YEARLY\"];var dm=[\"TENTATIVE\",\"CONFIRMED\",\"CANCELLED\"],fm=[\"NEEDS-ACTION\",\"COMPLETED\",\"IN-PROGRESS\",\"CANCELLED\"],ym=[\"DRAFT\",\"FINAL\",\"CANCELLED\"];var Tm=[\"START\",\"END\"];var Ge=[\"SU\",\"MO\",\"TU\",\"WE\",\"TH\",\"FR\",\"SA\"];var xm=[\"PRIVATE\",\"PUBLIC\",\"CONFIDENTIAL\"];var Dm=[\"TRANSPARENT\",\"OPAQUE\"];var ue=(t,e)=>e===void 0?!1:t>=e,mr=(t,{start:e,end:r},n)=>{if(ue(n.length,t.count))return;let o=t.frequency,s=t.interval||1;if(!o)return;let a=e;if(o===\"SECONDLY\"){for(;a{let o=r.map(({day:s,occurrence:a})=>({occurrence:a,day:Ge.indexOf(s)}));return t.frequency===\"YEARLY\"?t.byYearday||t.byMonthday?e.map(s=>s.filter(a=>o.find(({day:c})=>c===Oe(a)))):t.byWeekNo?e.map(s=>s.flatMap(a=>o.map(({day:c})=>Re(a,c,{weekStartsOn:n})))):t.byMonth?e.map(s=>s.flatMap(a=>o.flatMap(({day:c,occurrence:m})=>Tt(W(lt(a)),W(yt(a)),c,n,m)))):e.map(s=>s.flatMap(a=>o.flatMap(({day:c,occurrence:m})=>Tt(W(Yt(a)),W(kt(a)),c,n,m)))):t.frequency===\"MONTHLY\"?t.byMonthday?e.map(s=>s.filter(a=>o.find(({day:c})=>c===Oe(a)))):e.map(s=>s.flatMap(a=>o.flatMap(({day:c,occurrence:m})=>Tt(W(lt(a)),W(yt(a)),c,n,m)))):t.frequency===\"WEEKLY\"?e.map(s=>s.flatMap(a=>o.map(({day:c})=>Re(a,c,{weekStartsOn:n})))):e.map(s=>s.filter(a=>o.find(({day:c})=>c===Oe(a))))},Tt=(t,e,r,n,o)=>{if(o!==void 0){if(!(o<0)){let d=Re(t,r,{weekStartsOn:n}),l=t>d;return j(d,(o||1)-1+(l?1:0))}let c=Re(e,r,{weekStartsOn:n}),m=eW(a)).filter(a=>We(a,{start:t,end:e})).filter(a=>r===Oe(a))},W=t=>ie(t,-t.getTimezoneOffset());var pr=(t,e,r)=>t.frequency===\"YEARLY\"||t.frequency===\"MONTHLY\"||t.frequency===\"WEEKLY\"||t.frequency===\"DAILY\"?e.map(n=>n.flatMap(o=>r.map(s=>er(o,s)))):e.map(n=>n.filter(o=>r.includes(Ut(o))));var ur=(t,e,r)=>t.frequency===\"YEARLY\"||t.frequency===\"MONTHLY\"||t.frequency===\"WEEKLY\"||t.frequency===\"DAILY\"||t.frequency===\"HOURLY\"?e.map(n=>n.flatMap(o=>r.map(s=>tr(o,s)))):e.map(n=>n.filter(o=>r.includes(Wt(o))));var dr=(t,e,r)=>t.frequency===\"YEARLY\"?e.map(n=>n.flatMap(o=>r.map(s=>Zt(o,s)))):e.map(n=>n.filter(o=>r.includes(Ue(o))));var fr=(t,e,r)=>t.frequency===\"YEARLY\"||t.frequency===\"MONTHLY\"?e.map(n=>n.flatMap(o=>{let s=je(o);return r.map(a=>a>s?void 0:Xt(o,a)).filter(a=>!!a)})):t.frequency===\"WEEKLY\"?e:e.map(n=>n.filter(o=>r.includes(Ue(o))));var yr=(t,e,r)=>t.frequency===\"YEARLY\"||t.frequency===\"MONTHLY\"||t.frequency===\"WEEKLY\"||t.frequency===\"DAILY\"||t.frequency===\"HOURLY\"||t.frequency===\"MINUTELY\"?e.map(n=>n.flatMap(o=>r.map(s=>rr(o,s)))):e.map(n=>n.filter(o=>r.includes(Gt(o))));var lr=(t,e,r)=>!t.byYearday&&!t.byWeekNo&&!t.byMonthday&&!t.byMonth&&!t.byDay&&!t.byHour&&!t.byMinute&&!t.bySecond?e:e.map(n=>n.sort(pe).filter((o,s)=>r.some(a=>a>0?s===0?!1:s%a===0:s===0?n.length-1+a===0:s%(n.length-1+a)===0)));var Tr=(t,e,r,n)=>t.frequency===\"YEARLY\"?e.map(o=>o.flatMap(s=>r.map(a=>Ht(s,a,{weekStartsOn:n})))):e;var Ir=(t,e,r)=>t.frequency===\"YEARLY\"?e.map(n=>n.flatMap(o=>r.map(s=>Qt(o,s)))):t.frequency===\"MONTHLY\"||t.frequency===\"WEEKLY\"||t.frequency===\"DAILY\"?e:e.map(n=>n.filter(o=>r.includes(Jt(o))));var Er=(t,e,r)=>{let n=r;return t.byMonth&&(n=dr(t,n,t.byMonth)),t.byWeekNo&&(n=Tr(t,n,t.byWeekNo,e.weekStartsOn)),t.byYearday&&(n=Ir(t,n,t.byYearday)),t.byMonthday&&(n=fr(t,n,t.byMonthday)),t.byDay&&(n=ir(t,n,t.byDay,e.weekStartsOn)),t.byHour&&(n=pr(t,n,t.byHour)),t.byMinute&&(n=ur(t,n,t.byMinute)),t.bySecond&&(n=yr(t,n,t.bySecond)),t.bySetPos&&(n=lr(t,n,t.bySetPos)),n.map(s=>s.sort(pe).filter(a=>!(e.exceptions.length>0&&e.exceptions.some(c=>wt(c,a))||!We(a,{start:e.start,end:e.end}))))};var yn=2,xr=(t,e)=>{var p;let r=e.start,n=((p=t.until)==null?void 0:p.date)||(e==null?void 0:e.end)||ke(r,yn),o=e.exceptions||[],s=(t.workweekStart?Ge.indexOf(t.workweekStart):1)%7,a=[[r]];mr(t,{start:r,end:n},a);let c=Er(t,{start:r,end:n,exceptions:o,weekStartsOn:s},a);return t.count?c.flat().splice(0,t.count):c.flat()};var Sr=(t,e)=>e.flatMap(r=>!r.recurrenceRule||r.recurrenceRule.until&&r.recurrenceRule.until.date({...r,start:o})));var se=t=>{let e=t[0]===\"+\"?1:-1,r=Number(t.slice(1,3)),n=t.length>3?Number(t.slice(3,5)):0,o=t.length>5?Number(t.slice(5,7)):0;return((r*60+n)*60+o)*1e3*e};var Dr=(t,e)=>{let r=\"en-US\",n=new Date(e.toLocaleString(r,{timeZone:\"UTC\"}));try{return new Date(e.toLocaleString(r,{timeZone:t})).getTime()-n.getTime()}catch{return e.getTime()-n.getTime()}};var Je=(t,e,r)=>{let n=r==null?void 0:r.find(s=>s.id===e);if(n){let s=Sr(t,n.props).sort((m,p)=>pe(m.start,p.start));for(let m=0;m5?p.substring(0,5):p;return{offset:d,milliseconds:se(d)}}let a=s[s.length-1].offsetTo,c=a.length>5?a.substring(0,5):a;return{offset:c,milliseconds:se(c)}}let o=Dr(e,t);if(!Number.isNaN(o)){let s=o<0,a=Math.abs(qt(o)),c=Math.abs($t(o))-a*60,m=a.toString().length===1?`0${a}`:a.toString(),p=c.toString().length===1?`0${c}`:c.toString();return{offset:`${s?\"-\":\"+\"}${m}${p}`,milliseconds:o}}};var we=t=>{if(!Ye(t))throw Error(`Incorrect date object: ${t}`);let e=t.toISOString(),r=e.slice(0,4),n=e.slice(5,7),o=e.slice(8,10);return`${r}${n}${o}`},A=t=>{if(!Ye(t))throw Error(`Incorrect date object: ${t}`);return It(t)},gr=(t,e,r)=>{let n=e.date;if(!Ye(n))throw Error(`Incorrect date object: ${n}`);return Je(n,e.timezone,r)?It(n,!0):A(t)},It=(t,e)=>{let r=t.toISOString(),n=r.slice(0,4),o=r.slice(5,7),s=r.slice(8,10),a=r.slice(11,13),c=r.slice(14,16),m=r.slice(17,19);return`${n}${o}${s}T${a}${c}${m}${e?\"\":\"Z\"}`},Or=(t,e)=>{let r=se(e),n=z(t,r);return It(n,!0)};var Rr=t=>{var r,n;let e=S([((r=t.options)==null?void 0:r.related)&&{key:\"RELATED\",value:t.options.related}].filter(o=>!!o));if(t.type===\"absolute\")return f(\"TRIGGER\",A((n=t.value)==null?void 0:n.date));if(t.type===\"relative\")return f(\"TRIGGER\",M(t.value),e)};var He=t=>Object.keys(t);var Cr=(t,e)=>{if(!t)return\"\";let r=\"\";return Object.entries(t).forEach(([n,o])=>{let s=e==null?void 0:e[n];if(!s){r+=f(ln(n),o==null?void 0:o.toString());return}let a=s.generate(o);a&&(r+=f(s.name,a.value,a.options?S(Object.entries(a.options).map(([c,m])=>({key:c,value:m}))):void 0))}),r},ln=t=>{let e=\"X-\";for(let r of t)r===r.toUpperCase()&&(e+=\"-\"),e+=r.toUpperCase();return e};var Tn=t=>{let e=(t.match(/\\n/g)||[]).length;return t.length+e},Nr=t=>{let e=t.split(Dt),r=[];return e.forEach(n=>{if(Tn(n)<75){r.push(n);return}In(n,75).forEach(o=>{r.push(o)})}),r.join(Le)},In=(t,e)=>{let r=[],n=\"\",o=0;for(let s=0;se?(r.push(r.length===0?n:` ${n}`),n=a,o=m):(n+=a,o+=m)}return n&&r.push(r.length===0?n:` ${n}`),r};var O=(t,e)=>{let r=He(t),n=e.childComponents,o=n?He(n):[],s=e.generateArrayValues,a=s?He(s):[],c=\"\";return c+=Rt(e.icsComponent),r.forEach(m=>{if(o.includes(m)||a.includes(m)||m===\"nonStandard\")return;let p=e.icsKeyMap[m];if(!p)return;let d=t[m];if(d==null)return;let l=e.generateValues[m];if(l){c+=l({icsKey:p,value:d,key:m});return}c+=f(p,String(d))}),n&&o&&o.length>0&&o.forEach(m=>{let p=t[m];!p||!Array.isArray(p)||p.length===0||p.forEach(d=>{let l=n[m];l&&(c+=l(d))})}),s&&a&&a.length>0&&a.forEach(m=>{let p=s[m];if(!p)return;let d=e.icsKeyMap[m];if(!d)return;let l=t[m];!l||!Array.isArray(l)||l.length===0||l.forEach(E=>{c+=p({icsKey:d,value:E})})}),t.nonStandard&&(c+=Cr(t.nonStandard,e==null?void 0:e.nonStandard)),c+=Ct(e.icsComponent),e!=null&&e.skipFormatLines?c:Nr(c)};var h=(t,e)=>f(t,Math.trunc(e).toString());var vr=(t,e)=>O(t,{icsComponent:ee,icsKeyMap:Ce,generateValues:{trigger:({value:r})=>Rr(r),duration:({icsKey:r,value:n})=>f(r,M(n)),repeat:({icsKey:r,value:n})=>h(r,n)},generateArrayValues:{attendees:({value:r})=>V(r,\"ATTENDEE\"),attachments:({value:r})=>Nt(r)},nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines});var T=(t,e,r=[],n)=>{let o=S([e.type&&{key:\"VALUE\",value:e.type},e.local&&!(n!=null&&n.forceUtc)&&{key:\"TZID\",value:e.local.timezone},...r].filter(a=>!!a)),s=e.type===\"DATE\"?we(e.date):e.local&&!(n!=null&&n.forceUtc)?gr(e.date,e.local,n==null?void 0:n.timezones):A(e.date);return f(t,s,o)};var de=(t,e,r)=>T(e,t,void 0,r);var G=t=>{let e=S([t.dir&&{key:\"DIR\",value:`\"${t.dir}\"`},t.name&&{key:\"CN\",value:t.name},t.sentBy&&{key:\"SENT-BY\",value:k(t.sentBy)}].filter(r=>!!r));return f(\"ORGANIZER\",k(t.email),e)};var Ar=t=>t.occurrence?`${t.occurrence}${t.day}`:t.day;var J=t=>{var n;let e=\"\",r=S([t.byDay&&{key:\"BYDAY\",value:t.byDay.map(o=>Ar(o)).join(\",\")},t.byHour&&{key:\"BYHOUR\",value:t.byHour.join(\",\")},t.byMinute&&{key:\"BYMINUTE\",value:t.byMinute.join(\",\")},t.byMonth&&{key:\"BYMONTH\",value:t.byMonth.map(o=>o+1).join(\",\")},t.byMonthday&&{key:\"BYMONTHDAY\",value:t.byMonthday.join(\",\")},t.bySecond&&{key:\"BYSECOND\",value:t.bySecond.join(\",\")},t.bySetPos&&{key:\"BYSETPOS\",value:t.bySetPos.join(\",\")},t.byWeekNo&&{key:\"BYWEEKNO\",value:t.byWeekNo.join(\",\")},t.byYearday&&{key:\"BYYEARDAY\",value:t.byYearday.join(\",\")},t.count&&{key:\"COUNT\",value:t.count.toString()},t.frequency&&{key:\"FREQ\",value:t.frequency},t.interval&&{key:\"INTERVAL\",value:t.interval.toString()},t.until&&{key:\"UNTIL\",value:t.until.type===\"DATE\"?we(t.until.date):A(((n=t.until.local)==null?void 0:n.date)||t.until.date)},t.workweekStart&&{key:\"WKST\",value:t.workweekStart}].filter(o=>!!o));return e+=f(\"RRULE\",r),e};var fe=(t,e)=>{let r=\"\";return r+=T(\"RECURRENCE-ID\",t.value,t.range?[{key:\"RANGE\",value:t.range}]:void 0,e),r};var br=t=>t.replace(/([\\\\;,])|(\\n)/g,(e,r)=>r?`\\\\${r}`:\"\\\\n\");var R=(t,e,r)=>f(t,br(e),r?S(r):void 0);var Vr=(t,e)=>O(t,{icsComponent:Q,icsKeyMap:ve,omitGenerateKeys:[\"descriptionAltRep\"],generateValues:{stamp:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones,forceUtc:!0}),start:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),end:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),created:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),lastModified:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),categories:({icsKey:r,value:n})=>f(r,n.join(\",\")),description:({icsKey:r,value:n})=>R(r,n,t.descriptionAltRep?[{key:\"ALTREP\",value:`\"${t.descriptionAltRep}\"`}]:void 0),location:({icsKey:r,value:n})=>R(r,n),comment:({icsKey:r,value:n})=>R(r,n),summary:({icsKey:r,value:n})=>R(r,n),recurrenceRule:({value:r})=>J(r),duration:({icsKey:r,value:n})=>f(r,M(n)),organizer:({value:r})=>G(r),sequence:({icsKey:r,value:n})=>h(r,n),recurrenceId:({value:r})=>fe(r,{timezones:e==null?void 0:e.timezones})},generateArrayValues:{attendees:({value:r})=>V(r,\"ATTENDEE\"),exceptionDates:({value:r})=>de(r,\"EXDATE\",{timezones:e==null?void 0:e.timezones})},childComponents:{alarms:r=>vr(r,{nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:!0})},nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines,timezones:e==null?void 0:e.timezones});var Mr=(t,e)=>O(t,{icsComponent:t.type,icsKeyMap:be,generateValues:{start:({icsKey:r,value:n})=>f(r,Or(n,t.offsetTo)),recurrenceRule:({value:r})=>J(r),recurrenceDate:({icsKey:r,value:n})=>T(r,n)},omitGenerateKeys:[\"type\"],nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines});var zr=(t,e)=>O(t,{icsComponent:X,icsKeyMap:Ae,generateValues:{lastModified:({icsKey:r,value:n})=>f(r,A(n))},childComponents:{props:r=>Mr(r,{nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:!0})},nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines});var Lr=(t,e)=>O(t,{icsComponent:te,icsKeyMap:Ve,generateValues:{stamp:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones,forceUtc:!0}),start:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),due:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),created:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),lastModified:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),completed:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),categories:({icsKey:r,value:n})=>f(r,n.join(\",\")),description:({icsKey:r,value:n})=>R(r,n),location:({icsKey:r,value:n})=>R(r,n),comment:({icsKey:r,value:n})=>R(r,n),summary:({icsKey:r,value:n})=>R(r,n),recurrenceRule:({value:r})=>J(r),duration:({icsKey:r,value:n})=>f(r,M(n)),organizer:({value:r})=>G(r),sequence:({icsKey:r,value:n})=>h(r,n),percentComplete:({icsKey:r,value:n})=>h(r,n),recurrenceId:({value:r})=>fe(r,{timezones:e==null?void 0:e.timezones})},generateArrayValues:{attendees:({value:r})=>V(r,\"ATTENDEE\"),exceptionDates:({value:r})=>de(r,\"EXDATE\",{timezones:e==null?void 0:e.timezones})},nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines,timezones:e==null?void 0:e.timezones});var _r=(t,e)=>O(t,{icsComponent:re,icsKeyMap:Me,generateValues:{stamp:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones,forceUtc:!0}),start:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),created:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),lastModified:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),categories:({icsKey:r,value:n})=>f(r,n.join(\",\")),description:({icsKey:r,value:n})=>R(r,n),comment:({icsKey:r,value:n})=>R(r,n),summary:({icsKey:r,value:n})=>R(r,n),recurrenceRule:({value:r})=>J(r),organizer:({value:r})=>G(r),sequence:({icsKey:r,value:n})=>h(r,n),recurrenceId:({value:r})=>fe(r,{timezones:e==null?void 0:e.timezones})},generateArrayValues:{attendees:({value:r})=>V(r,\"ATTENDEE\"),exceptionDates:({value:r})=>de(r,\"EXDATE\",{timezones:e==null?void 0:e.timezones})},nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines,timezones:e==null?void 0:e.timezones});var hr=(t,e)=>{let r=t.values.map(o=>`${A(o.start)}/${o.end?A(o.end):M(o.duration)}`).join(\",\"),n=S([t.type&&{key:\"FBTYPE\",value:t.type}].filter(o=>!!o));return f(e,r,n)};var Kr=(t,e)=>O(t,{icsComponent:ne,icsKeyMap:ze,generateValues:{stamp:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones,forceUtc:!0}),start:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),end:({icsKey:r,value:n})=>T(r,n,void 0,{timezones:e==null?void 0:e.timezones}),comment:({icsKey:r,value:n})=>R(r,n),organizer:({value:r})=>G(r)},generateArrayValues:{attendees:({value:r})=>V(r,\"ATTENDEE\"),freeBusy:({value:r})=>hr(r,\"FREEBUSY\")},nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:e==null?void 0:e.skipFormatLines,timezones:e==null?void 0:e.timezones});var Vd=(t,e)=>O(t,{icsComponent:xe,icsKeyMap:Ne,generateValues:{},childComponents:{timezones:r=>zr(r,{nonStandard:e==null?void 0:e.nonStandard,skipFormatLines:!0}),events:r=>Vr(r,{skipFormatLines:!0,timezones:t.timezones,nonStandard:e==null?void 0:e.nonStandard}),todos:r=>Lr(r,{skipFormatLines:!0,timezones:t.timezones,nonStandard:e==null?void 0:e.nonStandard}),journals:r=>_r(r,{skipFormatLines:!0,timezones:t.timezones,nonStandard:e==null?void 0:e.nonStandard}),freeBusy:r=>Kr(r,{skipFormatLines:!0,timezones:t.timezones,nonStandard:e==null?void 0:e.nonStandard})},nonStandard:e==null?void 0:e.nonStandard});var u=(t,e)=>{if(t===void 0)return e;let r=t[\"~standard\"].validate(e);if(r instanceof Promise)throw new TypeError(\"Schema validation must be synchronous\");if(r.issues)throw new Error(JSON.stringify(r.issues,null,2));return r.value};var Pr=(t,e)=>{var n,o,s,a;let r=((n=e.options)==null?void 0:n.VALUE)===\"BINARY\"?{type:\"binary\",encoding:((o=e.options)==null?void 0:o.ENCODING)||\"BASE64\",binary:e.value,value:(s=e.options)==null?void 0:s.VALUE}:{type:\"uri\",url:e.value,formatType:(a=e.options)==null?void 0:a.FMTTYPE};return u(t,r)};var w=t=>t.replace(/mailto:/gi,\"\");var L=(t,e)=>{var r,n,o,s,a,c,m,p,d,l,E;return u(t,{email:w(e.value),delegatedFrom:(r=e.options)!=null&&r[\"DELEGATED-FROM\"]?w((n=e.options)==null?void 0:n[\"DELEGATED-FROM\"]):void 0,dir:(o=e.options)==null?void 0:o.DIR,member:(s=e.options)!=null&&s.MEMBER?w(e.options.MEMBER):void 0,name:(a=e.options)==null?void 0:a.CN,partstat:(c=e.options)==null?void 0:c.PARTSTAT,role:(m=e.options)==null?void 0:m.ROLE,sentBy:(p=e.options)!=null&&p[\"SENT-BY\"]?w(e.options[\"SENT-BY\"]):void 0,rsvp:(d=e.options)!=null&&d.RSVP?((l=e.options)==null?void 0:l.RSVP)===\"TRUE\"?!0:((E=e.options)==null?void 0:E.RSVP)===\"FALSE\"?!1:void 0:void 0})};var _=(t,e)=>{let r=e.value,n={};r[0]===\"-\"&&(n.before=!0,r=r.slice(1)),r=r.slice(1);let o=r.split(\"T\"),s=o[0];if(s.includes(\"D\")){let[c,m]=s.split(\"D\");n.days=Number(c),s=m}if(s.includes(\"W\")){let[c,m]=s.split(\"W\");n.weeks=Number(c),s=m}let a=o[1];if(a){if(a.includes(\"H\")){let[c,m]=a.split(\"H\");n.hours=Number(c),a=m}if(a.includes(\"M\")){let[c,m]=a.split(\"M\");n.minutes=Number(c),a=m}if(a.includes(\"S\")){let[c,m]=a.split(\"S\");n.seconds=Number(c),a=m}}return u(t,n)};var kr=(t,e)=>{let r=Number.parseInt(e.value.slice(0,4),10),n=Number.parseInt(e.value.slice(4,6),10)-1,o=Number.parseInt(e.value.slice(6,8),10),s=new Date(Date.UTC(r,n,o));return u(t,s)},H=(t,e)=>{let r=Number.parseInt(e.value.slice(0,4),10),n=Number.parseInt(e.value.slice(4,6),10)-1,o=Number.parseInt(e.value.slice(6,8),10),s=Number.parseInt(e.value.slice(9,11),10),a=Number.parseInt(e.value.slice(11,13),10),c=Number.parseInt(e.value.slice(13,15),10),m=new Date(Date.UTC(r,n,o,s,a,c));return u(t,m)},Yr=(t,e,r)=>{let n=se(r),o=H(void 0,e),s=nr(o,n);return u(t,s)};var En=(t,e)=>{var s,a,c,m,p,d;if(((s=t.options)==null?void 0:s.VALUE)===\"DATE\")return{date:kr(void 0,t),type:(a=t.options)==null?void 0:a.VALUE};let r=((c=t.options)==null?void 0:c.VALUE)||\"DATE-TIME\",n=H(void 0,t);if(!((m=t.options)!=null&&m.TZID))return{date:n,type:r};let o=Je(n,t.options.TZID,e==null?void 0:e.timezones);return o?{date:z(n,-o.milliseconds),type:r,local:(p=t.options)!=null&&p.TZID?{date:n,timezone:(d=t.options)==null?void 0:d.TZID,tzoffset:o.offset}:void 0}:{date:n,type:r}},y=(t,e,r)=>u(t,En(e,r));var Br=(t,e,r)=>{var o,s,a,c;let n=((o=e.options)==null?void 0:o.VALUE)===\"DATE-TIME\"||((s=e.options)==null?void 0:s.VALUE)===\"DATE\"?{type:\"absolute\",value:y(void 0,e,r),options:{related:(a=e.options)==null?void 0:a.RELATED}}:{type:\"relative\",value:_(void 0,e),options:{related:(c=e.options)==null?void 0:c.RELATED}};return u(t,n)};var xn=t=>t.startsWith('\"')&&t.endsWith('\"')?t.slice(1,-1):t,Et=t=>t.map(e=>{let[r,...n]=e.split(De),o=n.join(De);return{property:r,value:xn(o)}},{}),Sn=t=>t.reduce((e,r)=>(e[r.property]=r.value,e),{}),Fr=t=>Sn(Et(t));var Dn=t=>{let e=!1,r;for(let s=0;s{let{property:e,value:r}=Dn(t);if(e.includes(oe)){let[n,...o]=e.split(oe),s=Fr(o);return{property:n,line:{options:s,value:r}}}return{property:e,line:{value:r}}};var Ur=t=>/^[ \\t]/.test(t),gn=t=>/^[A-Z]+(?:-[A-Z]+)*[:;]/.test(t),Wr=t=>{let e=[],r=t.split(Se);for(;r[0]===\"\";)r.shift();let n=r.length;for(;n>0&&r[n-1]===\"\";)n-=1,r.pop();for(let o=0;oo!==\"\")};var Gr=(t,e,r)=>{if(!e)return t;let n={};return Object.entries(e).forEach(([o,s])=>{let a=Object.entries(r||{}).find(([p,d])=>d.name===o);if(!a){n[On(o)]=s.value;return}let c=a[1].convert(s),m=a[1].schema;if(!m){n[a[0]]=c;return}n[a[0]]=u(m,c)}),t.nonStandard=n,t},On=t=>{let e=t.startsWith(\"X-\")?t.slice(2):t,r=\"\",n=!1;for(let o of e)o===\"-\"?n=!0:(r+=n?o.toUpperCase():o.toLowerCase(),n=!1);return r};var Jr=t=>t.startsWith(\"X-\");var C=(t,e,r)=>{let n=e.replace(St(r==null?void 0:r.icsComponent),\"\"),o=[...new Set(Object.values(r.childComponents||{}).flatMap(({icsComponent:l})=>l))],s=Wr(o.reduce((l,E)=>l.replace(it(E),\"\"),n)),a=r.defaultValues||{},c={};s.forEach(l=>{var P,Ee;let{property:E,line:v}=jr(l);Jr(E)&&(c[E]=v);let D=r.objectKeyMap[E];if(!D)return;let Ie=(P=r.convertArrayValues)==null?void 0:P[D];if(Ie){let Z=Ie({line:v});if(!Z)return;(a[D]===void 0||a[D]===null||!Array.isArray(a[D]))&&(a[D]=[]),Array.isArray(Z)?a[D].push(...Z):a[D].push(Z);return}let qe=(Ee=r.convertValues)==null?void 0:Ee[D];if(qe){let Z=qe({line:v});if(!Z)return;a[D]=Z;return}a[D]=v.value});let m=r.childComponents,p=m?Object.keys(m||{}):[];m&&p.length>0&&p.forEach(l=>{let E=m==null?void 0:m[l];if(!E)return;let v=Array.isArray(E.icsComponent)?E.icsComponent:[E.icsComponent],D=[],Ie=[];v.forEach(P=>{Ie.push(...n.matchAll(it(P)))}),Ie.map(P=>P[0]).forEach(P=>{let Ee=E.convert(P,{data:a});Ee&&D.push(Ee)}),D.length!==0&&(a[l]=D)});let d=u(t,a);return r!=null&&r.nonStandard?Gr(d,c,r==null?void 0:r.nonStandard):d};var q=(t,e)=>{var r,n,o;return u(t,{name:(r=e.options)==null?void 0:r.CN,dir:(n=e.options)==null?void 0:n.DIR,sentBy:(o=e.options)!=null&&o[\"SENT-BY\"]?w(e.options[\"SENT-BY\"]):void 0,email:w(e.value)})};var ye=(t,e,r)=>{var n;return u(t,{value:y(void 0,e,r),range:(n=e.options)==null?void 0:n.RANGE})};var Rn=t=>{if(t.length===2)return{day:t};let r=t.slice(0,-2);return{day:t.replace(r,\"\"),occurrence:Number(r)}},wr=(t,e)=>u(t,Rn(e.value));var Hr=(t,e)=>u(t,e.value);var Cn=[\"until\"],Nn=t=>Cn.includes(t),vn=[\"bySecond\",\"byMinute\",\"byHour\",\"byMonthday\",\"byYearday\",\"byWeekNo\",\"bySetPos\"],An=t=>vn.includes(t),bn=[\"byDay\"],Vn=t=>bn.includes(t),Mn=[\"count\",\"interval\"],zn=t=>Mn.includes(t),$=(t,e,r)=>{let n={};return Et(e.value.split(oe)).forEach(s=>{let{property:a,value:c}=s,m=tt[a];if(m){if(Nn(m)){n[m]=y(void 0,{value:c,options:{VALUE:c.includes(\"T\")?\"DATE-TIME\":\"DATE\"}},{timezones:r==null?void 0:r.timezones});return}if(An(m)){n[m]=c.split(b).map(p=>Number(p));return}if(m===\"byMonth\"){n[m]=c.split(b).map(p=>Number(p)-1);return}if(Vn(m)){n[m]=c.split(b).map(p=>wr(void 0,{value:p}));return}if(zn(m)){n[m]=Number(c);return}if(m===\"frequency\"){if(!c||!cr.includes(c))return;n[m]=c;return}if(m===\"workweekStart\"){n[m]=Hr(void 0,{value:c});return}}}),u(t,n)};var le=(t,e)=>u(t,e.value);var qr=(t,e)=>u(t,e.value);var Te=(t,e,r)=>u(t,e.value.split(\",\").map(n=>y(void 0,{value:n,options:e.options},r)));var $r=(t,e)=>u(t,e.value),Zr=(t,e)=>u(t,e.value),Xr=(t,e)=>u(t,e.value);var K=(t,e)=>u(t,Number.parseInt(e.value,10));var Qr=t=>t.replace(/\\\\(([,;\\\\])|([nN]))/g,(e,r,n)=>n||`\n`);var N=(t,e)=>u(t,Qr(e.value));var en=(...t)=>{let[e,r,n]=t;return C(e,r,{icsComponent:ee,objectKeyMap:$e,convertValues:{trigger:({line:o})=>Br(void 0,o,{timezones:n==null?void 0:n.timezones}),duration:({line:o})=>_(void 0,o),repeat:({line:o})=>K(void 0,o)},convertArrayValues:{attachments:({line:o})=>Pr(void 0,o),attendees:({line:o})=>L(void 0,o)},nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})};var tn=(...t)=>{let[e,r,n]=t,o,s=C(e,r,{icsComponent:Q,objectKeyMap:Xe,convertValues:{stamp:({line:a})=>y(void 0,a,{timezones:n==null?void 0:n.timezones}),start:({line:a})=>y(void 0,a,{timezones:n==null?void 0:n.timezones}),end:({line:a})=>y(void 0,a,{timezones:n==null?void 0:n.timezones}),created:({line:a})=>y(void 0,a,{timezones:n==null?void 0:n.timezones}),lastModified:({line:a})=>y(void 0,a,{timezones:n==null?void 0:n.timezones}),categories:({line:a})=>a.value.split(b),description:({line:a})=>{var c;return(c=a.options)!=null&&c.ALTREP&&(o=a.options.ALTREP),N(void 0,a)},location:({line:a})=>N(void 0,a),comment:({line:a})=>N(void 0,a),summary:({line:a})=>N(void 0,a),recurrenceRule:({line:a})=>$(void 0,a,{timezones:n==null?void 0:n.timezones}),duration:({line:a})=>_(void 0,a),organizer:({line:a})=>q(void 0,a),sequence:({line:a})=>K(void 0,a),class:({line:a})=>le(void 0,a),recurrenceId:({line:a})=>ye(void 0,a,{timezones:n==null?void 0:n.timezones}),status:({line:a})=>$r(void 0,a),timeTransparent:({line:a})=>qr(void 0,a)},convertArrayValues:{attendees:({line:a})=>L(void 0,a),exceptionDates:({line:a})=>Te(void 0,a,{timezones:n==null?void 0:n.timezones})},childComponents:{alarms:{icsComponent:ee,convert:a=>en(void 0,a,{nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})}},timezones:n==null?void 0:n.timezones,nonStandard:n==null?void 0:n.nonStandard});return o&&(s.descriptionAltRep=o),s};var rn=(...t)=>{let[e,r,n]=t,o=r.split(\"BEGIN:\")[1].split(Se)[0],s=sr.includes(o)?o:\"STANDARD\",a=r.split(\"TZOFFSETTO:\")[1].split(Se)[0];return C(e,r,{icsComponent:s,objectKeyMap:et,defaultValues:{type:s},convertValues:{start:({line:c})=>Yr(void 0,c,a),recurrenceRule:({line:c})=>$(void 0,c,{timezones:n==null?void 0:n.timezones}),recurrenceDate:({line:c})=>y(void 0,c,{timezones:n==null?void 0:n.timezones})},nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})};var nn=(...t)=>{let[e,r,n]=t;return C(e,r,{icsComponent:X,objectKeyMap:Qe,convertValues:{lastModified:({line:o})=>H(void 0,o)},childComponents:{props:{icsComponent:[\"DAYLIGHT\",\"STANDARD\"],convert:o=>rn(void 0,o,{nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})}},nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})};var on=(...t)=>{let[e,r,n]=t;return C(e,r,{icsComponent:te,objectKeyMap:rt,convertValues:{stamp:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),start:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),due:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),created:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),lastModified:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),completed:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),categories:({line:o})=>o.value.split(b),description:({line:o})=>N(void 0,o),location:({line:o})=>N(void 0,o),comment:({line:o})=>N(void 0,o),summary:({line:o})=>N(void 0,o),recurrenceRule:({line:o})=>$(void 0,o,{timezones:n==null?void 0:n.timezones}),duration:({line:o})=>_(void 0,o),organizer:({line:o})=>q(void 0,o),sequence:({line:o})=>K(void 0,o),percentComplete:({line:o})=>K(void 0,o),class:({line:o})=>le(void 0,o),recurrenceId:({line:o})=>ye(void 0,o,{timezones:n==null?void 0:n.timezones}),status:({line:o})=>Zr(void 0,o)},convertArrayValues:{attendees:({line:o})=>L(void 0,o),exceptionDates:({line:o})=>Te(void 0,o,{timezones:n==null?void 0:n.timezones})},nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})};var an=(...t)=>{let[e,r,n]=t;return C(e,r,{icsComponent:re,objectKeyMap:nt,convertValues:{stamp:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),start:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),created:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),lastModified:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),categories:({line:o})=>o.value.split(b),description:({line:o})=>N(void 0,o),comment:({line:o})=>N(void 0,o),summary:({line:o})=>N(void 0,o),recurrenceRule:({line:o})=>$(void 0,o,{timezones:n==null?void 0:n.timezones}),organizer:({line:o})=>q(void 0,o),sequence:({line:o})=>K(void 0,o),class:({line:o})=>le(void 0,o),recurrenceId:({line:o})=>ye(void 0,o,{timezones:n==null?void 0:n.timezones}),status:({line:o})=>Xr(void 0,o)},convertArrayValues:{attendees:({line:o})=>L(void 0,o),exceptionDates:({line:o})=>Te(void 0,o,{timezones:n==null?void 0:n.timezones})},nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})};var sn=(t,e)=>{var r;return u(t,{type:(r=e.options)==null?void 0:r.FBTYPE,values:e.value.split(\",\").map(n=>{let[o,s]=n.split(\"/\"),a=H(void 0,{value:o});if(s.startsWith(\"PT\")){let m=_(void 0,{value:s});return{start:a,duration:m}}let c=H(void 0,{value:s});return{start:a,end:c}})})};var cn=(...t)=>{let[e,r,n]=t;return C(e,r,{icsComponent:ne,objectKeyMap:ot,convertValues:{stamp:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),start:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),end:({line:o})=>y(void 0,o,{timezones:n==null?void 0:n.timezones}),comment:({line:o})=>N(void 0,o),organizer:({line:o})=>q(void 0,o)},convertArrayValues:{attendees:({line:o})=>L(void 0,o),freeBusy:({line:o})=>sn(void 0,o)},nonStandard:n==null?void 0:n.nonStandard,timezones:n==null?void 0:n.timezones})};var mT=(...t)=>{let[e,r,n]=t;return C(e,r,{icsComponent:xe,objectKeyMap:Ze,convertValues:{version:({line:o})=>o.value},childComponents:{timezones:{icsComponent:X,convert:o=>nn(void 0,o,{nonStandard:n==null?void 0:n.nonStandard})},events:{icsComponent:Q,convert:(o,{data:s})=>tn(void 0,o,{nonStandard:n==null?void 0:n.nonStandard,timezones:s.timezones})},todos:{icsComponent:te,convert:(o,{data:s})=>on(void 0,o,{nonStandard:n==null?void 0:n.nonStandard,timezones:s.timezones})},journals:{icsComponent:re,convert:(o,{data:s})=>an(void 0,o,{nonStandard:n==null?void 0:n.nonStandard,timezones:s.timezones})},freeBusy:{icsComponent:ne,convert:(o,{data:s})=>cn(void 0,o,{nonStandard:n==null?void 0:n.nonStandard,timezones:s.timezones})}},nonStandard:n==null?void 0:n.nonStandard})};export{Se as BREAK_REGEX,b as COMMA,Le as CRLF_BREAK,Dt as CRLF_BREAK_REGEX,yn as DEFAULT_END_IN_YEARS,De as EQUAL_SIGN,Io as ICS_COMPONENTS,pt as LF_BREAK,ut as MAX_LINE_LENGTH,st as OBJECT_END,at as OBJECT_START,Ot as QUOTE,to as RRULE_KEYS,ro as RRULE_OBJECT_KEYS,xt as RRULE_TO_KEYS,tt as RRULE_TO_OBJECT_KEYS,oe as SEMICOLON,gt as SEPARATOR,Vo as SPACE,sr as TIMEZONE_PROP_COMPONENTS,hn as VALARM_KEYS,ee as VALARM_OBJECT_KEY,Kn as VALARM_OBJECT_KEYS,Ce as VALARM_TO_KEYS,$e as VALARM_TO_OBJECT_KEYS,Yn as VCALENDAR_KEYS,xe as VCALENDAR_OBJECT_KEY,Bn as VCALENDAR_OBJECT_KEYS,Ne as VCALENDAR_TO_KEYS,Ze as VCALENDAR_TO_OBJECT_KEYS,Un as VEVENT_KEYS,Q as VEVENT_OBJECT_KEY,Wn as VEVENT_OBJECT_KEYS,ve as VEVENT_TO_KEYS,Xe as VEVENT_TO_OBJECT_KEYS,yo as VFREEBUSY_KEYS,ne as VFREEBUSY_OBJECT_KEY,lo as VFREEBUSY_OBJECT_KEYS,ze as VFREEBUSY_TO_KEYS,ot as VFREEBUSY_TO_OBJECT_KEYS,io as VJOURNAL_KEYS,re as VJOURNAL_OBJECT_KEY,po as VJOURNAL_OBJECT_KEYS,Me as VJOURNAL_TO_KEYS,nt as VJOURNAL_TO_OBJECT_KEYS,mt as VTIMEZONE_DAYLIGHT_OBJECT_KEY,wn as VTIMEZONE_KEYS,X as VTIMEZONE_OBJECT_KEY,Hn as VTIMEZONE_OBJECT_KEYS,Zn as VTIMEZONE_PROP_KEYS,Xn as VTIMEZONE_PROP_OBJECT_KEYS,be as VTIMEZONE_PROP_TO_KEYS,et as VTIMEZONE_PROP_TO_OBJECT_KEYS,ct as VTIMEZONE_STANDARD_OBJECT_KEY,Ae as VTIMEZONE_TO_KEYS,Qe as VTIMEZONE_TO_OBJECT_KEYS,ao as VTODO_KEYS,te as VTODO_OBJECT_KEY,so as VTODO_OBJECT_KEYS,Ve as VTODO_TO_KEYS,rt as VTODO_TO_OBJECT_KEYS,om as attachmentEncodingTypes,am as attachmentValueTypes,cm as attendeePartStatusTypes,Fc as calendarMethods,jc as calendarVersions,xm as classTypes,en as convertIcsAlarm,Pr as convertIcsAttachment,L as convertIcsAttendee,mT as convertIcsCalendar,le as convertIcsClass,kr as convertIcsDate,H as convertIcsDateTime,_ as convertIcsDuration,tn as convertIcsEvent,$r as convertIcsEventStatus,Te as convertIcsExceptionDates,cn as convertIcsFreeBusy,K as convertIcsInteger,an as convertIcsJournal,Xr as convertIcsJournalStatus,Yr as convertIcsLocalOnlyDateTime,q as convertIcsOrganizer,ye as convertIcsRecurrenceId,$ as convertIcsRecurrenceRule,N as convertIcsText,y as convertIcsTimeStamp,qr as convertIcsTimeTransparent,nn as convertIcsTimezone,rn as convertIcsTimezoneProp,on as convertIcsTodo,Zr as convertIcsTodoStatus,Br as convertIcsTrigger,Hr as convertIcsWeekDay,wr as convertIcsWeekDayNumber,Gr as convertNonStandardValues,it as createGetRegex,St as createReplaceRegex,im as dateObjectTypes,dm as eventStatusTypes,xr as extendByRecurrenceRule,Sr as extendTimezoneProps,Jc as freeBusyTypes,vr as generateIcsAlarm,Nt as generateIcsAttachment,V as generateIcsAttendee,Vd as generateIcsCalendar,we as generateIcsDate,M as generateIcsDuration,Vr as generateIcsEvent,Kr as generateIcsFreeBusy,h as generateIcsInteger,_r as generateIcsJournal,gr as generateIcsLocalDateTime,Or as generateIcsLocalOnlyDateTime,k as generateIcsMail,G as generateIcsOrganizer,J as generateIcsRecurrenceRule,R as generateIcsText,T as generateIcsTimeStamp,zr as generateIcsTimezone,Mr as generateIcsTimezoneProp,Lr as generateIcsTodo,Rr as generateIcsTrigger,A as generateIcsUtcDateTime,Ar as generateIcsWeekdayNumber,Cr as generateNonStandardValues,Mc as getDurationFromInterval,Yc as getEventEnd,ar as getEventEndFromDuration,Je as getTimezoneObjectOffset,ym as journalStatusTypes,zn as recurrenceObjectKeyIsNumber,An as recurrenceObjectKeyIsNumberArray,Nn as recurrenceObjectKeyIsTimeStamp,Vn as recurrenceObjectKeyIsWeekdayNumberArray,cr as recurrenceRuleFrequencies,Dm as timeTransparentTypes,se as timeZoneOffsetToMilliseconds,fm as todoStatusTypes,Tm as triggerRelations,Ge as weekDays};\n", "import { clientStore, config, datastore, editor, index } from \"@silverbulletmd/silverbullet/syscalls\";\nimport { convertIcsCalendar, type IcsCalendar, type IcsEvent, type IcsDateObjects } from \"ts-ics\";\n\nconst VERSION = \"0.3.1\";\nconst CACHE_KEY = \"icalendar:lastSync\";\n\n// Mapping of common Windows/Outlook timezones to their standard offsets (in hours)\nconst TIMEZONE_OFFSETS: Record = {\n \"GMT Standard Time\": 0,\n \"W. Europe Standard Time\": 1,\n \"Central Europe Standard Time\": 1,\n \"Romance Standard Time\": 1,\n \"Central European Standard Time\": 1,\n \"Eastern Standard Time\": -5,\n \"Central Standard Time\": -6,\n \"Mountain Standard Time\": -7,\n \"Pacific Standard Time\": -8,\n \"UTC\": 0,\n \"None\": 0\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype DateToString = T extends Date ? string\n : T extends IcsDateObjects ? string\n : T extends object ? { [K in keyof T]: DateToString }\n : T extends Array ? Array>\n : T;\n\ninterface Source {\n url: string;\n name: string | undefined;\n}\n\ninterface PlugConfig {\n sources: any;\n cacheDuration: number | undefined;\n tzShift: number | undefined;\n}\n\ninterface CalendarEvent extends DateToString {\n ref: string;\n tag: \"ical-event\";\n sourceName: string | undefined;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nfunction toLocalISO(d: Date): string {\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return d.getFullYear() +\n \"-\" + pad(d.getMonth() + 1) +\n \"-\" + pad(d.getDate()) +\n \"T\" + pad(d.getHours()) +\n \":\" + pad(d.getMinutes()) +\n \":\" + pad(d.getSeconds()) +\n \".\" + String(d.getMilliseconds()).padStart(3, \"0\");\n}\n\nfunction processIcsDate(obj: any, manualShift = 0): string {\n if (!obj) return \"\";\n let wallTimeStr = \"\";\n if (obj.local && typeof obj.local.date === \"string\") wallTimeStr = obj.local.date;\n else if (typeof obj.date === \"string\") wallTimeStr = obj.date;\n else if (obj.date instanceof Date) wallTimeStr = obj.date.toISOString();\n else if (obj instanceof Date) wallTimeStr = obj.toISOString();\n if (!wallTimeStr) return \"\";\n \n const baseDate = new Date(wallTimeStr.replace(\"Z\", \"\") + \"Z\");\n const tzName = obj.local?.timezone || obj.timezone || \"UTC\";\n const sourceOffset = TIMEZONE_OFFSETS[tzName] ?? 0;\n \n const utcMillis = baseDate.getTime() - (sourceOffset * 3600000);\n const finalDate = new Date(utcMillis + (manualShift * 3600000));\n \n return toLocalISO(finalDate);\n}\n\nfunction isIcsDateObjects(obj: any): obj is IcsDateObjects {\n return obj && typeof obj === 'object' && ('date' in obj && 'type' in obj);\n}\n\nasync function sha256Hash(str: string): Promise {\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", (new TextEncoder()).encode(str));\n return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction convertDatesToStrings(obj: T, hourShift = 0): DateToString {\n if (obj === null || obj === undefined) return obj as DateToString;\n if (isIcsDateObjects(obj)) return processIcsDate(obj, hourShift) as DateToString;\n if (obj instanceof Date) return processIcsDate({ date: obj }, hourShift) as DateToString;\n if (Array.isArray(obj)) return obj.map(item => convertDatesToStrings(item, hourShift)) as DateToString;\n if (typeof obj === 'object') {\n const result: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) result[key] = convertDatesToStrings((obj as any)[key], hourShift);\n }\n return result as DateToString;\n }\n return obj as DateToString;\n}\n\nasync function getSources(): Promise<{ sources: Source[], tzShift: number }> {\n try {\n const rawConfig = await config.get(\"icalendar\", { sources: [] });\n let sources: Source[] = [];\n let tzShift = rawConfig.tzShift ?? 0;\n let rawSources = rawConfig.sources;\n if (rawSources && typeof rawSources === \"object\") {\n if (rawSources.tzShift !== undefined && tzShift === 0) tzShift = rawSources.tzShift;\n if (Array.isArray(rawSources)) sources = rawSources.filter(s => s && typeof s.url === \"string\");\n else if (rawSources.url) sources = [rawSources];\n }\n return { sources, tzShift };\n } catch (e) {\n return { sources: [], tzShift: 0 };\n }\n}\n\nasync function fetchAndParseCalendar(source: Source, hourShift = 0): Promise {\n let url = source.url.trim();\n if (url.includes(\" \")) url = encodeURI(url);\n const response = await fetch(url);\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const calendar = convertIcsCalendar(undefined, await response.text());\n if (!calendar.events) return [];\n return await Promise.all(calendar.events.map(async (icsEvent: IcsEvent): Promise => {\n const uniqueKey = `${icsEvent.start?.date || ''}${icsEvent.uid || icsEvent.summary || ''}`;\n const ref = await sha256Hash(uniqueKey);\n return convertDatesToStrings({ ...icsEvent, ref, tag: \"ical-event\" as const, sourceName: source.name }, hourShift);\n }));\n}\n\n// ============================================================================\n// Public Commands\n// ============================================================================\n\nexport async function syncCalendars() {\n try {\n const { sources, tzShift } = await getSources();\n if (sources.length === 0) return;\n await editor.flashNotification(\"Syncing calendars...\", \"info\");\n const allEvents: CalendarEvent[] = [];\n for (const source of sources) {\n try {\n const events = await fetchAndParseCalendar(source, tzShift);\n allEvents.push(...events);\n } catch (err) {\n console.error(`Failed to sync ${source.name}:`, err);\n }\n }\n await index.indexObjects(\"$icalendar\", allEvents);\n await editor.flashNotification(`Synced ${allEvents.length} events`, \"info\");\n } catch (err) {\n console.error(\"Sync failed:\", err);\n }\n}\n\nexport async function forceSync() {\n await clientStore.del(CACHE_KEY);\n await syncCalendars();\n}\n\nexport async function clearCache() {\n if (!await editor.confirm(\"Clear all calendar events?\")) return;\n const pageKeys = await datastore.query({ prefix: [\"ridx\", \"$icalendar\"] });\n const allKeys: any[] = [];\n for (const { key } of pageKeys) {\n allKeys.push(key);\n allKeys.push([\"idx\", ...key.slice(2), \"$icalendar\"]);\n }\n if (allKeys.length > 0) await datastore.batchDel(allKeys);\n await clientStore.del(CACHE_KEY);\n await editor.flashNotification(\"Calendar index cleared\", \"info\");\n}\n\nexport async function showVersion() {\n await editor.flashNotification(`iCalendar Plug ${VERSION}`, \"info\");\n}\n", "\nimport { setupMessageListener } from \"https://deno.land/x/silverbullet@2.4.1/client/plugos/worker_runtime.ts\";\n\n// Imports\nimport {syncCalendars as syncCalendars} from \"file:///app/icalendar.ts\";\nimport {forceSync as forceSync} from \"file:///app/icalendar.ts\";\nimport {clearCache as clearCache} from \"file:///app/icalendar.ts\";\nimport {showVersion as showVersion} from \"file:///app/icalendar.ts\";\n\n\n// Function mapping\nconst functionMapping = {\n syncCalendars: syncCalendars,\n forceSync: forceSync,\n clearCache: clearCache,\n showVersion: showVersion,\n\n};\n\n// Manifest\nconst manifest = {\n \"name\": \"Library/sstent/icalendar\",\n \"version\": \"0.3.1\",\n \"author\": \"sstent\",\n \"functions\": {\n \"syncCalendars\": {\n \"path\": \"icalendar.ts:syncCalendars\",\n \"command\": \"iCalendar: Sync\"\n },\n \"forceSync\": {\n \"path\": \"icalendar.ts:forceSync\",\n \"command\": \"iCalendar: Force Sync\"\n },\n \"clearCache\": {\n \"path\": \"icalendar.ts:clearCache\",\n \"command\": \"iCalendar: Clear Cache\"\n },\n \"showVersion\": {\n \"path\": \"icalendar.ts:showVersion\",\n \"command\": \"iCalendar: Show Version\"\n }\n },\n \"permissions\": [\n \"http\"\n ],\n \"assets\": {}\n};\n\nexport const plug = {manifest, functionMapping};\n\nsetupMessageListener(functionMapping, manifest, self.postMessage);\n"], + "mappings": "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", + "names": ["base64Decode", "s", "binString", "len", "bytes", "i", "base64Encode", "buffer", "binary", "fixedCounter", "Logger", "prefix", "maxCaptureSize", "createPatchedMethod", "level", "args", "prefixedArgs", "entry", "arg", "logEndpoint", "source", "logCopy", "e", "globalLogger", "initLogger", "workerPostMessage", "_msg", "runningAsWebWorker", "pendingRequests", "syscallReqId", "name", "args", "resolve", "reject", "setupMessageListener", "functionMapping", "manifest", "postMessageFn", "event", "data", "fn", "result", "e", "syscallId", "lookup", "initLogger", "sandboxFetch", "reqInfo", "options", "body", "encodedBody", "base64Encode", "monkeyPatchFetch", "init", "r", "base64Decode", "editor_exports", "__export", "alert", "configureVimMode", "confirm", "copyToClipboard", "deleteLine", "dispatch", "downloadFile", "filterBox", "flashNotification", "fold", "foldAll", "getCurrentEditor", "getCurrentPage", "getCurrentPageMeta", "getCurrentPath", "getCursor", "getRecentlyOpenedPages", "getSelection", "getText", "getUiOption", "goHistory", "hidePanel", "insertAtCursor", "insertAtPos", "invokeCommand", "isMobile", "moveCursor", "moveCursorToLine", "moveLineDown", "moveLineUp", "navigate", "newWindow", "openCommandPalette", "openPageNavigator", "openSearchPanel", "openUrl", "prompt", "rebuildEditorState", "redo", "reloadConfigAndCommands", "reloadPage", "reloadUI", "replaceRange", "save", "sendMessage", "setSelection", "setText", "setUiOption", "showPanel", "showProgress", "toggleComment", "toggleFold", "undo", "unfold", "unfoldAll", "uploadFile", "vimEx", "syscall", "name", "args", "getCurrentPage", "syscall", "getCurrentPageMeta", "getCurrentPath", "getRecentlyOpenedPages", "getCurrentEditor", "getText", "setText", "newText", "isolateHistory", "getCursor", "getSelection", "setSelection", "from", "to", "invokeCommand", "name", "args", "save", "navigate", "ref", "replaceState", "newWindow", "openPageNavigator", "mode", "openCommandPalette", "reloadPage", "reloadUI", "rebuildEditorState", "reloadConfigAndCommands", "openUrl", "url", "existingWindow", "goHistory", "delta", "downloadFile", "filename", "dataUrl", "uploadFile", "accept", "capture", "flashNotification", "message", "type", "filterBox", "label", "options", "helpText", "placeHolder", "showPanel", "id", "html", "script", "hidePanel", "showProgress", "progressPercentage", "progressType", "insertAtPos", "text", "pos", "replaceRange", "moveCursor", "center", "moveCursorToLine", "line", "column", "insertAtCursor", "scrollIntoView", "cursorPlaceHolder", "dispatch", "change", "prompt", "defaultValue", "confirm", "alert", "getUiOption", "key", "setUiOption", "value", "fold", "unfold", "toggleFold", "foldAll", "unfoldAll", "undo", "redo", "openSearchPanel", "copyToClipboard", "data", "deleteLine", "toggleComment", "moveLineUp", "moveLineDown", "vimEx", "exCommand", "configureVimMode", "sendMessage", "isMobile", "client_store_exports", "__export", "del", "get", "set", "set", "key", "value", "syscall", "get", "del", "fixedCounter", "datastore_exports", "__export", "batchDel", "batchDeletePrefix", "batchGet", "batchSet", "del", "get", "listFunctions", "query", "queryDelete", "queryLua", "set", "set", "key", "value", "syscall", "batchSet", "kvs", "get", "batchGet", "keys", "del", "batchDel", "query", "options", "queryLua", "prefix", "scopeVariables", "batchDeletePrefix", "queryDelete", "variables", "listFunctions", "config_exports", "__export", "define", "get", "has", "insert", "set", "get", "path", "defaultValue", "syscall", "set", "pathOrValues", "value", "insert", "has", "define", "key", "schema", "syscalls_exports", "__export", "ensureFullIndex", "getObjectByRef", "indexObjects", "queryLuaObjects", "indexObjects", "page", "objects", "syscall", "queryLuaObjects", "tag", "query", "scopedVariables", "ttlSecs", "getObjectByRef", "ref", "ensureFullIndex", "g", "t", "e", "I", "$e", "hn", "Kn", "Ne", "Ze", "Yn", "Bn", "ve", "Xe", "Un", "Wn", "Ae", "Qe", "wn", "Hn", "be", "et", "Zn", "Xn", "xt", "tt", "to", "ro", "Ve", "rt", "ao", "so", "Me", "nt", "io", "po", "ze", "ot", "yo", "lo", "at", "st", "xe", "X", "ct", "mt", "Q", "ee", "te", "re", "ne", "it", "t", "at", "st", "St", "Se", "pt", "gt", "b", "Ot", "oe", "De", "mn", "qo", "vt", "ce", "me", "pn", "bt", "$o", "un", "dn", "Zo", "dt", "x", "t", "e", "i", "Y", "he", "s", "z", "Ke", "fn", "B", "ae", "c", "m", "p", "d", "r", "n", "o", "a", "F", "t", "e", "x", "ge", "i", "ie", "t", "e", "i", "ce", "Pe", "z", "j", "Y", "ke", "he", "pe", "yt", "t", "e", "i", "Kt", "t", "e", "F", "Pt", "s", "c", "m", "x", "lt", "i", "kt", "Yt", "Bt", "d", "l", "E", "v", "r", "n", "o", "B", "a", "ae", "p", "Ft", "jt", "vt", "Oe", "je", "Ut", "Wt", "Ue", "Gt", "Jt", "wt", "Ht", "Re", "D", "Y", "We", "qt", "me", "$t", "ce", "Zt", "Xt", "Qt", "er", "tr", "rr", "nr", "z", "or", "j", "sr", "ct", "mt", "cr", "Ge", "ue", "t", "e", "mr", "s", "Pe", "ie", "Ke", "Y", "j", "he", "ke", "ir", "Ge", "c", "Oe", "Re", "m", "Tt", "W", "lt", "yt", "Yt", "kt", "d", "l", "ge", "or", "Pt", "a", "We", "pr", "er", "Ut", "ur", "tr", "Wt", "dr", "Zt", "Ue", "fr", "je", "Xt", "yr", "rr", "Gt", "lr", "pe", "Tr", "Ht", "Ir", "Qt", "Jt", "Er", "wt", "yn", "xr", "p", "r", "n", "o", "Sr", "se", "Dr", "Je", "qt", "$t", "u", "t", "e", "Pr", "n", "o", "s", "a", "r", "w", "L", "c", "m", "p", "d", "l", "E", "_", "kr", "H", "Yr", "se", "nr", "En", "Je", "z", "y", "Br", "xn", "Et", "De", "Sn", "Fr", "Dn", "Ot", "gt", "jr", "oe", "Ur", "gn", "Wr", "Se", "pt", "Gr", "On", "Jr", "St", "it", "P", "Ee", "v", "D", "Ie", "Z", "qe", "q", "ye", "Rn", "wr", "Hr", "Cn", "Nn", "vn", "An", "bn", "Vn", "Mn", "zn", "$", "tt", "b", "cr", "le", "qr", "Te", "$r", "Zr", "Xr", "K", "Qr", "N", "en", "ee", "$e", "tn", "Q", "Xe", "rn", "sr", "et", "nn", "X", "Qe", "on", "te", "rt", "an", "re", "nt", "sn", "cn", "ne", "ot", "mT", "xe", "Ze", "VERSION", "CACHE_KEY", "TIMEZONE_OFFSETS", "toLocalISO", "d", "pad", "n", "processIcsDate", "obj", "manualShift", "wallTimeStr", "baseDate", "tzName", "sourceOffset", "utcMillis", "finalDate", "isIcsDateObjects", "sha256Hash", "str", "hashBuffer", "b", "convertDatesToStrings", "hourShift", "item", "result", "key", "getSources", "rawConfig", "config_exports", "sources", "tzShift", "rawSources", "s", "fetchAndParseCalendar", "source", "url", "response", "calendar", "mT", "icsEvent", "uniqueKey", "ref", "syncCalendars", "editor_exports", "allEvents", "events", "err", "syscalls_exports", "forceSync", "client_store_exports", "clearCache", "pageKeys", "datastore_exports", "allKeys", "showVersion", "functionMapping", "syncCalendars", "forceSync", "clearCache", "showVersion", "manifest", "plug", "setupMessageListener"] } diff --git a/icalendar.plug.yaml b/icalendar.plug.yaml index af9d21d..d6d433b 100644 --- a/icalendar.plug.yaml +++ b/icalendar.plug.yaml @@ -3,13 +3,16 @@ version: 0.3.1 author: sstent functions: syncCalendars: + path: icalendar.ts:syncCalendars command: "iCalendar: Sync" forceSync: + path: icalendar.ts:forceSync command: "iCalendar: Force Sync" clearCache: + path: icalendar.ts:clearCache command: "iCalendar: Clear Cache" showVersion: + path: icalendar.ts:showVersion command: "iCalendar: Show Version" -# Grant permissions to fetch from anywhere permissions: - - http \ No newline at end of file + - http diff --git a/icalendar.ts b/icalendar.ts index 1f092c6..9832f8b 100644 --- a/icalendar.ts +++ b/icalendar.ts @@ -3,7 +3,6 @@ import { convertIcsCalendar, type IcsCalendar, type IcsEvent, type IcsDateObject const VERSION = "0.3.1"; const CACHE_KEY = "icalendar:lastSync"; -const DEFAULT_CACHE_DURATION_SECONDS = 21600; // 6 hours // Mapping of common Windows/Outlook timezones to their standard offsets (in hours) const TIMEZONE_OFFSETS: Record = { @@ -65,30 +64,20 @@ function toLocalISO(d: Date): string { function processIcsDate(obj: any, manualShift = 0): string { if (!obj) return ""; let wallTimeStr = ""; - if (obj.local && typeof obj.local.date === "string") { - wallTimeStr = obj.local.date; - } else if (typeof obj.date === "string") { - wallTimeStr = obj.date; - } else if (obj.date instanceof Date) { - wallTimeStr = obj.date.toISOString(); - } else if (obj instanceof Date) { - wallTimeStr = obj.toISOString(); - } - + if (obj.local && typeof obj.local.date === "string") wallTimeStr = obj.local.date; + else if (typeof obj.date === "string") wallTimeStr = obj.date; + else if (obj.date instanceof Date) wallTimeStr = obj.date.toISOString(); + else if (obj instanceof Date) wallTimeStr = obj.toISOString(); if (!wallTimeStr) return ""; - - // 1. Extract the "Wall Time" from the string (ignoring Z if present) - const baseDate = new Date(wallTimeStr.replace("Z", "") + "Z"); - // 2. Determine Source Timezone Offset + const baseDate = new Date(wallTimeStr.replace("Z", "") + "Z"); const tzName = obj.local?.timezone || obj.timezone || "UTC"; const sourceOffset = TIMEZONE_OFFSETS[tzName] ?? 0; - // 3. Calculate True UTC: WallTime - SourceOffset const utcMillis = baseDate.getTime() - (sourceOffset * 3600000); + const finalDate = new Date(utcMillis + (manualShift * 3600000)); - // 4. Apply User's Manual Shift and Localize - return toLocalISO(new Date(utcMillis + (manualShift * 3600000))); + return toLocalISO(finalDate); } function isIcsDateObjects(obj: any): obj is IcsDateObjects { @@ -96,11 +85,8 @@ function isIcsDateObjects(obj: any): obj is IcsDateObjects { } async function sha256Hash(str: string): Promise { - const encoder = new TextEncoder(); - const data = encoder.encode(str); - const hashBuffer = await crypto.subtle.digest("SHA-256", data); - const hashArray = Array.from(new Uint8Array(hashBuffer)); - return hashArray.map(b => b.toString(16).padStart(2, "0")).join(""); + const hashBuffer = await crypto.subtle.digest("SHA-256", (new TextEncoder()).encode(str)); + return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2, "0")).join(""); } function convertDatesToStrings(obj: T, hourShift = 0): DateToString { @@ -111,41 +97,26 @@ function convertDatesToStrings(obj: T, hourShift = 0): DateToString { if (typeof obj === 'object') { const result: any = {}; for (const key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - result[key] = convertDatesToStrings((obj as any)[key], hourShift); - } + if (Object.prototype.hasOwnProperty.call(obj, key)) result[key] = convertDatesToStrings((obj as any)[key], hourShift); } return result as DateToString; } return obj as DateToString; } -// ============================================================================ -// Configuration & Commands -// ============================================================================ - async function getSources(): Promise<{ sources: Source[], tzShift: number }> { try { const rawConfig = await config.get("icalendar", { sources: [] }); let sources: Source[] = []; let tzShift = rawConfig.tzShift ?? 0; - let rawSources = rawConfig.sources; if (rawSources && typeof rawSources === "object") { if (rawSources.tzShift !== undefined && tzShift === 0) tzShift = rawSources.tzShift; - if (Array.isArray(rawSources)) { - sources = rawSources.filter(s => s && typeof s.url === "string"); - } else if (rawSources.url) { - sources = [rawSources]; - } else { - for (const key in rawSources) { - if (rawSources[key] && typeof rawSources[key].url === "string") sources.push(rawSources[key]); - } - } + if (Array.isArray(rawSources)) sources = rawSources.filter(s => s && typeof s.url === "string"); + else if (rawSources.url) sources = [rawSources]; } return { sources, tzShift }; } catch (e) { - console.error("Failed to load configuration", e); return { sources: [], tzShift: 0 }; } } @@ -153,56 +124,39 @@ async function getSources(): Promise<{ sources: Source[], tzShift: number }> { async function fetchAndParseCalendar(source: Source, hourShift = 0): Promise { let url = source.url.trim(); if (url.includes(" ")) url = encodeURI(url); - - const response = await fetch(url, { - headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } - }); - + const response = await fetch(url); if (!response.ok) throw new Error(`HTTP ${response.status}`); - - const icsData = await response.text(); - const calendar: IcsCalendar = convertIcsCalendar(undefined, icsData); - + const calendar = convertIcsCalendar(undefined, await response.text()); if (!calendar.events) return []; - return await Promise.all(calendar.events.map(async (icsEvent: IcsEvent): Promise => { const uniqueKey = `${icsEvent.start?.date || ''}${icsEvent.uid || icsEvent.summary || ''}`; const ref = await sha256Hash(uniqueKey); - - return convertDatesToStrings({ - ...icsEvent, - ref, - tag: "ical-event" as const, - sourceName: source.name, - }, hourShift); + return convertDatesToStrings({ ...icsEvent, ref, tag: "ical-event" as const, sourceName: source.name }, hourShift); })); } +// ============================================================================ +// Public Commands +// ============================================================================ + export async function syncCalendars() { try { const { sources, tzShift } = await getSources(); - if (sources.length === 0) { - console.log("[iCalendar] No sources configured."); - return; - } - + if (sources.length === 0) return; await editor.flashNotification("Syncing calendars...", "info"); - const allEvents: CalendarEvent[] = []; for (const source of sources) { try { const events = await fetchAndParseCalendar(source, tzShift); allEvents.push(...events); } catch (err) { - console.error(`[iCalendar] Failed to sync ${source.name}:`, err); - await editor.flashNotification(`Failed to sync ${source.name}`, "error"); + console.error(`Failed to sync ${source.name}:`, err); } } - await index.indexObjects("$icalendar", allEvents); await editor.flashNotification(`Synced ${allEvents.length} events`, "info"); } catch (err) { - console.error("[iCalendar] Sync failed:", err); + console.error("Sync failed:", err); } } @@ -226,4 +180,4 @@ export async function clearCache() { export async function showVersion() { await editor.flashNotification(`iCalendar Plug ${VERSION}`, "info"); -} \ No newline at end of file +}