config/spicetify/CustomApps/marketplace/extension.js

10 lines
92 KiB
JavaScript
Raw Permalink Normal View History

!async function(){for(;!Spicetify.React||!Spicetify.ReactDOM;)await new Promise(e=>setTimeout(e,10));(()=>{var M=e=>"string"==typeof e,_=()=>{let r,a;var e=new Promise((e,t)=>{r=e,a=t});return e.resolve=r,e.reject=a,e},T=e=>null==e?"":""+e,U=(e,t,r)=>{e.forEach(e=>{t[e]&&(r[e]=t[e])})},F=/###/g,B=e=>e&&-1<e.indexOf("###")?e.replace(F,"."):e,V=e=>!e||M(e),D=(e,t,r)=>{var a=M(t)?t.split("."):t;let s=0;for(;s<a.length-1;){if(V(e))return{};var n=B(a[s]);!e[n]&&r&&(e[n]=new r),e=Object.prototype.hasOwnProperty.call(e,n)?e[n]:{},++s}return V(e)?{}:{obj:e,k:B(a[s])}},K=(a,s,n)=>{var{obj:e,k:t}=D(a,s,Object);if(void 0!==e||1===s.length)e[t]=n;else{let e=s[s.length-1],t=s.slice(0,s.length-1),r=D(a,t,Object);for(;void 0===r.obj&&t.length;)e=t[t.length-1]+"."+e,t=t.slice(0,t.length-1),(r=D(a,t,Object))?.obj&&void 0!==r.obj[r.k+"."+e]&&(r.obj=void 0);r.obj[r.k+"."+e]=n}},q=(e,t,r,a)=>{var{obj:e,k:t}=D(e,t,Object);e[t]=e[t]||[],e[t].push(r)},z=(e,t)=>{var{obj:e,k:t}=D(e,t);if(e&&Object.prototype.hasOwnProperty.call(e,t))return e[t]},W=(e,t,r)=>{e=z(e,r);return void 0!==e?e:z(t,r)},H=(e,t,r)=>{for(const a in t)"__proto__"!==a&&"constructor"!==a&&(a in e?M(e[a])||e[a]instanceof String||M(t[a])||t[a]instanceof String?r&&(e[a]=t[a]):H(e[a],t[a],r):e[a]=t[a]);return e},b=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),Y={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},G=e=>M(e)?e.replace(/[&<>"'\/]/g,e=>Y[e]):e,J=[" ",",","?","!",";"],X=new class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){var t=this.regExpMap.get(e);return void 0!==t||(t=new RegExp(e),this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,t),this.regExpQueue.push(e)),t}}(20),Z=(e,t,r)=>{t=t||"",r=r||"";var a=J.filter(e=>t.indexOf(e)<0&&r.indexOf(e)<0);if(0===a.length)return!0;var s,a=X.getRegExp(`(${a.map(e=>"?"===e?"\\?":e).join("|")})`);let n=!a.test(e);return n||0<(s=e.indexOf(r))&&!a.test(e.substring(0,s))&&(n=!0),n},Q=(e,t,n=".")=>{if(e){if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;var o=t.split(n);let s=e;for(let a=0;a<o.length;){if(!s||"object"!=typeof s)return;let t,r="";for(let e=a;e<o.length;++e)if(e!==a&&(r+=n),r+=o[e],void 0!==(t=s[r])&&!(-1<["string","number","boolean"].indexOf(typeof t)&&e<o.length-1)){a+=e-a+1;break}s=t}return s}},ee=e=>e?.replace("_","-"),te={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console?.[e]?.apply?.(console,t)}},re=class{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||"i18next:",this.logger=e||te,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,"log","",!0)}warn(...e){return this.forward(e,"warn","",!0)}error(...e){return this.forward(e,"error","")}deprecate(...e){return this.forward(e,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,r,a){return a&&!this.debug?null:(M(e[0])&&(e[0]=""+r+this.prefix+" "+e[0]),this.logger[t](e))}create(e){return new re(this.logger,{prefix:this.prefix+`:${e}:`,...this.options})}clone(e){return(e=e||this.options).prefix=e.prefix||this.prefix,new re(this.logger,e)}},i=new re,e=class{constructor(){this.observers={}}on(e,r){return e.split(" ").forEach(e=>{this.observers[e]||(this.observers[e]=new Map);var t=this.observers[e].get(r)||0;this.observers[e].set(r,t+1)}),this}off(e,t){this.observers[e]&&(t?this.observers[e].delete(t):delete this.observers[e])}emit(a,...s){this.observers[a]&&Array.from(this.observers[a].entries()).forEach(([t,r])=>{for(let e=0;e<r;e++)t(...s)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([t,r])=>{for(let e=0;e<r;e++)t.apply(t,[a,...s])})}},ae=class extends e{constructor(e,t={ns:["translation"],defaultNS:"translation"}){super(),this.data=e||{},this.options=t,void 0===this.options.keySeparator&&(this.options.keySeparator="."),void 0===this.options.ignoreJSONStructure&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespa
self.addEventListener('message', async (event) => {
const url = event.data;
const response = await fetch(url);
const data = await response.json().catch(() => null);
self.postMessage(data);
});
`],{type:"application/javascript"}),ta=URL.createObjectURL(kr);async function ra(e,t,r){var a=e+"-"+t,s=window.sessionStorage.getItem(a),n=JSON.parse(window.sessionStorage.getItem("noManifests")||"[]");if(s)return JSON.parse(s);s=`https://raw.githubusercontent.com/${e}/${t}/${r}/manifest.json`;if(n.includes(s))return null;let o=await async function(e){const a=new Worker(ta);return new Promise(t=>{const r=e=>{a.terminate(),t(e)};a.postMessage(e),a.addEventListener("message",e=>r(e.data),{once:!0}),a.addEventListener("error",()=>r(null),{once:!0})})}(s);return o?(Xr(o=Array.isArray(o)?o:[o],a),o):Xr([s],"noManifests")}async function aa(e,t){var r=await async function(e,t=1){const r=JSON.parse(window.sessionStorage.getItem("marketplace:blacklist")||"[]");let a=`https://api.github.com/search/repositories?per_page=${Pe}&q=`+encodeURIComponent(`topic:spicetify-${e}s`);t&&(a+="&page="+t);var s=JSON.parse(window.sessionStorage.getItem(`spicetify-${e}s-page-`+t)||"null")||await fetch(a).then(e=>e.json()).catch(()=>null);return s?.items?(window.sessionStorage.setItem(`spicetify-${e}s-page-`+t,JSON.stringify(s)),{...s,page_count:s.items.length,items:s.items.filter(e=>!Br(e.html_url,r))}):(Spicetify.showNotification(je("notifications.tooManyRequests"),!0,5e3),{items:[]})}(e,t),a=(!async function(e,t){for(const r of e.items)"theme"===t?await async function(e,a,s){try{var t=e.match(/https:\/\/api\.github\.com\/repos\/(?<user>.+)\/(?<repo>.+)\/contents/);if(!t||!t.groups)return;const{user:n,repo:o}=t.groups;return(await ra(n,o,a)).reduce((e,t)=>{var r;return t?.name&&t?.usercss&&t?.description&&(r=t.branch||a,r={manifest:t,title:t.name,subtitle:t.description,authors:Dr(t.authors,n),user:n,repo:o,branch:r,imageURL:t.preview?.startsWith("http")?t.preview:`https://raw.githubusercontent.com/${n}/${o}/${r}/`+t.preview,readmeURL:t.readme?.startsWith("http")?t.readme:`https://raw.githubusercontent.com/${n}/${o}/${r}/`+t.readme,stars:s,tags:t.tags,cssURL:t.usercss.startsWith("http")?t.usercss:`https://raw.githubusercontent.com/${n}/${o}/${r}/`+t.usercss,schemesURL:t.schemes?t.schemes.startsWith("http")?t.schemes:`https://raw.githubusercontent.com/${n}/${o}/${r}/`+t.schemes:null,include:t.include},e.push(r)),e},[])}catch{return}}(r.contents_url,r.default_branch,r.stargazers_count):"extension"===t?await async function(e,a,s,n=!1){try{var t=e.match(/https:\/\/api\.github\.com\/repos\/(?<user>.+)\/(?<repo>.+)\/contents/);if(!t||!t.groups)return;const{user:o,repo:i}=t.groups;return(await ra(o,i,a)).reduce((e,t)=>{var r;return t?.name&&t.description&&t.main&&(r=t.branch||a,r={manifest:t,title:t.name,subtitle:t.description,authors:Dr(t.authors,o),user:o,repo:i,branch:r,imageURL:t.preview?.startsWith("http")?t.preview:`https://raw.githubusercontent.com/${o}/${i}/${r}/`+t.preview,extensionURL:t.main.startsWith("http")?t.main:`https://raw.githubusercontent.com/${o}/${i}/${r}/`+t.main,readmeURL:t.readme?.startsWith("http")?t.readme:`https://raw.githubusercontent.com/${o}/${i}/${r}/`+t.readme,stars:s,tags:t.tags},n&&localStorage.getItem(`marketplace:installed:${o}/${i}/`+t.main)||e.push(r)),e},[])}catch{return}}(r.contents_url,r.default_branch,r.stargazers_count):"app"===t&&await async function(e,a,s){try{var t=e.match(/https:\/\/api\.github\.com\/repos\/(?<user>.+)\/(?<repo>.+)\/contents/);if(!t||!t.groups)return;const{user:n,repo:o}=t.groups;return(await ra(n,o,a)).reduce((e,t)=>{var r;return t?.name&&t.description&&!t.main&&!t.usercss&&(r=t.branch||a,r={manifest:t,title:t.name,subtitle:t.description,authors:Dr(t.authors,n),user:n,repo:o,branch:r,imageURL:t.preview?.startsWith("http")?t.preview:`https://raw.githubusercontent.com/${n}/${o}/${r}/`+t.preview,readmeURL:t.readme?.startsWith("http")?t.readme:`https://raw.githubusercontent.com/${n}/${o}/${r}/`+t.readme,stars:s,tags:t.tags},e.push(r)),e},[])}catch{return}}(r.contents_url,r.default_branch,r.stargazers_count)}(r,e),Pe*t+r.page_count),s=(console.debug({pageOfRepos:r}),r.total_count-a);if(console.debug(`Parsed ${a}/${r.total_count} ${e}s`),0<s)return aa(e,t+1);console.debug(`No more ${e} results`)
${t.code}
`,""),a.innerHTML=r,a.classList.add("marketplaceSnippets"),document.body.appendChild(a),p){window.sessionStorage.setItem("marketplace-request-tld",p);for(const s of I(g.installedExtensions,[]))(e=>{e=I(e);if(e&&e.extensionURL){console.debug("Initializing extension: ",e);var t=document.createElement("script");if(t.defer=!0,t.src=e.extensionURL,Gr(t.src)){var{user:r,repo:a,branch:s,filePath:n}=Jr(e.extensionURL);if(!(r&&a&&s&&n))return;t.src=`https://cdn.jsdelivr.${p}/gh/${r}/${a}@${s}/`+n,n.endsWith(".mjs")&&(t.type="module")}t.src=t.src+"?time="+Date.now(),document.body.appendChild(t),Qr(e.manifest?.main)}})(s);var r=Spicetify.Config["current_theme"],a=(localStorage.setItem(g.localTheme,r),localStorage.getItem(g.themeInstalled));a&&("marketplace"!==r.toLocaleLowerCase()?Spicetify.showNotification(je("notifications.wrongLocalTheme"),!0,5e3):t(a))}else window.navigator.onLine?(console.error(new Error("Unable to connect to the CDN, please check your Internet configuration.")),Spicetify.showNotification(je("notifications.noCdnConnection"),!0,5e3)):window.addEventListener("online",e,{once:!0})}else setTimeout(e,100)}(),async function(){console.debug("Preloading extensions and themes..."),window.sessionStorage.clear();var e=await(await fetch("https://raw.githubusercontent.com/spicetify/marketplace/main/resources/blacklist.json").then(e=>e.json()).catch(()=>({}))).repos;window.sessionStorage.setItem("marketplace:blacklist",JSON.stringify(e)),await Promise.all([aa("extension",0),aa("theme",0),aa("app",0)])}()})()}();