-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgithub.plug.js
7 lines (7 loc) · 15.4 KB
/
github.plug.js
1
2
3
4
5
6
7
var mod=(()=>{var G=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var r in t)G(e,r,{get:t[r],enumerable:!0})},oe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of re(t))!ne.call(e,o)&&o!==r&&G(e,o,{get:()=>t[o],enumerable:!(n=te(t,o))||n.enumerable});return e};var se=e=>oe(G({},"__esModule",{value:!0}),e);var At={};w(At,{functionMapping:()=>ee});typeof Deno>"u"&&(self.Deno={args:[],build:{arch:"x86_64"},env:{get(){}}});var k=new Map,F=0;function C(e){self.postMessage(e)}self.syscall=async(e,...t)=>await new Promise((r,n)=>{F++,k.set(F,{resolve:r,reject:n}),C({type:"sys",id:F,name:e,args:t})});function U(e,t){self.addEventListener("message",r=>{(async()=>{let n=r.data;switch(n.type){case"inv":{let o=e[n.name];if(!o)throw new Error(`Function not loaded: ${n.name}`);try{let s=await Promise.resolve(o(...n.args||[]));C({type:"invr",id:n.id,result:s})}catch(s){console.error("An exception was thrown as a result of invoking function",n.name,"error:",s),C({type:"invr",id:n.id,error:s.message})}}break;case"sysr":{let o=n.id,s=k.get(o);if(!s)throw Error("Invalid request id");k.delete(o),n.error?s.reject(new Error(n.error)):s.resolve(n.result)}break}})().catch(console.error)}),C({type:"manifest",manifest:t})}function ie(e){let t=atob(e),r=t.length,n=new Uint8Array(r);for(let o=0;o<r;o++)n[o]=t.charCodeAt(o);return n}function R(e){typeof e=="string"&&(e=new TextEncoder().encode(e));let t="",r=e.byteLength;for(let n=0;n<r;n++)t+=String.fromCharCode(e[n]);return btoa(t)}async function ae(e,t){if(typeof e!="string"){let r=new Uint8Array(await e.arrayBuffer()),n=r.length>0?R(r):void 0;t={method:e.method,headers:Object.fromEntries(e.headers.entries()),base64Body:n},e=e.url}return syscall("sandboxFetch.fetch",e,t)}function ce(){globalThis.nativeFetch=globalThis.fetch,globalThis.fetch=async function(e,t){let r=t&&t.body?R(new Uint8Array(await new Response(t.body).arrayBuffer())):void 0,n=await ae(e,t&&{method:t.method,headers:t.headers,base64Body:r});return new Response(n.base64Body?ie(n.base64Body):null,{status:n.status,headers:n.headers})}}ce();function N(e){if(e.children)for(let t of e.children){if(t.parent)return;t.parent=e,N(t)}}function O(e,t){return E(e,r=>r.type===t)}function E(e,t){if(t(e))return[e];let r=[];if(e.children)for(let n of e.children)r=[...r,...E(n,t)];return r}async function D(e,t){if(await t(e))return[e];let r=[];if(e.children)for(let n of e.children)r=[...r,...await D(n,t)];return r}async function M(e,t){if(e.children){let r=e.children.slice();for(let n of r){let o=await t(n);if(o!==void 0){let s=e.children.indexOf(n);o?e.children.splice(s,1,o):e.children.splice(s,1)}else await M(n,t)}}}function $(e,t){return E(e,r=>r.type===t)[0]}function Q(e,t){E(e,t)}async function K(e,t){await D(e,t)}function g(e){let t=[];if(e.text!==void 0)return e.text;for(let r of e.children)t.push(g(r));return t.join("")}function u(e,t,r={}){let[n,o]=e;switch(n){case"and":return u(o,t,r)&&u(e[2],t,r);case"or":return u(o,t,r)||u(e[2],t,r);case"null":return null;case"number":case"string":case"boolean":return o;case"regexp":return[o,e[2]];case"attr":{let c=t;return e.length===3?(c=u(e[1],t,r),c?c[e[2]]:null):e[1]?c[e[1]]:t}case"array":return o.map(c=>u(c,t,r));case"object":return t;case"call":{let c=r[o];if(!c)throw new Error(`Unknown function: ${o}`);return c(...e[2].map(p=>u(p,t,r)))}}let s=u(o,t,r),a=u(e[2],t,r);switch(n){case"+":return s+a;case"-":return s-a;case"*":return s*a;case"/":return s/a;case"%":return s%a;case"=":{if(Array.isArray(s)&&!Array.isArray(a)){if(s.includes(a))return!0}else if(Array.isArray(s)&&Array.isArray(a)&&s.some(c=>a.includes(c)))return!0;return s==a}case"!=":return s!=a;case"=~":{if(!Array.isArray(a))throw new Error(`Invalid regexp: ${a}`);return new RegExp(a[0],a[1]).test(s)}case"!=~":{if(!Array.isArray(a))throw new Error(`Invalid regexp: ${a}`);return!new RegExp(a[0],a[1]).test(s)}case"<":return s<a;case"<=":return s<=a;case">":return s>a;case">=":return s>=a;case"in":return a.includes(s);default:throw new Error(`Unupported operator: ${n}`)}}function v(e,t){if(!e)throw new Error(`Cannot find attribute assignment for ${t}`);switch(e[0]){case"=":{if(e[1][0]==="attr"&&e[1][1]===t){let r=e[2];return e[1]=["boolean",!0],e[2]=["boolean",!0],r}break}case"and":case"or":{let r=v(e[1],t);if(r)return r;let n=v(e[2],t);if(n)return n;throw new Error(`Cannot find attribute assignment for ${t}`)}}throw new Error(`Cannot find attribute assignment for ${t}`)}function T(e,t){return e.filter&&(t=t.filter(r=>u(e.filter,r))),ue(e,t.map(r=>({key:[],value:r}))).map(r=>r.value)}function ue(e,t,r={}){if(e.orderBy&&t.sort((n,o)=>{let s=n.value,a=o.value;for(let{expr:c,desc:p}of e.orderBy){let m=u(c,s,r),x=u(c,a,r);if(m<x||m===void 0)return p?1:-1;if(m>x||x===void 0)return p?-1:1}return 0}),e.select)for(let n=0;n<t.length;n++){let o=t[n].value,s={};for(let{name:a,expr:c}of e.select)s[a]=c?u(c,o,r):o[a];t[n].value=s}if(e.distinct){let n=new Set,o=[];for(let s of t){let a=JSON.stringify(s.value);n.has(a)||(n.add(a),o.push(s))}t=o}if(e.limit){let n=u(e.limit,{},r);t.length>n&&(t=t.slice(0,n))}return t}var l={};w(l,{confirm:()=>Me,dispatch:()=>ke,downloadFile:()=>ve,filterBox:()=>Te,flashNotification:()=>be,fold:()=>Re,foldAll:()=>Qe,getCurrentPage:()=>le,getCursor:()=>pe,getSelection:()=>me,getText:()=>fe,getUiOption:()=>$e,hidePanel:()=>Ce,insertAtCursor:()=>Fe,insertAtPos:()=>Ee,moveCursor:()=>Ge,navigate:()=>he,openUrl:()=>we,prompt:()=>Ne,reloadPage:()=>Pe,reloadUI:()=>xe,replaceRange:()=>Se,save:()=>ye,setPage:()=>de,setSelection:()=>ge,setUiOption:()=>qe,showPanel:()=>Ae,toggleFold:()=>De,unfold:()=>Oe,unfoldAll:()=>Ke,vimEx:()=>Ue});typeof self>"u"&&(self={syscall:()=>{throw new Error("Not implemented here")}});var i=self.syscall;function le(){return i("editor.getCurrentPage")}function de(e){return i("editor.setPage",e)}function fe(){return i("editor.getText")}function pe(){return i("editor.getCursor")}function me(){return i("editor.getSelection")}function ge(e,t){return i("editor.setSelection",e,t)}function ye(){return i("editor.save")}function he(e,t,r=!1,n=!1){return i("editor.navigate",e,t,r,n)}function Pe(){return i("editor.reloadPage")}function xe(){return i("editor.reloadUI")}function we(e,t=!1){return i("editor.openUrl",e,t)}function ve(e,t){return i("editor.downloadFile",e,t)}function be(e,t="info"){return i("editor.flashNotification",e,t)}function Te(e,t,r="",n=""){return i("editor.filterBox",e,t,r,n)}function Ae(e,t,r,n=""){return i("editor.showPanel",e,t,r,n)}function Ce(e){return i("editor.hidePanel",e)}function Ee(e,t){return i("editor.insertAtPos",e,t)}function Se(e,t,r){return i("editor.replaceRange",e,t,r)}function Ge(e,t=!1){return i("editor.moveCursor",e,t)}function Fe(e){return i("editor.insertAtCursor",e)}function ke(e){return i("editor.dispatch",e)}function Ne(e,t=""){return i("editor.prompt",e,t)}function Me(e){return i("editor.confirm",e)}function $e(e){return i("editor.getUiOption",e)}function qe(e,t){return i("editor.setUiOption",e,t)}function Ue(e){return i("editor.vimEx",e)}function Re(){return i("editor.fold")}function Oe(){return i("editor.unfold")}function De(){return i("editor.toggleFold")}function Qe(){return i("editor.foldAll")}function Ke(){return i("editor.unfoldAll")}var y={};w(y,{parseMarkdown:()=>Be});function Be(e){return i("markdown.parseMarkdown",e)}var P={};w(P,{deleteAttachment:()=>Xe,deleteFile:()=>nt,deletePage:()=>_e,getAttachmentMeta:()=>je,getFileMeta:()=>tt,getPageMeta:()=>Le,listAttachments:()=>Je,listFiles:()=>Ze,listPages:()=>Ie,listPlugs:()=>We,readAttachment:()=>He,readFile:()=>et,readPage:()=>Ve,writeAttachment:()=>ze,writeFile:()=>rt,writePage:()=>Ye});function Ie(e=!1){return i("space.listPages",e)}function Le(e){return i("space.getPageMeta",e)}function Ve(e){return i("space.readPage",e)}function Ye(e,t){return i("space.writePage",e,t)}function _e(e){return i("space.deletePage",e)}function We(){return i("space.listPlugs")}function Je(){return i("space.listAttachments")}function je(e){return i("space.getAttachmentMeta",e)}function He(e){return i("space.readAttachment",e)}function ze(e,t){return i("space.writeAttachment",e,t)}function Xe(e){return i("space.deleteAttachment",e)}function Ze(){return i("space.listFiles")}function et(e){return i("space.readFile",e)}function tt(e){return i("space.getFileMeta",e)}function rt(e,t){return i("space.writeFile",e,t)}function nt(e){return i("space.deleteFile",e)}var b={};w(b,{getEnv:()=>ct,invokeCommand:()=>st,invokeFunction:()=>ot,listCommands:()=>it,reloadPlugs:()=>at});function ot(e,...t){return i("system.invokeFunction",e,...t)}function st(e){return i("system.invokeCommand",e)}function it(){return i("system.listCommands")}function at(){i("system.reloadPlugs")}function ct(){return i("system.getEnv")}var h=globalThis.syscall;var f={};w(f,{parse:()=>ht,stringify:()=>Pt});function ht(e){return h("yaml.parse",e)}function Pt(e){return h("yaml.stringify",e)}async function vt(e,t){let r=await P.readPage(e),n=await y.parseMarkdown(r),o;return Q(n,s=>{if(s.type!=="FencedCode")return!1;let a=$(s,"CodeInfo");if(t&&!a||t&&!t.includes(a.children[0].text))return!1;let c=$(s,"CodeText");return c?(o=c.children[0].text,!0):!1}),o}async function B(e,t=["yaml"]){let r=await vt(e,t);if(r!==void 0)try{return f.parse(r)}catch(n){throw console.error("YAML Page parser error",n),new Error(`YAML Error: ${n.message}`)}}async function I(e){try{let t=await B("SECRETS",["yaml","secrets"]),r=[];for(let n of e){let o=t[n];if(o)r.push(o);else throw new Error(`No such secret: ${n}`)}return r}catch(t){throw t.message==="Not found"?new Error(`No such secret: ${e[0]}`):t}}async function bt(){try{let[e]=await I(["githubToken"]);return e}catch{console.error("No github-config page found, using default config");return}}var d=class{constructor(t){this.token=t}async apiCall(t,r={}){let n=await fetch(t,{...r,headers:{Authorization:this.token?`token ${this.token}`:void 0}});if(n.status<200||n.status>=300)throw new Error(await n.text());return n.json()}listEvents(t){return this.apiCall(`https://api.github.com/users/${t}/events?per_page=100`)}listPulls(t,r="all",n="updated"){return this.apiCall(`https://api.github.com/repos/${t}/pulls?state=${r}&sort=${n}&direction=desc&per_page=100`)}searchIssues(t,r=""){return t=encodeURIComponent(t),this.apiCall(`https://api.github.com/search/issues?q=${t}&sort=${r}&direction=desc&per_page=100`)}listNotifications(){return this.apiCall("https://api.github.com/notifications?per_page=100")}async createGist(t,r,n){return(await this.apiCall("https://api.github.com/gists",{method:"POST",body:JSON.stringify({description:t,public:r,files:n})})).id}updateGist(t,r,n,o){return this.apiCall(`https://api.github.com/gists/${t}`,{method:"PATCH",body:JSON.stringify({description:r,public:n,files:o})})}async getGist(t){return(await this.apiCall(`https://api.github.com/gists/${t}`)).files}static async fromConfig(){return new d(await bt())}};async function S(e,t=[],r=!1){let n={};N(e);let o=0;return await M(e,async s=>{if(s.type==="Paragraph"){if(o++,o!==1)return;O(s,"Hashtag").forEach(a=>{n.tags||(n.tags=[]);let c=a.children[0].text.substring(1);Array.isArray(n.tags)&&!n.tags.includes(c)&&n.tags.push(c)})}if(s.type==="FrontMatter"){let a=s.children[1].children[0],c=g(a);try{let p=await f.parse(c),m={...p};if(n={...n,...p},t.length>0){let x=!1;for(let q of t)q in m&&(delete m[q],x=!0);x&&(a.text=await f.stringify(m))}if(Object.keys(m).length===0||r)return null}catch(p){console.warn("Could not parse frontmatter",p.message)}}}),n.name&&(n.displayName=n.name,delete n.name),n}async function L(e,t){let r=null;return await K(e,async n=>{if(n.type==="FrontMatter"){let o=n.children[1].children[0],s=g(o);try{let c={...await f.parse(s),...t};r={changes:{from:o.from,to:o.to,insert:await f.stringify(c)}}}catch(a){console.error("Error parsing YAML",a)}return!0}return!1}),r||(r={changes:{from:0,to:0,insert:`---
`+await f.stringify(t)+`---
`}}),r}async function V({query:e}){let t=await d.fromConfig(),r=v(e.filter,"username");if(!r)throw Error("No 'username' filter specified, this is mandatory");let n=u(r,{}),o=await t.listEvents(n);return T(e,o.map(s=>A(s)))}async function Y({query:e}){let t=await d.fromConfig(),r=v(e.filter,"repo");if(!r)throw Error("No 'repo' specified, this is mandatory");let n=u(r,{}),o=await t.listPulls(n,"all","updated");return o=T(e,o.map(s=>A(s))),o}async function _({query:e}){let r=await(await d.fromConfig()).listNotifications();return r=T(e,r.map(n=>A(n))),r}async function W({query:e}){let t=await d.fromConfig(),r=v(e.filter,"query");if(!r)throw Error("No 'query' specified, this is mandatory");let n=u(r,{}),o=await t.searchIssues(n);return T(e,o.items.map(a=>A(a)))}function A(e,t=""){let r={};for(let[n,o]of Object.entries(e))t&&(n=t+"_"+n),o&&typeof o=="object"?r={...r,...A(o,n)}:r[n]=o;return r}async function J(){let e=await l.getCurrentPage(),t=await l.getText(),r=await y.parseMarkdown(t),{$share:n}=await S(r,["$share"]),o=g(r);n||(n=[]);for(let c of n)if(c.startsWith("gh-gist:")){await b.invokeFunction("server","updateGist",{name:e,uri:c}),await l.flashNotification("Updated!"),await l.openUrl(`https://gist.github.com/${c.split(":")[1]}`);return}let s=await b.invokeFunction("server","createGist",e,o),a=L(r,{$share:[...n,`gh-gist:${s}`]});await l.flashNotification("Done!"),await l.dispatch(a),await l.openUrl(`https://gist.github.com/${s}`)}async function j(e,t){return(await d.fromConfig()).createGist("",!0,{[`${e}.md`]:{content:t}})}async function H(e){return(await d.fromConfig()).getGist(e)}async function z(){let e=await l.prompt("Gist URL:");if(!e)return;let t=e.split("/"),r=t[t.length-1],n=await b.invokeFunction("server","getGist",r);if(Object.keys(n).length!==1){await l.flashNotification("Only gists with a single file are supported","error");return}let o=Object.keys(n)[0].replace(/\.md$/,""),s=Object.values(n)[0].content,a=await l.prompt("Page name:",o);a&&(await P.writePage(a,`---
$share:
- 'gh-gist:${r}'
---
${s}`),await l.navigate(a))}async function X(){let e=await l.getText(),t=await y.parseMarkdown(e),{$share:r}=await S(t);if(!r){await l.flashNotification("Not currently shared as gist","error");return}for(let n of r)if(n.startsWith("gh-gist:")){let s=`https://gist.github.com/${n.split(":")[1]}`;await l.openUrl(s);return}await l.flashNotification("Not currently shared as gist","error")}async function Z(e){let t=e.uri.split(":")[1],r=await d.fromConfig(),n=await P.readPage(e.name),o=await y.parseMarkdown(n);S(o,["$share"]);let s=g(o);return await r.updateGist(t,"",!0,{[`${e.name}.md`]:{content:s}}),!0}var ee={queryEvents:V,queryPulls:Y,queryNotifications:_,querySearchIssues:W,shareGistCommand:J,loadGistCommand:z,openGistCommand:X,createGist:j,updateGist:Z,getGist:H},Tt={name:"github",requiredPermissions:["fetch"],functions:{queryEvents:{path:"./github.ts:queryEvents",events:["query:gh-event"]},queryPulls:{path:"./github.ts:queryPulls",events:["query:gh-pull"]},queryNotifications:{path:"./github.ts:queryNotifications",events:["query:gh-notification"]},querySearchIssues:{path:"./github.ts:querySearchIssues",events:["query:gh-search-issue"]},shareGistCommand:{path:"./github.ts:shareGistCommand",command:{name:"Share: Gist: Public Gist"}},loadGistCommand:{path:"./github.ts:loadGistCommand",command:{name:"Share: Gist: Load"}},openGistCommand:{path:"./github.ts:openGistCommand",command:{name:"Share: Gist: Open In Browser"}},createGist:{path:"./github.ts:createGist",env:"server"},updateGist:{path:"./github.ts:updateGist",env:"server",events:["share:gh-gist"]},getGist:{path:"./github.ts:getGist",env:"server"}},assets:{}};U(ee,Tt);return se(At);})();