From a0405381c118bb10d435ef8e4ab9d37487fa5165 Mon Sep 17 00:00:00 2001 From: SuperSaltyGamer Date: Fri, 30 Dec 2022 18:02:58 +0200 Subject: [PATCH] Update dist, separate build output for scripts --- .gitignore | 2 +- dist/applemusic.user.js | 35 ++++++++++++++++++----------------- package.json | 4 ++-- scripts/build.ts | 3 +-- src/applemusic/main.ts | 6 +++--- tsconfig.scripts.json | 2 +- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 24d05c4..0138eae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .vscode/ .idea/ node_modules/ -out/ +out*/ diff --git a/dist/applemusic.user.js b/dist/applemusic.user.js index a7bd726..d0a322e 100644 --- a/dist/applemusic.user.js +++ b/dist/applemusic.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @namespace ame-applemusic // @name Ame (Apple Music) -// @version 1.0.0 +// @version 1.0.1 // @author SuperSaltyGamer // @run-at document-start // @match https://music.apple.com/* @@ -12,7 +12,8 @@ // @updateURL https://notabug.org/SuperSaltyGamer/ame/raw/main/dist/applemusic.user.js // ==/UserScript== -(function(S){typeof define=="function"&&define.amd?define(S):S()})(function(){"use strict";function S(t){for(var n=[],e=0;e=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){i+=t[a++];continue}break}if(!i)throw new TypeError("Missing parameter name at ".concat(e));n.push({type:"NAME",index:e,value:i}),e=a;continue}if(r==="("){var c=1,d="",a=e+1;if(t[a]==="?")throw new TypeError('Pattern cannot start with "?" at '.concat(a));for(;a)?(?!\?)/g,r=0,i=e.exec(t.source);i;)n.push({name:i[1]||r++,prefix:"",suffix:"",modifier:"",pattern:""}),i=e.exec(t.source);return t}function ct(t,n,e){var r=t.map(function(i){return j(i,n,e).source});return new RegExp("(?:".concat(r.join("|"),")"),V(e))}function st(t,n,e){return lt(at(t,e),n,e)}function lt(t,n,e){e===void 0&&(e={});for(var r=e.strict,i=r===void 0?!1:r,a=e.start,o=a===void 0?!0:a,c=e.end,d=c===void 0?!0:c,s=e.encode,u=s===void 0?function(F){return F}:s,m=e.delimiter,l=m===void 0?"/#?":m,p=e.endsWith,_=p===void 0?"":p,q="[".concat(T(_),"]|$"),b="[".concat(T(l),"]"),v=o?"^":"",R=0,I=t;R-1:x===void 0;i||(v+="(?:".concat(b,"(?=").concat(q,"))?")),Q||(v+="(?=".concat(b,"|").concat(q,")"))}return new RegExp(v,V(e))}function j(t,n,e){return t instanceof RegExp?ot(t,n):Array.isArray(t)?ct(t,n,e):st(t,n,e)}const k=[],ut=history.pushState;history.pushState=function(t,n,e){ut.apply(history,[t,n,e]),e&&z(e.toString(),k)},addEventListener("popstate",()=>{z(location.pathname,k)});function z(t,n){for(const e of n){const r=e.matcher(t)?e.onCallbacks:e.offCallbacks;for(const i of r)i()}}function G(t){let n=k.find(e=>e.pattern===t);return n||(n={pattern:t,matcher:rt(t),onCallbacks:[],offCallbacks:[]},k.push(n),n)}function dt(t,n){const e=G(t);e.onCallbacks.push(n),e.matcher(location.pathname)&&n()}function ft(t,n){const e=G(t);e.offCallbacks.push(n),e.matcher(location.pathname)||n()}function L(t){return new Promise(n=>{setTimeout(n,t)})}function E(t){const n=document.createElement("div");return n.innerHTML=t,n.firstElementChild}function C(t,n,e=5e3,r){return new Promise(i=>{let a=0,o=0;a=setTimeout(()=>{clearInterval(o),i(null)},e),o=setInterval(()=>{let c=(r??document).querySelector(n??t);c&&(n&&(c=(r??document).querySelector(t)),c&&(i(c),clearTimeout(a),clearInterval(o)))},10)})}function mt(t,n){new MutationObserver(r=>{for(const i of r)for(const a of Array.from(i.addedNodes))if(a instanceof Element&&a.matches(t)){n(a);return}}).observe(document.body,{childList:!0,subtree:!0})}const pt='',vt='',ht='',bt='',yt='';let O="";async function D(){if(O)return O;const t=document.querySelector('script[type="module"]');if(!t)throw new Error("Failed to find script with auth token.");const r=(await(await fetch(t.src)).text()).match(new RegExp('(?<=")eyJhbGciOiJ.+?(?=")'));if(!r)throw new Error("Failed to find auth token from script.");return O=r[0],O}async function W(t,n){const e=await fetch(`https://amp-api.music.apple.com/v1/catalog/${n}/albums/${t}?extend=extendedAssetUrls`,{headers:{Authorization:`Bearer ${await D()}`}});return e.status!==200?null:(await e.json()).data[0]}async function gt(){return(await(await fetch("https://api.music.apple.com/v1/storefronts",{headers:{Authorization:`Bearer ${await D()}`}})).json()).data}const X="/:country/album/:slug/:id";function H(t){dt(X,t)}function P(t){ft(X,t)}let M=null;function $(t,n){return E(` +(function(x){typeof define=="function"&&define.amd?define(x):x()})(function(){"use strict";function x(t,e){return new Promise((n,r)=>{GM.xmlHttpRequest({method:(e==null?void 0:e.method)??"GET",url:t,headers:Object.fromEntries(new Headers(e==null?void 0:e.headers)),responseType:"blob",onload(o){const a=o.responseHeaders.split(`\r +`).slice(0,-1).map(c=>c.split(": ")),i=new Response(o.response,{headers:Object.fromEntries(a),status:o.status,statusText:o.statusText});Object.defineProperty(i,"url",{value:t}),n(i)},onerror(){r(new TypeError("Network request errored."))},ontimeout(){r(new TypeError("Network request timed out."))}})})}function rt(t){for(var e=[],n=0;n=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122||i===95){o+=t[a++];continue}break}if(!o)throw new TypeError("Missing parameter name at ".concat(n));e.push({type:"NAME",index:n,value:o}),n=a;continue}if(r==="("){var c=1,d="",a=n+1;if(t[a]==="?")throw new TypeError('Pattern cannot start with "?" at '.concat(a));for(;a)?(?!\?)/g,r=0,o=n.exec(t.source);o;)e.push({name:o[1]||r++,prefix:"",suffix:"",modifier:"",pattern:""}),o=n.exec(t.source);return t}function lt(t,e,n){var r=t.map(function(o){return V(o,e,n).source});return new RegExp("(?:".concat(r.join("|"),")"),G(n))}function ut(t,e,n){return dt(ot(t,n),e,n)}function dt(t,e,n){n===void 0&&(n={});for(var r=n.strict,o=r===void 0?!1:r,a=n.start,i=a===void 0?!0:a,c=n.end,d=c===void 0?!0:c,s=n.encode,u=s===void 0?function(j){return j}:s,f=n.delimiter,l=f===void 0?"/#?":f,p=n.endsWith,R=p===void 0?"":p,C="[".concat(q(R),"]|$"),b="[".concat(q(l),"]"),v=i?"^":"",S=0,O=t;S-1:_===void 0;o||(v+="(?:".concat(b,"(?=").concat(C,"))?")),Q||(v+="(?=".concat(b,"|").concat(C,")"))}return new RegExp(v,G(n))}function V(t,e,n){return t instanceof RegExp?st(t,e):Array.isArray(t)?lt(t,e,n):ut(t,e,n)}let w=unsafeWindow;w.wrappedJSObject&&(w=w.wrappedJSObject);const mt=typeof cloneInto=="function"?cloneInto:t=>t,ft=typeof exportFunction=="function"?exportFunction:t=>t;function pt(t){return mt(t,w,{cloneFunctions:!0,wrapReflectors:!0})}function vt(t){return ft(t,w)}function ht(t,e){return e??(e=w),function(...n){return t.call(e,...pt(n))}}const k=[],bt=ht(w.history.pushState,w.history);w.history.pushState=vt(yt);function yt(t,e,n){bt(t,e,n),n&&z(n.toString(),k)}addEventListener("popstate",()=>{z(location.pathname,k)});function z(t,e){for(const n of e){const r=n.matcher(t)?n.onCallbacks:n.offCallbacks;for(const o of r)o()}}function W(t){let e=k.find(n=>n.pattern===t);return e||(e={pattern:t,matcher:it(t),onCallbacks:[],offCallbacks:[]},k.push(e),e)}function gt(t,e){const n=W(t);n.onCallbacks.push(e),n.matcher(location.pathname)&&e()}function wt(t,e){const n=W(t);n.offCallbacks.push(e),n.matcher(location.pathname)||e()}function H(t){return new Promise(e=>{setTimeout(e,t)})}function E(t){const e=document.createElement("div");return e.innerHTML=t,e.firstElementChild}function M(t,e,n=5e3,r){return new Promise(o=>{let a=0,i=0;a=setTimeout(()=>{clearInterval(i),o(null)},n),i=setInterval(()=>{let c=(r??document).querySelector(e??t);c&&(e&&(c=(r??document).querySelector(t)),c&&(o(c),clearTimeout(a),clearInterval(i)))},10)})}function Et(t,e){new MutationObserver(r=>{for(const o of r)for(const a of Array.from(o.addedNodes))if(a instanceof Element&&a.matches(t)){e(a);return}}).observe(document.body,{childList:!0,subtree:!0})}const X="/:country/album/:slug/:id";function L(t){gt(X,t)}function D(t){wt(X,t)}let I=null;function N(t,e){return E(` - `)}async function N(t,n){if(!M&&(M=await C("nav","amp-chrome-player"),!M))return;const e=Array.from(M.querySelectorAll(".ame-sidebar-button"));if(t.setAttribute("data-index",n.toString()),e.length===0){M.appendChild(t);return}let r=Number.MAX_VALUE,i=e[0];for(const a of e){const o=Math.abs(Number(a.getAttribute("data-index"))-n);o>=r||(r=o,i=a)}n>Number(i.getAttribute("data-index"))?i.after(t):i.before(t)}async function Y(t){t.remove()}const Et=`.ame-album-countries-header{margin:var(--bodyGutter) var(--bodyGutter) 1em;font-size:1.1em}.ame-album-countries-container{margin:1em var(--bodyGutter) var(--bodyGutter);font-size:0}.ame-album-countries-container div{display:contents}.ame-album-countries-container a,.ame-album-countries-container span{display:inline-block;margin-right:.5em;margin-bottom:.5em;font-size:13px} -`;GM.addStyle(Et);const Z=["jp","us","de","fr","gb","in","hk","it","es","br","au","nz"];Z.reverse();let y=null;const B=$("Check Countries",pt);B.addEventListener("click",async()=>{const t=document.querySelector(".section");t&&await K(t)}),H(async()=>{const t=await C(".page-error");t&&K(t)}),H(()=>{y==null||y.abort(),y=null}),P(()=>{y==null||y.abort(),y=null});async function K(t){if(y)return;const n=new AbortController;y=n;const e=location.pathname.split("/")[4],r=E('
Availability in the following storefronts:
'),i=E(` + `)}async function P(t,e){if(!I&&(I=await M("nav","amp-chrome-player"),!I))return;const n=Array.from(I.querySelectorAll(".ame-sidebar-button"));if(t.setAttribute("data-index",e.toString()),n.length===0){I.appendChild(t);return}let r=Number.MAX_VALUE,o=n[0];for(const a of n){const i=Math.abs(Number(a.getAttribute("data-index"))-e);i>=r||(r=i,o=a)}e>Number(o.getAttribute("data-index"))?o.after(t):o.before(t)}async function Y(t){t.remove()}const xt='',At='',Tt='',_t='',qt='';let $="";async function Z(){if($)return $;const t=document.querySelector('script[type="module"]');if(!t)throw new Error("Failed to find script with auth token.");const r=(await(await x(t.src)).text()).match(new RegExp('(?<=")eyJhbGciOiJ.+?(?=")'));if(!r)throw new Error("Failed to find auth token from script.");return $=r[0],$}async function K(t,e){const n=await x(`https://amp-api.music.apple.com/v1/catalog/${e}/albums/${t}?extend=extendedAssetUrls`,{headers:{Origin:"https://music.apple.com",Referer:"https://music.apple.com/",Authorization:`Bearer ${await Z()}`}});return n.status!==200?null:(await n.json()).data[0]}async function Rt(){return(await(await x("https://api.music.apple.com/v1/storefronts",{headers:{Origin:"https://music.apple.com",Referer:"https://music.apple.com/",Authorization:`Bearer ${await Z()}`}})).json()).data}const Ct=`.ame-album-countries-header{margin:var(--bodyGutter) var(--bodyGutter) 1em;font-size:1.1em}.ame-album-countries-container{margin:1em var(--bodyGutter) var(--bodyGutter);font-size:0}.ame-album-countries-container div{display:contents}.ame-album-countries-container a,.ame-album-countries-container span{display:inline-block;margin-right:.5em;margin-bottom:.5em;font-size:13px} +`;GM.addStyle(Ct);const B=["jp","us","de","fr","gb","in","hk","it","es","br","au","nz"];B.reverse();let y=null;const F=N("Check Countries",xt);F.addEventListener("click",async()=>{const t=document.querySelector(".section");t&&await J(t)}),L(async()=>{const t=await M(".page-error");t&&J(t)}),L(()=>{y==null||y.abort(),y=null}),D(()=>{y==null||y.abort(),y=null});async function J(t){if(y)return;const e=new AbortController;y=e;const n=location.pathname.split("/")[4],r=E('
Availability in the following storefronts:
'),o=E(`
- `),a=i.children[0],o=i.children[1],c=i.children[2];t.append(r),t.append(i);const d=await gt();d.sort((s,u)=>Math.max(Z.indexOf(u.id),0)-Math.max(Z.indexOf(s.id),0));for(const s of d){if(n.signal.aborted)break;const u=await W(e,s.id);if(!u){c.append(E(` + `),a=o.children[0],i=o.children[1],c=o.children[2];t.append(r),t.append(o);const d=await Rt();d.sort((s,u)=>Math.max(B.indexOf(u.id),0)-Math.max(B.indexOf(s.id),0));for(const s of d){if(e.signal.aborted)break;const u=await K(n,s.id);if(!u){c.append(E(` ${s.attributes.name}, - `)),await L(100);continue}const m=u.relationships.tracks.data.filter(l=>l.type==="songs").map((l,p)=>l.attributes.extendedAssetUrls?0:p+1).filter(Boolean);if(m.length){o.append(E(` - ${s.attributes.name}, - `)),await L(100);continue}a.append(E(` - ${s.attributes.name}, - `)),await L(100)}}const U=$("Search Covers",vt);U.addEventListener("click",()=>{const t=document.querySelector("h1.headings__title");if(!t)return;const n=t.innerText.replace(" - Single","").replace(" - EP",""),e=document.querySelectorAll(".headings__subtitles > a"),r=Array.from(e).map(i=>i.innerText).join(" ");open(`https://covers.musichoarders.xyz?artist=${encodeURIComponent(r)}&album=${encodeURIComponent(n)}`,"_blank")});const wt=[],At=[],xt=[],J=[];addEventListener("mousedown",async t=>{var u,m;const n=t.composedPath().slice(0,-5).filter(l=>l instanceof HTMLElement);if(!n.find(l=>l.matches("amp-contextual-menu-button")))return;const r=await C("amp-contextual-menu",void 0,300);if(!r)return;const i=await C("ul",void 0,300,r.shadowRoot);if(!i)return;const a=location.href.split("/").pop(),o=n.find(l=>l.classList.contains("artist-header"));if(a&&o){for(const l of wt)l(i,a);return}const c=n.find(l=>l.classList.contains("container-detail-header"));if(a&&c){if(location.href.includes("/playlist/")){for(const l of At)l(i,a);return}if(location.href.includes("/album/")){for(const l of xt)l(i,a);return}}const d=n.find(l=>l.classList.contains("songs-list-row")),s=(m=(u=d==null?void 0:d.previousElementSibling)==null?void 0:u.getAttribute("href"))==null?void 0:m.split("/").pop();if(s){for(const l of J)l(i,s);return}});function Tt(t,n){return E(` + `)),await H(100);continue}const f=u.relationships.tracks.data.filter(l=>l.type==="songs").map((l,p)=>l.attributes.extendedAssetUrls?0:p+1).filter(Boolean);if(f.length){i.append(E(` + ${s.attributes.name}, + `)),await H(100);continue}a.append(E(` + ${s.attributes.name}, + `)),await H(100)}}const U=N("Search Covers",At);U.addEventListener("click",()=>{const t=document.querySelector("h1.headings__title");if(!t)return;const e=t.innerText.replace(" - Single","").replace(" - EP",""),n=document.querySelectorAll(".headings__subtitles > a"),r=Array.from(n).map(o=>o.innerText).join(" ");open(`https://covers.musichoarders.xyz?artist=${encodeURIComponent(r)}&album=${encodeURIComponent(e)}`,"_blank")});const Mt=[],It=[],St=[],tt=[];addEventListener("mousedown",async t=>{var u,f;const e=t.composedPath().slice(0,-5).filter(l=>l instanceof HTMLElement);if(!e.find(l=>l.matches("amp-contextual-menu-button")))return;const r=await M("amp-contextual-menu",void 0,300);if(!r)return;const o=await M("ul",void 0,300,r.shadowRoot);if(!o)return;const a=location.href.split("/").pop(),i=e.find(l=>l.classList.contains("artist-header"));if(a&&i){for(const l of Mt)l(o,a);return}const c=e.find(l=>l.classList.contains("container-detail-header"));if(a&&c){if(location.href.includes("/playlist/")){for(const l of It)l(o,a);return}if(location.href.includes("/album/")){for(const l of St)l(o,a);return}}const d=e.find(l=>l.classList.contains("songs-list-row")),s=(f=(u=d==null?void 0:d.previousElementSibling)==null?void 0:u.getAttribute("href"))==null?void 0:f.split("/").pop();if(s){for(const l of tt)l(o,s);return}});function Ot(t,e){return E(`
  • - `)}function _t(t,n,e=Number.MAX_VALUE){n.addEventListener("click",o=>{var d,s;const c=(s=(d=t.previousElementSibling)==null?void 0:d.shadowRoot)==null?void 0:s.firstElementChild;c==null||c.click()},{once:!0});const r=Array.from(n.querySelectorAll("amp-contextual-menu-item"));if(n.setAttribute("data-priority",e.toString()),r.length===0){t.prepend(n);return}let i=Number.MAX_VALUE,a=r[0];for(const o of r){const c=Math.abs(Number(o.getAttribute("data-priority"))-e);c>=i||(i=c,a=o)}e>Number(a.getAttribute("data-priority"))?a.after(n):a.before(n)}function qt(t){J.push(t)}const tt=$("Copy Authorization",ht);tt.addEventListener("click",async()=>{GM.setClipboard(await D())}),qt((t,n)=>{const e=Tt("Copy ID",yt);e.addEventListener("click",()=>{GM.setClipboard(n)}),_t(t,e)});let g=null;const et=$("Check Qualities",bt);et.addEventListener("click",async()=>{var a;if(g)return;const t=new AbortController;g=t;const n=location.pathname.split("/")[1],e=location.pathname.split("/")[4],r=await W(e,n);if(!r)return;const i=Array.from(document.querySelectorAll(".songs-list-row__song-wrapper"));for(const o of r.relationships.tracks.data){if(t.signal.aborted)break;if(o.type!=="songs")continue;const c=i.shift();if(!c)continue;if((a=c.querySelector(".ame-track-quality"))==null||a.remove(),!o.attributes.extendedAssetUrls){c.appendChild(E('[unavailable]'));continue}const d=await(await fetch(o.attributes.extendedAssetUrls.enhancedHls)).text();let s;for(const m of d.split(` -`)){if(!m.startsWith('#EXT-X-SESSION-DATA:DATA-ID="com.apple.hls.audioAssetMetadata"'))continue;const l=m.split("VALUE=")[1].slice(1,-1);s=JSON.parse(atob(l));break}const u=Object.values(s).sort(Ct).map(Mt);c.appendChild(E(`${u[0]}`)),await L(150)}}),H(()=>{g==null||g.abort(),g=null}),P(()=>{g==null||g.abort(),g=null});const nt=["alac","aac ","aach"];function Ct(t,n){return nt.indexOf(t["AUDIO-FORMAT-ID"])-nt.indexOf(n["AUDIO-FORMAT-ID"])||t["BIT-DEPTH"]-n["BIT-DEPTH"]||t["SAMPLE-RATE"]-n["SAMPLE-RATE"]||t["BIT-RATE"]-n["BIT-RATE"]}function Mt(t){switch(t["AUDIO-FORMAT-ID"]){case"alac":return`ALAC ${t["BIT-DEPTH"]}bit ${Math.floor(Number(t["SAMPLE-RATE"])/1e3)}kHz`;case"aac ":return`AAC ${Math.floor(Number(t["BIT-RATE"])/1e3)}kbps`;case"aach":return`AAC-HE ${Math.floor(Number(t["BIT-RATE"])/1e3)}kbps`}return"Unknown"}const Rt=`.ame-color-primary{color:var(--systemPrimary)}.ame-color-secondary{color:var(--systemSecondary)}.ame-color-tertiary{color:var(--systemTertiary)}.ame-color-warning{color:var(--systemYellow)}.upsell-banner,.banner-container{display:none}@media (min-width: 484px){.header{pointer-events:none}#navigation>*{pointer-events:auto}#scrollable-page{grid-column-start:1;grid-column-end:3;padding-left:33.8843vw}}@media (min-width: 767px){#scrollable-page{padding-left:260px}}.navigation__scrollable-container+.navigation__native-cta{display:none}nav{padding-bottom:.5em;grid-template-rows:min-content min-content minmax(0,min-content) min-content min-content min-content min-content min-content min-content min-content min-content!important}.navigation__scrollable-container{margin-bottom:.5em}.navigation__native-cta{display:contents}.native-cta{padding-top:8px!important;padding-bottom:8px!important;border-top:none!important}.native-cta__button svg,.native-cta__button .native-cta__label{transition:50ms linear color,50ms linear fill}.native-cta__button:active svg,.native-cta__button:active .native-cta__label{color:#fff!important;fill:#fff!important}.page-error{width:100%!important;max-width:900px!important}.page-error__title+.button button{padding-left:1em;padding-right:1em} -`;GM.addStyle(Rt),C("nav","amp-chrome-player").then(t=>{t&&N(tt,0)}),H(async()=>{N(B,100),N(et,200),N(U,300)}),P(()=>{Y(U),Y(B)}),mt('iframe[src^="/includes/commerce/subscribe"]',()=>{const t=document.querySelector(".backdrop");t==null||t.click()})}); + `)}function kt(t,e,n=Number.MAX_VALUE){e.addEventListener("click",i=>{var d,s;const c=(s=(d=t.previousElementSibling)==null?void 0:d.shadowRoot)==null?void 0:s.lastElementChild;c==null||c.click()},{once:!0});const r=Array.from(e.querySelectorAll("amp-contextual-menu-item"));if(e.setAttribute("data-priority",n.toString()),r.length===0){t.prepend(e);return}let o=Number.MAX_VALUE,a=r[0];for(const i of r){const c=Math.abs(Number(i.getAttribute("data-priority"))-n);c>=o||(o=c,a=i)}n>Number(a.getAttribute("data-priority"))?a.after(e):a.before(e)}function Ht(t){tt.push(t)}const et=N("Copy Authorization",Tt);et.addEventListener("click",async()=>{GM.setClipboard(await Z())}),Ht((t,e)=>{const n=Ot("Copy ID",qt);n.addEventListener("click",()=>{GM.setClipboard(e)}),kt(t,n)});let g=null;const nt=N("Check Qualities",_t);nt.addEventListener("click",async()=>{var a;if(g)return;const t=new AbortController;g=t;const e=location.pathname.split("/")[1],n=location.pathname.split("/")[4],r=await K(n,e);if(!r)return;const o=Array.from(document.querySelectorAll(".songs-list-row__song-wrapper"));for(const i of r.relationships.tracks.data){if(t.signal.aborted)break;if(i.type!=="songs")continue;const c=o.shift();if(!c)continue;if((a=c.querySelector(".ame-track-quality"))==null||a.remove(),!i.attributes.extendedAssetUrls){c.appendChild(E('[unavailable]'));continue}const d=await(await x(i.attributes.extendedAssetUrls.enhancedHls)).text();let s;for(const f of d.split(` +`)){if(!f.startsWith('#EXT-X-SESSION-DATA:DATA-ID="com.apple.hls.audioAssetMetadata"'))continue;const l=f.split("VALUE=")[1].slice(1,-1);s=JSON.parse(atob(l));break}const u=Object.values(s).sort(Lt).map(Nt);c.appendChild(E(`${u[0]}`)),await H(150)}}),L(()=>{g==null||g.abort(),g=null}),D(()=>{g==null||g.abort(),g=null});const at=["alac","aac ","aach"];function Lt(t,e){return at.indexOf(t["AUDIO-FORMAT-ID"])-at.indexOf(e["AUDIO-FORMAT-ID"])||t["BIT-DEPTH"]-e["BIT-DEPTH"]||t["SAMPLE-RATE"]-e["SAMPLE-RATE"]||t["BIT-RATE"]-e["BIT-RATE"]}function Nt(t){switch(t["AUDIO-FORMAT-ID"]){case"alac":return`ALAC ${t["BIT-DEPTH"]}bit ${Math.floor(Number(t["SAMPLE-RATE"])/1e3)}kHz`;case"aac ":return`AAC ${Math.floor(Number(t["BIT-RATE"])/1e3)}kbps`;case"aach":return`AAC-HE ${Math.floor(Number(t["BIT-RATE"])/1e3)}kbps`}return"Unknown"}const Pt=`.ame-color-primary{color:var(--systemPrimary)}.ame-color-secondary{color:var(--systemSecondary)}.ame-color-tertiary{color:var(--systemTertiary)}.ame-color-warning{color:var(--systemYellow)}.upsell-banner,.banner-container{display:none}@media (min-width: 484px){.header{pointer-events:none}#navigation>*{pointer-events:auto}#scrollable-page{grid-column-start:1;grid-column-end:3;padding-left:33.8843vw}}@media (min-width: 767px){#scrollable-page{padding-left:260px}}.navigation__scrollable-container+.navigation__native-cta{display:none}nav{padding-bottom:.5em;grid-template-rows:min-content min-content minmax(0,min-content) min-content min-content min-content min-content min-content min-content min-content min-content!important}.navigation__scrollable-container{margin-bottom:.5em}.navigation__native-cta{display:contents}.native-cta{padding-top:8px!important;padding-bottom:8px!important;border-top:none!important}.native-cta__button svg,.native-cta__button .native-cta__label{transition:50ms linear color,50ms linear fill}.native-cta__button:active svg,.native-cta__button:active .native-cta__label{color:#fff!important;fill:#fff!important}.page-error{width:100%!important;max-width:900px!important}.page-error__title+.button button{padding-left:1em;padding-right:1em} +`;GM.addStyle(Pt),M("nav","amp-chrome-player").then(t=>{t&&P(et,0)}),L(async()=>{P(F,100),P(nt,200),P(U,300)}),D(()=>{Y(U),Y(F)}),Et('iframe[src^="/includes/commerce/subscribe"]',()=>{const t=document.querySelector(".backdrop");t==null||t.click()})}); diff --git a/package.json b/package.json index c470e25..b98651e 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "vite": "^4.0.0" }, "scripts": { - "start": "node out/build.js", - "build": "tsc && node out/build.js --production", + "start": "node out-scripts/build.js", + "build": "tsc && node out-scripts/build.js --production", "postinstall": "tsc -p tsconfig.scripts.json" } } diff --git a/scripts/build.ts b/scripts/build.ts index 28c04ed..698bf7b 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -56,8 +56,7 @@ const configs = entries.map(entry => ({ ], build: { watch: args.values.production ? undefined : {}, - outDir: args.values.production ? 'dist/' : 'out/', - emptyOutDir: args.values.production + outDir: args.values.production ? 'dist/' : 'out/' } })); diff --git a/src/applemusic/main.ts b/src/applemusic/main.ts index 7c5c263..be8d786 100644 --- a/src/applemusic/main.ts +++ b/src/applemusic/main.ts @@ -1,7 +1,7 @@ // ==UserScript== // @namespace ame-applemusic // @name Ame (Apple Music) -// @version 1.0.0 +// @version 1.0.1 // @author SuperSaltyGamer // @run-at document-start // @match https://music.apple.com/* @@ -11,14 +11,14 @@ // ==/UserScript== import { observe, waitFor } from '../common'; +import { offAlbumRoute, onAlbumRoute } from './glue/routing'; +import { hideButtonElement, showButtonElement } from './glue/ui/sidebar'; import { checkCountriesButtonEl } from './modules/countries'; import { searchCoversButtonEl } from './modules/covers'; import { copyAuthButtonEl } from './modules/dev'; import { checkQualitiesButtonEl } from './modules/qualities'; import './modules/qualities'; import styles from './style.css?inline'; -import { offAlbumRoute, onAlbumRoute } from './glue/routing'; -import { hideButtonElement, showButtonElement } from './glue/ui/sidebar'; GM.addStyle(styles); diff --git a/tsconfig.scripts.json b/tsconfig.scripts.json index 3178403..e3a3f47 100644 --- a/tsconfig.scripts.json +++ b/tsconfig.scripts.json @@ -4,7 +4,7 @@ "module": "esnext", "moduleResolution": "node", "strict": true, - "outDir": "out/" + "outDir": "out-scripts/" }, "include": [ "scripts/"