summaryrefslogtreecommitdiff
path: root/packages/backend/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server')
-rw-r--r--packages/backend/src/server/web/boot.js89
1 files changed, 54 insertions, 35 deletions
diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js
index 0a5cc0e0dc..9570115423 100644
--- a/packages/backend/src/server/web/boot.js
+++ b/packages/backend/src/server/web/boot.js
@@ -14,9 +14,11 @@
// ブロックの中に入れないと、定義した変数がブラウザのグローバルスコープに登録されてしまい邪魔なので
(async () => {
window.onerror = (e) => {
+ console.error(e);
renderError('SOMETHING_HAPPENED', e);
};
window.onunhandledrejection = (e) => {
+ console.error(e);
renderError('SOMETHING_HAPPENED_IN_PROMISE', e);
};
@@ -47,18 +49,30 @@
localStorage.setItem('localeVersion', v);
} else {
await checkUpdate();
- renderError('LOCALE_FETCH_FAILED');
+ renderError('LOCALE_FETCH');
return;
}
}
//#endregion
//#region Script
- import(`/assets/${CLIENT_ENTRY}`)
- .catch(async e => {
- await checkUpdate();
- renderError('APP_FETCH_FAILED', e);
- })
+ function importAppScript() {
+ import(`/assets/${CLIENT_ENTRY}`)
+ .catch(async e => {
+ await checkUpdate();
+ console.error(e);
+ renderError('APP_IMPORT', e);
+ });
+ }
+
+ // タイミングによっては、この時点でDOMの構築が済んでいる場合とそうでない場合とがある
+ if (document.readyState !== 'loading') {
+ importAppScript();
+ } else {
+ window.addEventListener('DOMContentLoaded', () => {
+ importAppScript();
+ });
+ }
//#endregion
//#region Theme
@@ -112,35 +126,35 @@
let errorsElement = document.getElementById('errors');
if (!errorsElement) {
- document.documentElement.innerHTML = `
+ document.body.innerHTML = `
<svg class="icon-warning" xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
- <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
- <path d="M12 9v2m0 4v.01"></path>
- <path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75"></path>
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
+ <path d="M12 9v2m0 4v.01"></path>
+ <path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75"></path>
</svg>
<h1>An error has occurred!</h1>
<button class="button-big" onclick="location.reload(true);">
<span class="button-label-big">Refresh</span>
</button>
- <p class="dont-worry">Don't worry, it's (probably) not your fault.</p>
+ <p class="dont-worry">Don't worry, it's (probably) not your fault.</p>
<p>If the problem persists after refreshing, please contact your instance's administrator.<br>You may also try the following options:</p>
- <a href="/flush">
- <button class="button-small">
- <span class="button-label-small">Clear preferences and cache</span>
- </button>
- </a>
+ <a href="/flush">
+ <button class="button-small">
+ <span class="button-label-small">Clear preferences and cache</span>
+ </button>
+ </a>
<br>
- <a href="/cli">
- <button class="button-small">
- <span class="button-label-small">Start the simple client</span>
- </button>
- </a>
+ <a href="/cli">
+ <button class="button-small">
+ <span class="button-label-small">Start the simple client</span>
+ </button>
+ </a>
<br>
- <a href="/bios">
- <button class="button-small">
- <span class="button-label-small">Start the repair tool</span>
- </button>
- </a>
+ <a href="/bios">
+ <button class="button-small">
+ <span class="button-label-small">Start the repair tool</span>
+ </button>
+ </a>
<br>
<div id="errors"></div>
`;
@@ -269,17 +283,22 @@
// eslint-disable-next-line no-inner-declarations
async function checkUpdate() {
- // TODO: サーバーが落ちている場合などのエラーハンドリング
- const res = await fetch('/api/meta', {
- method: 'POST',
- cache: 'no-cache'
- });
+ try {
+ const res = await fetch('/api/meta', {
+ method: 'POST',
+ cache: 'no-cache'
+ });
- const meta = await res.json();
+ const meta = await res.json();
- if (meta.version != v) {
- localStorage.setItem('v', meta.version);
- refresh();
+ if (meta.version != v) {
+ localStorage.setItem('v', meta.version);
+ refresh();
+ }
+ } catch (e) {
+ console.error(e);
+ renderError('UPDATE_CHECK', e);
+ throw e;
}
}