From ddf92a9824c70bee42f6b39dec09c9c7c48cab3d Mon Sep 17 00:00:00 2001 From: blmage Date: Sun, 6 Nov 2022 21:55:55 +0100 Subject: [PATCH] Update production build and bump extension version --- dist/manifest.json | 2 +- dist/src/observer.js | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/manifest.json b/dist/manifest.json index 5eb1491..8987cf3 100644 --- a/dist/manifest.json +++ b/dist/manifest.json @@ -1,6 +1,6 @@ { "name": "Duolingo Solution Viewer", - "version": "4.11.0", + "version": "4.11.1", "description": "Provides access to the lists of solutions for Duolingo's translation / listening challenges, and restores the correction of typos.", "permissions": [ "https://*.duolingo.com/" diff --git a/dist/src/observer.js b/dist/src/observer.js index 08cd7e7..f8b2d00 100644 --- a/dist/src/observer.js +++ b/dist/src/observer.js @@ -1 +1 @@ -!function(){"use strict";const e=()=>{},t=e=>"number"==typeof e&&Number.isFinite(e),n=e=>"string"==typeof e,a=Array.isArray,l=e=>"object"==typeof e&&!!e&&!a(e),o=e=>"function"==typeof e,s=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r=e=>{for(let t in e)if(s(e,t))return!1;return!0},i=e=>{let t=null;if("/"===e.charAt(0)&&("/"===e.charAt(1)?e=`https://${e}`:t=e),null===t)try{t=new URL(e).pathname}catch(n){t=e}return t},u=e=>`__duo-toolbox__-${e}`,d=u("global_variables"),c=(e,t)=>(l(window[d])||(window[d]={}),s(window[d],e)?window[d][e]:t),p=(e,t)=>{l(window[d])||(window[d]={}),window[d][e]=t},v=(e,t,n)=>{const a=t(c(e,n));return p(e,a),a},f=u("original_function"),g=u("override_version"),_=(t,n,a,r=1)=>((e,t,n,a,l=1)=>{s(window,e)&&t(window[e])?n(window[e]):v("pending_global_listeners",((o={})=>{var s;if(!o[e]){o[e]={};let n=window[e];Object.defineProperty(window,e,{get:()=>n,set:a=>{t(a)?(Object.defineProperty(window,e,{value:a,configurable:!0,enumerable:!0,writable:!0}),Object.values(o[e]).forEach((e=>e.callback(a)))):n=a},configurable:!0})}return l>(Number(null===(s=o[e][a])||void 0===s?void 0:s.version)||0)&&(o[e][a]={callback:n,version:l}),o}))})(t,o,(t=>((t,n,a,o=1)=>{var s;if(l(t)&&o>(Number(null===(s=t[n])||void 0===s?void 0:s[g])||0)){var r;const l=(null===(r=t[n])||void 0===r?void 0:r[f])||t[n]||e;t[n]=a(l),t[n][f]=l,t[n][g]=o}})(null==t?void 0:t.prototype,n,a,r)),`instance_method:${n}`,r),h=u("logging_iframe"),m=u("ui_event_notification"),y=(e,t)=>{window.postMessage({type:m,event:e,value:t},"*")},b=()=>(()=>{let e=document.getElementById(h);return e&&e.isConnected||(e=document.createElement("iframe"),e.id=h,e.style.display="none",document.body.appendChild(e)),e})().contentWindow.console,w=(...e)=>b().error(...e),O=["characterIntro","characterMatch","characterPuzzle","characterSelect","characterTrace","selectPronunciation","selectTranscription"],k=e=>{var t,n;return(null===(t=e.metadata)||void 0===t?void 0:t.source_language)||e.sourceLanguage||(null===(n=e.metadata)||void 0===n?void 0:n.learning_language)},x=e=>{var t;return(null===(t=e.metadata)||void 0===t?void 0:t.target_language)||e.targetLanguage||k(e)},K="effect",$="tts_sentence",j="tts_word",V="tts_morpheme",L="unknown",M="normal",S="slow",T="howler",q="rate",E="volume",I=u("forced_setting"),N=e=>l(e)&&!!e[I],C=e=>e.value,P=e=>({[I]:!0,value:e}),R=(e,n)=>q===e&&t(n)||E===e&&n>=0&&n<=1,A=(e,n)=>((e,t,n,a=1)=>{if(!l(e))return;const o=u(`${t}_override_version`);a>(Number(e[o])||0)&&Object.defineProperty(e,t,n(Object.getOwnPropertyDescriptor(e,t)))})(HTMLMediaElement,n,(n=>({...n,set:function(a){const l=z[e];t(a)?(this[l.originalValueKey]=a,s(this,l.valueKey)&&(a=this[l.isRelativeKey]?B(e,a*this[l.valueKey]):this[l.valueKey])):N(a)&&(a=C(a)),t(a)&&(this[l.listenerValueKey]=a),n.set.call(this,a)}}))),D=(e,t)=>_("Howl",t,(n=>function(){const a=this,l=arguments,o=z[e];let r=!1;const i=a._queue.length;(1===l.length||2===l.length&&void 0===l[1])&&-1===a._getSoundIds().indexOf(l[0])&&(N(l[0])?(r=!0,l[0]=C(l[0])):R(e,l[0])&&(a[o.originalValueKey]=l[0],s(a,o.valueKey)&&(r=!0,a[o.isRelativeKey]?l[0]=B(e,l[0]*a[o.valueKey]):l[0]=a[o.valueKey])),r&&(a[o.listenerValueKey]=l[0]));const u=n.apply(a,arguments);return r&&i({...a,functions:{audio:{applyOverride:()=>A(e,n),getter:e=>e[t],setter:(e,n)=>e[t]=n,hasQueuedUpdate:()=>!1},[T]:{applyOverride:()=>D(e,n),getter:e=>e[n](),setter:(e,t)=>e[n](t),hasQueuedUpdate:e=>e._queue.find((e=>e.event===n))}},priorityKey:u(`${e}_priority`),isRelativeKey:u(`${e}_is_relative`),valueKey:u(`forced_${e}_value`),originalValueKey:u(`original_${e}_value`),listenerValueKey:u(`${e}_value`)}),z={[q]:H(q,"playbackRate","rate",{minValue:.5,maxValue:4,defaultValue:1}),[E]:H(E,"volume","volume",{minValue:0,maxValue:1,defaultValue:1})},B=(e,t)=>z[e]?Math.max(z[e].minValue,Math.min(t,z[e].maxValue)):t,U="event_listeners",Q=()=>{return`__listener::${e="last_event_listener_id",v(`__counter::${e}__`,(e=>e+1),0)}__`;var e},X=e=>{var t;return(null===(t=c(U,{}))||void 0===t?void 0:t[e])||{}},F=(e,t)=>{v(U,(n=>Object.assign(n||{},{[e]:t})))},J=e=>!r(X(e)),W=(e,t)=>{const n=X(e);return r(n)?null:t(Object.values(n))},G=(e,t,n=Q())=>{const a=X(e);return a[n]=t,F(e,a),()=>Z(e,n)},Y=(e,t,n,l,o=G,s=Q())=>{const r=`__${t}::${e}__`;var i;i=r,X(t)[i]||o(t,((...t)=>{const n=l(...t);a(n)&&ee(e,...n)}),r);const u=G(e,n,s);return()=>{u(),J(e)||Z(t,r)}},Z=(e,t)=>{const n=X(e);delete n[t],F(e,n)},ee=(e,...t)=>W(e,(e=>e.flatMap((e=>{try{return[e(...t)]}catch(e){return[]}})))),te="practice_session_loaded",ne="practice_challenges_loaded",ae="pre_fetched_session_loaded",le="story_loaded",oe="alphabets_loaded",se="forum_discussion_loaded",re="dictionary_lexeme_loaded",ie="sound_playback_requested",ue="sound_playback_confirmed",de="sound_playback_cancelled",ce={[oe]:/\/[\d]{4}-[\d]{2}-[\d]{2}\/alphabets\/courses\/(?[^/]+)\/(?[^/?]+)\/?/g,[re]:/\/api\/1\/dictionary_page/g,[se]:/\/comments\/([\d]+)/g,[te]:/\/[\d]{4}-[\d]{2}-[\d]{2}\/sessions/g,[le]:/\/api2\/stories/g,user_data_loaded:/\/[\d]{4}-[\d]{2}-[\d]{2}\/users\/[\d]+/g},pe=(e,t,n=Q())=>(_("XMLHttpRequest","open",(e=>function(t,n,a,o,s){let r,i;for(const[e,t]of Object.entries(ce))if(i=Array.from(n.matchAll(t))[0],i){r=e;break}return r&&W(r,(e=>{this.addEventListener("load",(()=>{try{const t=l(this.response)?this.response:JSON.parse(this.responseText);e.forEach((e=>e(t,i.groups||{})))}catch(e){w(e,`Could not handle the XHR result (event: ${r}): `)}}))})),e.call(this,t,n,a,o,s)}),2),G(e,t,n)),ve=(e,t=Q())=>{const a=ae,l=e=>W(a,(t=>{e.addEventListener("success",(()=>{try{t.forEach((t=>t(e.result)))}catch(e){w(e,`Could not handle the IDBRequest result (event: ${a}): `)}}))}));return _("IDBIndex","get",(e=>function(t){const a=e.call(this,t);return n(t)&&t&&"prefetchedSessions"===this.objectStore.name&&l(a),a})),_("IDBObjectStore","get",(e=>function(t){const n=e.call(this,t);return"prefetchedSessions"===this.name&&l(n),n})),G(a,e,t)},fe=e=>pe(se,e),ge=e=>{const t=e=>{let t;if(l(e)){var n;t=[{challenges:[e.challenges,e.adaptiveChallenges,null===(n=e.adaptiveInterleavedChallenges)||void 0===n?void 0:n.challenges].filter(a).flat(),sessionMetaData:e.metadata||{}}]}return t},n=Y(ne,te,e,t,pe),o=Y(ne,ae,e,t,((e,t,n)=>ve(t,n)));return()=>{n(),o()}},_e=(e,t)=>({url:e,type:$,speed:M,language:t}),he=(e,t)=>({url:e,type:j,speed:M,language:t}),me=(e,t)=>({url:e,type:V,speed:M,language:t}),ye=Object.fromEntries(["/sounds/7abe057dc8446ad325229edd6d8fd250.mp3","/sounds/2aae0ea735c8e9ed884107d6f0a09e35.mp3","/sounds/421d48c53ad6d52618dba715722278e0.mp3","/sounds/37d8f0b39dcfe63872192c89653a93f6.mp3","/sounds/0a27c1ee63dd220647e8410a0029aed2.mp3","/sounds/a28ff0a501ef5f33ca78c0afc45ee53e.mp3","/sounds/2e4669d8cf839272f0731f8afa488caf.mp3","/sounds/f0b6ab4396d5891241ef4ca73b4de13a.mp3"].map((e=>{return[e,(t=e,{url:t,type:K,speed:M,language:null})];var t}))),be=/\/duolingo-data\/tts\/(?[a-z-_]+)\/token\//i,we="sound_type_map",Oe=()=>c(we,ye),ke=[L,$,j,V,K],xe=[M,S],Ke=(e,t)=>((e,t,n)=>{for(const a of e){const e=Number(a(t,n));if(!isNaN(e)&&0!==e)return e}return 0})([(e,t)=>ke.indexOf(e.type)-ke.indexOf(t.type),(e,t)=>xe.indexOf(e.speed)-xe.indexOf(t.speed)],e,t),$e=e=>{const t=Oe()||{};for(const n of e){const e=i(n.url);(!t[e]||Ke(n,t[e])>0)&&(t[e]=n)}p(we,t)},je="sound_detection_listeners_version",Ve="sound_detection_unregistration_callbacks",Le=(e,t,n)=>{var a;return{url:e.url,type:t,speed:(null===(a=e.speed)||void 0===a?void 0:a.value)||M,language:n}},Me=()=>{const e=2<=(Number(c(je))||0);var t,o,s,r;!!c(Ve)&&e||(e||Se(),p(je,2),p(Ve,[(r=e=>(e=>{const t=e.learningLanguage;a(null==e?void 0:e.elements)&&$e(e.elements.map((e=>{var t;return(null==e||null===(t=e.line)||void 0===t?void 0:t.content)||(null==e?void 0:e.learningLanguageTitleContent)})).flatMap((e=>[null==e?void 0:e.audio,null==e?void 0:e.audioPrefix,null==e?void 0:e.audioSuffix])).map((e=>null==e?void 0:e.url)).filter(n).map((e=>_e(e,t))))})(e),pe(le,r)),(o=(e,t)=>((e,t)=>{const l=t.toLanguage;a(null==e?void 0:e.alphabets)&&n(null==t?void 0:t.toLanguage)&&$e(e.alphabets.flatMap((e=>null==e?void 0:e.groups)).flatMap((e=>null==e?void 0:e.characters)).flat().map((e=>null==e?void 0:e.ttsUrl)).filter(n).map((e=>me(e,l))))})(e,t),pe(oe,o,s)),fe((e=>{var t;n(null==(t=e)?void 0:t.tts_url)&&$e([_e(t.tts_url,t.sentence_language)])})),(t=e=>(e=>{const t=[],l=e.learning_language;n(e.tts)&&t.push(he(e.tts,l)),a(e.alternative_forms)&&t.push(e.alternative_forms.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>_e(e,l)))),$e(t.flat())})(e),pe(re,t)),ge((e=>(e=>{const t=[];for(const i of e){var o;const e=i.type,u=k(i),d=x(i);if(n(i.tts)){const n=O.indexOf(e)>=0?me:_e;t.push(n(i.tts,u))}if(n(i.slowTts)&&t.push({url:i.slowTts,type:$,speed:S,language:u}),n(i.solutionTts)&&t.push(_e(i.solutionTts,d)),a(i.choices)){const a=-1===O.indexOf(e)?he:me;t.push(i.choices.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>a(e,d))))}if(a(i.tokens)&&t.push(i.tokens.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>he(e,u)))),a(i.questionTokens)&&t.push(i.questionTokens.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>he(e,d)))),a(null===(o=i.metadata)||void 0===o?void 0:o.speakers))for(const e of i.metadata.speakers){var s,r;l(null===(s=e.tts)||void 0===s?void 0:s.tokens)&&t.push(Object.values(e.tts.tokens).filter((e=>n(e.url))).map((e=>Le(e,j,d)))),a(null===(r=e.tts)||void 0===r?void 0:r.sentence)&&t.push(e.tts.sentence.filter((e=>n(e.url))).map((e=>Le(e,$,d))))}if(a(i.pairs)){const a=-1===O.indexOf(e)?he:me;t.push(i.pairs.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>a(e,d))))}a(i.options)&&t.push(i.options.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>he(e,d))))}$e(t.flat())})(e.challenges)))]))},Se=()=>{const e=c(Ve);!a(e)||J("sound_initialized")||J(ie)||J(de)||J(ue)||(e.forEach((e=>e())),p(je,null),p(Ve,null))},Te=(e,t,n)=>{const a=(e=>{const t=Oe()[e];if(l(t))return t;const n=e.match(be);return n?he(e,n.language):null})(i(t));return{url:t,type:(null==a?void 0:a.type)||L,speed:(null==a?void 0:a.speed)||M,language:null==a?void 0:a.language,playbackStrategy:n,sound:e}},qe=(e,t)=>{_("Howl","play",(e=>function(t){var n;p("is_howler_used",!0);const a=String(this._src||(null===(n=this._parent)||void 0===n?void 0:n._src)||"").trim();return""!==a?((e,t,n,a)=>{const l=Te(e,t,n);let o=!1;try{var s;o=null===(s=ee(ie,l))||void 0===s?void 0:s.some((e=>!1===e)),ee(o?de:ue,l)}catch(e){w(e,`Could not handle playback for sound "${t}" (using "${n}"): `)}return o?null:a()})(this,a,T,(()=>e.call(this,t))):e.call(this,t)})),Me();const n=G(e,t);return()=>{n(),Se()}};ge((e=>y("session_loaded",e))),fe((e=>{e.id>0&&e.sentence_id&&e.translation_language&&y("discussion_loaded",{commentId:Number(e.id),discussionId:String(e.sentence_id).trim(),locale:String(e.translation_language).trim()})})),qe(ie,(e=>y("sound_played",null==e?void 0:e.url)))}(); +!function(){"use strict";const e=()=>{},t=e=>"number"==typeof e&&Number.isFinite(e),n=e=>"string"==typeof e,a=Array.isArray,l=e=>"object"==typeof e&&!!e&&!a(e),o=e=>"function"==typeof e,s=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r=e=>{for(let t in e)if(s(e,t))return!1;return!0},i=e=>{let t=null;if("/"===e.charAt(0)&&("/"===e.charAt(1)?e=`https://${e}`:t=e),null===t)try{t=new URL(e).pathname}catch(n){t=e}return t},u=e=>`__duo-toolbox__-${e}`,d=u("global_variables"),c=(e,t)=>(l(window[d])||(window[d]={}),s(window[d],e)?window[d][e]:t),p=(e,t)=>{l(window[d])||(window[d]={}),window[d][e]=t},f=(e,t,n)=>{const a=t(c(e,n));return p(e,a),a},v=(e,t,n,a,l=1)=>{s(window,e)&&t(window[e])?n(window[e]):f("pending_global_listeners",((o={})=>{var s;if(!o[e]){o[e]={};let n=window[e];Object.defineProperty(window,e,{get:()=>n,set:a=>{t(a)?(Object.defineProperty(window,e,{value:a,configurable:!0,enumerable:!0,writable:!0}),Object.values(o[e]).forEach((e=>e.callback(a)))):n=a},configurable:!0})}return l>(Number(null===(s=o[e][a])||void 0===s?void 0:s.version)||0)&&(o[e][a]={callback:n,version:l}),o}))},g=u("original_function"),h=u("override_version"),_=(t,n,a,o=1)=>{var s;if(l(t)&&o>(Number(null===(s=t[n])||void 0===s?void 0:s[h])||0)){var r;const l=(null===(r=t[n])||void 0===r?void 0:r[g])||t[n]||e;t[n]=a(l),t[n][g]=l,t[n][h]=o}},m=(e,t,n,a=1)=>v(e,o,(e=>_(null==e?void 0:e.prototype,t,n,a)),`instance_method:${t}`,a),y=u("logging_iframe"),b=u("ui_event_notification"),w=(e,t)=>{window.postMessage({type:b,event:e,value:t},"*")},O=()=>(()=>{let e=document.getElementById(y);return e&&e.isConnected||(e=document.createElement("iframe"),e.id=y,e.style.display="none",document.body.appendChild(e)),e})().contentWindow.console,k=(...e)=>O().error(...e),x=["characterIntro","characterMatch","characterPuzzle","characterSelect","characterTrace","selectPronunciation","selectTranscription"],$=e=>{var t,n;return(null===(t=e.metadata)||void 0===t?void 0:t.source_language)||e.sourceLanguage||(null===(n=e.metadata)||void 0===n?void 0:n.learning_language)},K=e=>{var t;return(null===(t=e.metadata)||void 0===t?void 0:t.target_language)||e.targetLanguage||$(e)},j="effect",V="tts_sentence",L="tts_word",S="tts_morpheme",M="unknown",q="normal",E="slow",T="howler",I="rate",N="volume",C=u("forced_setting"),R=e=>l(e)&&!!e[C],A=e=>e.value,P=e=>({[C]:!0,value:e}),D=(e,n)=>I===e&&t(n)||N===e&&n>=0&&n<=1,H=(e,n)=>((e,t,n,a=1)=>{if(!l(e))return;const o=u(`${t}_override_version`);a>(Number(e[o])||0)&&Object.defineProperty(e,t,n(Object.getOwnPropertyDescriptor(e,t)))})(HTMLMediaElement,n,(n=>({...n,set:function(a){const l=U[e];t(a)?(this[l.originalValueKey]=a,s(this,l.valueKey)&&(a=this[l.isRelativeKey]?Q(e,a*this[l.valueKey]):this[l.valueKey])):R(a)&&(a=A(a)),t(a)&&(this[l.listenerValueKey]=a),n.set.call(this,a)}}))),z=(e,t)=>m("Howl",t,(n=>function(){const a=this,l=arguments,o=U[e];let r=!1;const i=a._queue.length;(1===l.length||2===l.length&&void 0===l[1])&&-1===a._getSoundIds().indexOf(l[0])&&(R(l[0])?(r=!0,l[0]=A(l[0])):D(e,l[0])&&(a[o.originalValueKey]=l[0],s(a,o.valueKey)&&(r=!0,a[o.isRelativeKey]?l[0]=Q(e,l[0]*a[o.valueKey]):l[0]=a[o.valueKey])),r&&(a[o.listenerValueKey]=l[0]));const u=n.apply(a,arguments);return r&&i({...a,functions:{audio:{applyOverride:()=>H(e,n),getter:e=>e[t],setter:(e,n)=>e[t]=n,hasQueuedUpdate:()=>!1},[T]:{applyOverride:()=>z(e,n),getter:e=>e[n](),setter:(e,t)=>e[n](t),hasQueuedUpdate:e=>e._queue.find((e=>e.event===n))}},priorityKey:u(`${e}_priority`),isRelativeKey:u(`${e}_is_relative`),valueKey:u(`forced_${e}_value`),originalValueKey:u(`original_${e}_value`),listenerValueKey:u(`${e}_value`)}),U={[I]:B(I,"playbackRate","rate",{minValue:.5,maxValue:4,defaultValue:1}),[N]:B(N,"volume","volume",{minValue:0,maxValue:1,defaultValue:1})},Q=(e,t)=>U[e]?Math.max(U[e].minValue,Math.min(t,U[e].maxValue)):t,X="event_listeners",F=()=>{return`__listener::${e="last_event_listener_id",f(`__counter::${e}__`,(e=>e+1),0)}__`;var e},J=e=>{var t;return(null===(t=c(X,{}))||void 0===t?void 0:t[e])||{}},W=(e,t)=>{f(X,(n=>Object.assign(n||{},{[e]:t})))},G=e=>!r(J(e)),Y=(e,t)=>{const n=J(e);return r(n)?null:t(Object.values(n))},Z=(e,t,n=F())=>{const a=J(e);return a[n]=t,W(e,a),()=>te(e,n)},ee=(e,t,n,l,o=Z,s=F())=>{const r=`__${t}::${e}__`;var i;i=r,J(t)[i]||o(t,((...t)=>{const n=l(...t);a(n)&&ne(e,...n)}),r);const u=Z(e,n,s);return()=>{u(),G(e)||te(t,r)}},te=(e,t)=>{const n=J(e);delete n[t],W(e,n)},ne=(e,...t)=>Y(e,(e=>e.flatMap((e=>{try{return[e(...t)]}catch(e){return[]}})))),ae="practice_session_loaded",le="practice_challenges_loaded",oe="pre_fetched_session_loaded",se="story_loaded",re="alphabets_loaded",ie="forum_discussion_loaded",ue="dictionary_lexeme_loaded",de="sound_playback_requested",ce="sound_playback_confirmed",pe="sound_playback_cancelled",fe={[re]:/\/[\d]{4}-[\d]{2}-[\d]{2}\/alphabets\/courses\/(?[^/]+)\/(?[^/?]+)\/?/g,[ue]:/\/api\/1\/dictionary_page/g,[ie]:/\/comments\/([\d]+)/g,[ae]:/\/[\d]{4}-[\d]{2}-[\d]{2}\/sessions/g,[se]:/\/api2\/stories/g,user_data_loaded:/\/[\d]{4}-[\d]{2}-[\d]{2}\/users\/[\d]+/g},ve=(e,t,n=F())=>(m("XMLHttpRequest","open",(e=>function(t,n,a,o,s){let r,i;for(const[e,t]of Object.entries(fe))if(i=Array.from(n.matchAll(t))[0],i){r=e;break}return r&&Y(r,(e=>{this.addEventListener("load",(()=>{try{const t=l(this.response)?this.response:JSON.parse(this.responseText);e.forEach((e=>e(t,i.groups||{})))}catch(e){k(e,`Could not handle the XHR result (event: ${r}): `)}}))})),e.call(this,t,n,a,o,s)}),2),((e,t,n=1)=>{v(e,o,(()=>_(window,e,t,n)),"global",n)})("fetch",(e=>function(t,n){const a=t instanceof Request?t.url:String(t);let l,o,s=null;for(const[e,t]of Object.entries(fe))if(o=Array.from(a.matchAll(t))[0],o){l=e;break}return l&&(s=Y(l,(e=>t=>{try{e.forEach((e=>e(t,o.groups||{})))}catch(e){k(e,`Could not handle the fetch result (event: ${l}): `)}}))),e.call(this,t,n).then((e=>{if(!s)return e;const t=e.clone();return e.json().then((e=>(s(e),t))).catch((()=>t))}))})),Z(e,t,n)),ge=(e,t=F())=>{const a=oe,l=e=>Y(a,(t=>{e.addEventListener("success",(()=>{try{t.forEach((t=>t(e.result)))}catch(e){k(e,`Could not handle the IDBRequest result (event: ${a}): `)}}))}));return m("IDBIndex","get",(e=>function(t){const a=e.call(this,t);return n(t)&&t&&"prefetchedSessions"===this.objectStore.name&&l(a),a})),m("IDBObjectStore","get",(e=>function(t){const n=e.call(this,t);return"prefetchedSessions"===this.name&&l(n),n})),Z(a,e,t)},he=e=>ve(ie,e),_e=e=>{const t=e=>{let t;if(l(e)){var n;t=[{challenges:[e.challenges,e.adaptiveChallenges,null===(n=e.adaptiveInterleavedChallenges)||void 0===n?void 0:n.challenges].filter(a).flat(),sessionMetaData:e.metadata||{}}]}return t},n=ee(le,ae,e,t,ve),o=ee(le,oe,e,t,((e,t,n)=>ge(t,n)));return()=>{n(),o()}},me=(e,t)=>({url:e,type:V,speed:q,language:t}),ye=(e,t)=>({url:e,type:L,speed:q,language:t}),be=(e,t)=>({url:e,type:S,speed:q,language:t}),we=Object.fromEntries(["/sounds/7abe057dc8446ad325229edd6d8fd250.mp3","/sounds/2aae0ea735c8e9ed884107d6f0a09e35.mp3","/sounds/421d48c53ad6d52618dba715722278e0.mp3","/sounds/37d8f0b39dcfe63872192c89653a93f6.mp3","/sounds/0a27c1ee63dd220647e8410a0029aed2.mp3","/sounds/a28ff0a501ef5f33ca78c0afc45ee53e.mp3","/sounds/2e4669d8cf839272f0731f8afa488caf.mp3","/sounds/f0b6ab4396d5891241ef4ca73b4de13a.mp3"].map((e=>{return[e,(t=e,{url:t,type:j,speed:q,language:null})];var t}))),Oe=/\/duolingo-data\/tts\/(?[a-z-_]+)\/token\//i,ke="sound_type_map",xe=()=>c(ke,we),$e=[M,V,L,S,j],Ke=[q,E],je=(e,t)=>((e,t,n)=>{for(const a of e){const e=Number(a(t,n));if(!isNaN(e)&&0!==e)return e}return 0})([(e,t)=>$e.indexOf(e.type)-$e.indexOf(t.type),(e,t)=>Ke.indexOf(e.speed)-Ke.indexOf(t.speed)],e,t),Ve=e=>{const t=xe()||{};for(const n of e){const e=i(n.url);(!t[e]||je(n,t[e])>0)&&(t[e]=n)}p(ke,t)},Le="sound_detection_listeners_version",Se="sound_detection_unregistration_callbacks",Me=(e,t,n)=>{var a;return{url:e.url,type:t,speed:(null===(a=e.speed)||void 0===a?void 0:a.value)||q,language:n}},qe=()=>{const e=2<=(Number(c(Le))||0);var t,o,s,r;!!c(Se)&&e||(e||Ee(),p(Le,2),p(Se,[(r=e=>(e=>{const t=e.learningLanguage;a(null==e?void 0:e.elements)&&Ve(e.elements.map((e=>{var t;return(null==e||null===(t=e.line)||void 0===t?void 0:t.content)||(null==e?void 0:e.learningLanguageTitleContent)})).flatMap((e=>[null==e?void 0:e.audio,null==e?void 0:e.audioPrefix,null==e?void 0:e.audioSuffix])).map((e=>null==e?void 0:e.url)).filter(n).map((e=>me(e,t))))})(e),ve(se,r)),(o=(e,t)=>((e,t)=>{const l=t.toLanguage;a(null==e?void 0:e.alphabets)&&n(null==t?void 0:t.toLanguage)&&Ve(e.alphabets.flatMap((e=>null==e?void 0:e.groups)).flatMap((e=>null==e?void 0:e.characters)).flat().map((e=>null==e?void 0:e.ttsUrl)).filter(n).map((e=>be(e,l))))})(e,t),ve(re,o,s)),he((e=>{var t;n(null==(t=e)?void 0:t.tts_url)&&Ve([me(t.tts_url,t.sentence_language)])})),(t=e=>(e=>{const t=[],l=e.learning_language;n(e.tts)&&t.push(ye(e.tts,l)),a(e.alternative_forms)&&t.push(e.alternative_forms.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>me(e,l)))),Ve(t.flat())})(e),ve(ue,t)),_e((e=>(e=>{const t=[];for(const i of e){var o;const e=i.type,u=$(i),d=K(i);if(n(i.tts)){const n=x.indexOf(e)>=0?be:me;t.push(n(i.tts,u))}if(n(i.slowTts)&&t.push({url:i.slowTts,type:V,speed:E,language:u}),n(i.solutionTts)&&t.push(me(i.solutionTts,d)),a(i.choices)){const a=-1===x.indexOf(e)?ye:be;t.push(i.choices.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>a(e,d))))}if(a(i.tokens)&&t.push(i.tokens.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>ye(e,u)))),a(i.questionTokens)&&t.push(i.questionTokens.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>ye(e,d)))),a(null===(o=i.metadata)||void 0===o?void 0:o.speakers))for(const e of i.metadata.speakers){var s,r;l(null===(s=e.tts)||void 0===s?void 0:s.tokens)&&t.push(Object.values(e.tts.tokens).filter((e=>n(e.url))).map((e=>Me(e,L,d)))),a(null===(r=e.tts)||void 0===r?void 0:r.sentence)&&t.push(e.tts.sentence.filter((e=>n(e.url))).map((e=>Me(e,V,d))))}if(a(i.pairs)){const a=-1===x.indexOf(e)?ye:be;t.push(i.pairs.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>a(e,d))))}a(i.options)&&t.push(i.options.map((e=>null==e?void 0:e.tts)).filter(n).map((e=>ye(e,d))))}Ve(t.flat())})(e.challenges)))]))},Ee=()=>{const e=c(Se);!a(e)||G("sound_initialized")||G(de)||G(pe)||G(ce)||(e.forEach((e=>e())),p(Le,null),p(Se,null))},Te=(e,t,n)=>{const a=(e=>{const t=xe()[e];if(l(t))return t;const n=e.match(Oe);return n?ye(e,n.language):null})(i(t));return{url:t,type:(null==a?void 0:a.type)||M,speed:(null==a?void 0:a.speed)||q,language:null==a?void 0:a.language,playbackStrategy:n,sound:e}},Ie=(e,t)=>{m("Howl","play",(e=>function(t){var n;p("is_howler_used",!0);const a=String(this._src||(null===(n=this._parent)||void 0===n?void 0:n._src)||"").trim();return""!==a?((e,t,n,a)=>{const l=Te(e,t,n);let o=!1;try{var s;o=null===(s=ne(de,l))||void 0===s?void 0:s.some((e=>!1===e)),ne(o?pe:ce,l)}catch(e){k(e,`Could not handle playback for sound "${t}" (using "${n}"): `)}return o?null:a()})(this,a,T,(()=>e.call(this,t))):e.call(this,t)})),qe();const n=Z(e,t);return()=>{n(),Ee()}};_e((e=>w("session_loaded",e))),he((e=>{e.id>0&&e.sentence_id&&e.translation_language&&w("discussion_loaded",{commentId:Number(e.id),discussionId:String(e.sentence_id).trim(),locale:String(e.translation_language).trim()})})),Ie(de,(e=>w("sound_played",null==e?void 0:e.url)))}(); diff --git a/package.json b/package.json index d08cbca..ef42a3a 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "A browser extension providing access to the complete lists of accepted solutions for Duolingo's translation challenges.", "license": "MIT", "author": "blmage", - "version": "4.10.6", + "version": "4.11.1", "scripts": { "build": "rollup -c --environment production", "build-debug": "rollup -c --environment development",