/**
 * JSON 字符串数组解析 — 消除 parseStack / parseTags / ModuleNode 内联 3 处重复。
 *
 * 后端将 string[] 以 JSON.stringify 形式存于 stack/tags 等字段;
 * 解析失败或非数组时返回空数组,避免渲染崩溃。
 */

/**
 * 安全解析 JSON 字符串数组。
 * null / 空 / 非法 JSON / 非数组 → 返回 fallback(默认 [])。
 */
export function parseJsonArray<T = string>(
  raw: string | null | undefined,
  fallback: T[] = [],
): T[] {
  if (!raw) return fallback
  try {
    const arr = JSON.parse(raw)
    return Array.isArray(arr) ? arr : fallback
  } catch {
    return fallback
  }
}
