背景
#2434(strict 化)で strictNullChecks を有効にしたところ、「見つからなかった値をそのまま先へ渡していて、呼び出し先で Cannot read properties of undefined になる」箇所が 3 つ見つかった。あの PR は構造変更なので挙動を保存し、発生位置とメッセージが読めるように throw へ置き換えるに留めてある。
ただしこれらの関数には、同じ「見つからない」を表す失敗値が既に用意されている。数行上では使っているのに、その先で使っていない。
該当箇所
1. installProgram(src/main/services/core.ts)
InstallCoreResult に noVersionData があり、coreInfo が取れないときは使っている:
if (!coreInfo) {
log.error('The version data do not exist.');
return 'noVersionData';
}
その直後、指定バージョンの release が見つからないケースは失敗値へ落ちない(現状は throw):
const release = progInfo.releases.find((r) => r.version === version);
if (!release) {
throw new Error(`No release found. program:${program} version:${version}`);
}
2. installScript の redirect(src/main/services/scriptInstall.ts)
redirectNotFound があり、packageId が無いときは使っている:
if (!packageId) {
return { route: 'flow', status: 'redirectNotFound' };
}
その直後、ID はあるが一覧に無いケースは失敗値へ落ちない(現状は throw):
const packageToInstall = packages.find((p) => p.id === packageId);
if (!packageToInstall) {
throw new Error(`The redirect target is not listed. id:${packageId}`);
}
3. installPackage の direct 経路(src/main/services/packageInstall.ts)
direct 指定なのに directURL を持たないパッケージ(2 箇所)。ダウンロード失敗には downloadFailed / redownloadFailed がある。
提案
1〜3 を、それぞれの関数が既に持っている失敗値へ寄せる。renderer 側は失敗値を見て表示を出す作りになっているので、いまクラッシュしている経路が UI のエラー表示になる。
注意
挙動変更なので #2434 とは別 PR。renderer 側で各失敗値がどう表示されるかを確認したうえで、既存の表示に合流させるか新しい文言を足すかを決める必要がある。
参考として src/renderer/main/aviutl/BatchInstallButton.tsx の coreInfo が null のケースも同じ形だが、こちらは catch が「エラーが発生しました。」を表示するので UI 上は既にエラーになっている。
背景
#2434(strict 化)で
strictNullChecksを有効にしたところ、「見つからなかった値をそのまま先へ渡していて、呼び出し先でCannot read properties of undefinedになる」箇所が 3 つ見つかった。あの PR は構造変更なので挙動を保存し、発生位置とメッセージが読めるようにthrowへ置き換えるに留めてある。ただしこれらの関数には、同じ「見つからない」を表す失敗値が既に用意されている。数行上では使っているのに、その先で使っていない。
該当箇所
1.
installProgram(src/main/services/core.ts)InstallCoreResultにnoVersionDataがあり、coreInfoが取れないときは使っている:その直後、指定バージョンの release が見つからないケースは失敗値へ落ちない(現状は
throw):2.
installScriptの redirect(src/main/services/scriptInstall.ts)redirectNotFoundがあり、packageIdが無いときは使っている:その直後、ID はあるが一覧に無いケースは失敗値へ落ちない(現状は
throw):3.
installPackageの direct 経路(src/main/services/packageInstall.ts)direct指定なのにdirectURLを持たないパッケージ(2 箇所)。ダウンロード失敗にはdownloadFailed/redownloadFailedがある。提案
1〜3 を、それぞれの関数が既に持っている失敗値へ寄せる。renderer 側は失敗値を見て表示を出す作りになっているので、いまクラッシュしている経路が UI のエラー表示になる。
注意
挙動変更なので #2434 とは別 PR。renderer 側で各失敗値がどう表示されるかを確認したうえで、既存の表示に合流させるか新しい文言を足すかを決める必要がある。
参考として
src/renderer/main/aviutl/BatchInstallButton.tsxのcoreInfoが null のケースも同じ形だが、こちらはcatchが「エラーが発生しました。」を表示するので UI 上は既にエラーになっている。