Read save data from local storage * @param {string} saveName - unique name for the game/save * @param {Object} [defaultSaveData] - default values for save * @return {Object} * @memberof Utilities
(saveName, defaultSaveData)
| 194 | * @return {Object} |
| 195 | * @memberof Utilities */ |
| 196 | function readSaveData(saveName, defaultSaveData) |
| 197 | { |
| 198 | ASSERT(isStringLike(saveName), 'loadData requires saveName string'); |
| 199 | |
| 200 | // tolerate localStorage being unavailable (iOS private mode, sandboxed |
| 201 | // iframes) and corrupt JSON in stored data |
| 202 | let loadedData = {}; |
| 203 | try |
| 204 | { |
| 205 | const data = localStorage[saveName]; |
| 206 | if (data) |
| 207 | { |
| 208 | try { loadedData = JSON.parse(data); } |
| 209 | catch { LOG('readSaveData: corrupt JSON for', saveName, '— using defaults'); } |
| 210 | } |
| 211 | } |
| 212 | catch { LOG('readSaveData: localStorage unavailable — using defaults'); } |
| 213 | return { ...defaultSaveData, ...loadedData }; |
| 214 | } |
| 215 | |
| 216 | /** Write save data to local storage |
| 217 | * @param {string} saveName - unique name for the game/save |
nothing calls this directly
no test coverage detected