Commit b20ea9a
fix(leaderboard): fallback 非数组内容必须覆盖空,不能 preserve (#328)
Copilot CR (PR #326) 反馈
之前 fallback 只要 JSON.parse 成功就 preserveExisting=true,包括对象、null
等非数组类型也会被"维持原状"。但下游有多处 `import leaderboardData from
"@/generated/site-leaderboard.json"` 直接 .filter/.map(如 Hero 的 top3、
/rank 页),一旦内容不是数组,整个 Next build 就会因
"filter is not a function" 直接挂掉。
修法
四档 fallback:
1. 非空数组 → 保留(warn 多少条)
2. 空数组 → 保留空数组(语义合法,下游 .filter 不挂)
3. JSON 损坏 / 非数组 → 兜底覆盖为 [](避免下游 import 后 type error)
4. 文件不存在 → 兜底覆盖为 []
效果
- 任何已存在的合法数组都不被无故覆盖
- 任何非数组数据都强制规范化为 [],下游 .filter/.map 永远 safe
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>1 parent 1d18dc9 commit b20ea9a
1 file changed
Lines changed: 23 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
164 | 170 | | |
165 | 171 | | |
166 | 172 | | |
167 | 173 | | |
168 | 174 | | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
173 | 186 | | |
| 187 | + | |
174 | 188 | | |
175 | | - | |
| 189 | + | |
176 | 190 | | |
177 | 191 | | |
178 | | - | |
179 | 192 | | |
180 | 193 | | |
181 | 194 | | |
| |||
0 commit comments