fix(offline): reject synchronized Web storage - #64
Conversation
✅ Deploy Preview for rdlabo-ionic-angular-library ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
| if (platform === 'web' && mode === 'synchronized') { | ||
| throw new Error( | ||
| 'Offline synchronized mode is not supported on Web. Use readCacheOnly until the Web repository provides cross-tab locking.', | ||
| ); | ||
| } |
There was a problem hiding this comment.
🟡 Web以外の非ネイティブ環境では未対応の同期モードが素通りしてしまう
同期モードの拒否判定がプラットフォーム名を「web」と厳密一致で比較しているため(assertSupportedOfflineMode の projects/kit/offline/src/lib/offline-provider.ts:136)、iOS/Android 以外でブラウザ保存が使われる環境では警告なく起動してしまいます。
Impact: 想定外の環境で同期書き込みが有効になり、保存待ちデータが失われる可能性があります。
リポジトリ選択条件との不一致
selectOfflineRepository (projects/kit/offline/src/lib/offline-repository.ts:206-212) は ios / android 以外のすべてのプラットフォームで Web 用の Ionic Storage リポジトリを返します。つまり electron などのカスタムプラットフォーム識別子でも、クロスタブロックを持たない Web リポジトリが使われます。一方で今回追加されたガードは platform === 'web' のときだけ例外を投げるため、同じ Web リポジトリを使う非 web プラットフォームでは synchronized モードがそのまま許可されます。判定条件をリポジトリ選択と同じ述語(platform !== 'ios' && platform !== 'android')に揃えるべきです。
| if (platform === 'web' && mode === 'synchronized') { | |
| throw new Error( | |
| 'Offline synchronized mode is not supported on Web. Use readCacheOnly until the Web repository provides cross-tab locking.', | |
| ); | |
| } | |
| if (platform !== 'ios' && platform !== 'android' && mode === 'synchronized') { | |
| throw new Error( | |
| 'Offline synchronized mode is not supported on Web. Use readCacheOnly until the Web repository provides cross-tab locking.', | |
| ); | |
| } |
Was this helpful? React with 👍 or 👎 to provide feedback.
ea555f2 to
4f3e510
Compare
Summary\n\n- fail fast when synchronized offline mode is configured on Web\n- keep Web readCacheOnly and native synchronized modes supported\n- document the cross-tab locking boundary\n\n## Verification\n\n- offline contract 7/7\n- Kit lint\n