cherry-pick(sf-db): tolerate corrupt task arrays in milestone rows
Cherry-pick of gsd-build/gsd-2 851507913 (#4056) — defensive parsing so a corrupt or non-array tasks blob in a milestone row doesn't crash sf-db reads. Test hunk skipped (sf-db.test.ts has drifted). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3df56cb94f
commit
93402643f4
1 changed files with 17 additions and 0 deletions
|
|
@ -1960,6 +1960,23 @@ function parseTaskArrayColumn(raw: unknown): string[] {
|
|||
}
|
||||
}
|
||||
|
||||
function parseTaskArrayColumn(raw: unknown): string[] {
|
||||
if (typeof raw !== "string" || raw.trim() === "") return [];
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(raw);
|
||||
if (Array.isArray(parsed)) return parsed.map((value) => String(value));
|
||||
if (parsed === null || parsed === undefined || parsed === "") return [];
|
||||
return [String(parsed)];
|
||||
} catch {
|
||||
// Older/corrupt rows may contain comma-separated strings instead of JSON.
|
||||
return raw
|
||||
.split(",")
|
||||
.map((value) => value.trim())
|
||||
.filter(Boolean);
|
||||
}
|
||||
}
|
||||
|
||||
function rowToTask(row: Record<string, unknown>): TaskRow {
|
||||
const parseTaskArray = (value: unknown): string[] => {
|
||||
if (Array.isArray(value)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue