Report unavailable lazy chunks without rejecting UI actions
This commit is contained in:
@@ -76,3 +76,10 @@ test('listening tracking does not pull in the lazy Stats view',()=>{
|
||||
assert.deepEqual(groups['feature:stats'].files,['/stats-core.js']);
|
||||
assert.match(app,/Lazy\.proxy\('feature:stats-view', \['render'\], 'StatsView'\)/);
|
||||
});
|
||||
|
||||
test('an unavailable Stats chunk reports an error without rejecting the UI navigation',async()=>{
|
||||
const source=app.match(/function renderStats\(\) \{[\s\S]*?\n\}/)?.[0];assert.ok(source);
|
||||
const seen=[],context=require('node:vm').createContext({Lazy:{proxy:()=>({render:()=>Promise.reject(new Error('Unavailable fixture chunk'))})},toast:text=>seen.push(text)});
|
||||
require('node:vm').runInContext(source+';globalThis.render=renderStats;',context);
|
||||
await context.render();assert.deepEqual(seen,['Unavailable fixture chunk']);
|
||||
});
|
||||
|
||||
@@ -5181,7 +5181,7 @@ const StatsTrack = (() => {
|
||||
// Stats view
|
||||
// ============================================================================
|
||||
function renderStats() {
|
||||
return Lazy.proxy('feature:stats-view', ['render'], 'StatsView').render();
|
||||
return Lazy.proxy('feature:stats-view', ['render'], 'StatsView').render().catch(error => toast(error.message));
|
||||
}
|
||||
|
||||
|
||||
@@ -7798,8 +7798,8 @@ document.querySelectorAll('.chip').forEach((c) => {
|
||||
$('sleepCurtain').addEventListener('click', () => $('sleepCurtain').classList.add('hidden'));
|
||||
$('sleepCancelBtn').addEventListener('click', () => { cancelSleepTimer(); toast('Sleep timer cancelled'); });
|
||||
$('transitionBtn').addEventListener('click', () => Transition.cycle());
|
||||
$('shareMomentBtn').addEventListener('click', () => Share.open());
|
||||
$('externalBtn').addEventListener('click', () => External.open());
|
||||
$('shareMomentBtn').addEventListener('click', () => Share.open().catch(error => toast(error.message)));
|
||||
$('externalBtn').addEventListener('click', () => External.open().catch(error => toast(error.message)));
|
||||
$('pipBtn').addEventListener('click', () => PiP.toggle());
|
||||
$('eqBtn').addEventListener('click', () => EQ.open());
|
||||
|
||||
@@ -9005,7 +9005,7 @@ async function boot() {
|
||||
syncOnLaunch();
|
||||
startPlaylistInboxWatch();
|
||||
if(LowerThird.active()) await Lazy.load('feature:lower-third');
|
||||
await Presenter.boot();
|
||||
await Presenter.boot().catch(error => toast(error.message));
|
||||
if (LowerThird.active()) return;
|
||||
SectionRail.boot();
|
||||
if (isMediaId(new URLSearchParams(location.search).get('v'))) Share.bootFromUrl().catch(error => toast(error.message));
|
||||
|
||||
Reference in New Issue
Block a user