fix: harden core build system against silent failures

- Wrap rebuild() in try/finally to guarantee mutex release (prevents deadlock)
- Surface rebuild errors via .catch() instead of discarding with void
- Add null checks for vfile.data.relativePath (prevents crash on virtual files)
- Add try-finally for worker pool cleanup in parse.ts (prevents thread leaks)
- Remove process.exit(1) from parse error handler (let errors propagate)
- Add per-emitter error handling in emit phase with degraded-build warning
- Replace unsafe Map.get()! assertions with null-checked access in config-loader
This commit is contained in:
saberzero1
2026-05-24 17:09:46 +02:00
parent 17aa8ab233
commit caa55037f7
4 changed files with 192 additions and 160 deletions
+10 -6
View File
@@ -854,10 +854,13 @@ function resolveGroups(
const groupConfig = groups[item.group]
groupPriority.set(item.group, groupConfig?.priority ?? item.priority)
}
groupedComponents.get(item.group)!.push({
component: item.component,
groupOptions: item.groupOptions,
})
const groupMembers = groupedComponents.get(item.group)
if (groupMembers) {
groupMembers.push({
component: item.component,
groupOptions: item.groupOptions,
})
}
}
}
@@ -873,7 +876,8 @@ function resolveGroups(
if (processedGroups.has(item.group)) continue
processedGroups.add(item.group)
const members = groupedComponents.get(item.group)!
const members = groupedComponents.get(item.group)
if (!members) continue
const groupConfig = groups[item.group] ?? {}
const flexComponents = members.map((m) => ({
@@ -896,7 +900,7 @@ function resolveGroups(
gap: groupConfig.gap ?? "1rem",
}) as QuartzComponent
entries.push({ priority: groupPriority.get(item.group)!, component: flexComponent })
entries.push({ priority: groupPriority.get(item.group) ?? 50, component: flexComponent })
} else {
entries.push({ priority: item.priority, component: item.component })
}