lib(renderer): add safeJson helper; migrate 6 JSON.parse try/catch call sites
This commit is contained in:
1 parent
a07b42e493
commit
be0ff5a041
8 files changed
+46
-48
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import { Clock, Link as LinkIcon } from "@phosphor-icons/react"
|
||||
import { platformConfig } from "../social/social-config"
|
||||
import type { SocialPlatform } from "@shared/types"
|
||||
import { safeJson } from "../../lib/safe-json"
|
||||
|
||||
const PLATFORM_CHAR_LIMITS: Record<string, number> = {
|
||||
twitter: 280,
|
||||
@@ -26,19 +27,16 @@ interface DraftPayload {
|
||||
}
|
||||
|
||||
function parseDraft(payloadJson: string): DraftPayload | null {
|
||||
try {
|
||||
const parsed = JSON.parse(payloadJson)
|
||||
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
||||
return {
|
||||
content: typeof parsed.content === "string" ? parsed.content : "",
|
||||
mediaUrls: Array.isArray(parsed.mediaUrls) ? parsed.mediaUrls : [],
|
||||
scheduledAt: typeof parsed.scheduledAt === "string" ? parsed.scheduledAt : null,
|
||||
socialAccountId: typeof parsed.socialAccountId === "string" ? parsed.socialAccountId : "",
|
||||
platform: typeof parsed.platform === "string" ? parsed.platform : "other",
|
||||
}
|
||||
}
|
||||
} catch { /* invalid JSON */ }
|
||||
return null
|
||||
const parsed = safeJson<unknown>(payloadJson, null)
|
||||
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null
|
||||
const obj = parsed as Record<string, unknown>
|
||||
return {
|
||||
content: typeof obj.content === "string" ? obj.content : "",
|
||||
mediaUrls: Array.isArray(obj.mediaUrls) ? (obj.mediaUrls as string[]) : [],
|
||||
scheduledAt: typeof obj.scheduledAt === "string" ? obj.scheduledAt : null,
|
||||
socialAccountId: typeof obj.socialAccountId === "string" ? obj.socialAccountId : "",
|
||||
platform: typeof obj.platform === "string" ? obj.platform : "other",
|
||||
}
|
||||
}
|
||||
|
||||
function formatScheduledDate(isoDate: string): string {
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
import { useMemo } from "react"
|
||||
import type { ApprovalRecord } from "@shared/types"
|
||||
import { safeJson } from "../../../lib/safe-json"
|
||||
|
||||
export function useApprovalPayload(approval: ApprovalRecord): Record<string, unknown> | null {
|
||||
return useMemo(() => {
|
||||
if (!approval.payloadJson) return null
|
||||
try {
|
||||
const parsed = JSON.parse(approval.payloadJson)
|
||||
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
||||
return parsed as Record<string, unknown>
|
||||
}
|
||||
return null
|
||||
} catch {
|
||||
return null
|
||||
const parsed = safeJson<unknown>(approval.payloadJson, null)
|
||||
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
||||
return parsed as Record<string, unknown>
|
||||
}
|
||||
return null
|
||||
}, [approval.payloadJson])
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { ApprovalRecord } from "@shared/types"
|
||||
import {
|
||||
Robot, CheckSquare, Play, ShieldCheck, Gear, FolderOpen, Key, Target, Briefcase, Buildings,
|
||||
} from "@phosphor-icons/react"
|
||||
import { safeJson } from "../../lib/safe-json"
|
||||
|
||||
export function describeActionError(error: unknown) {
|
||||
return error instanceof Error ? error.message : "The action could not be completed."
|
||||
@@ -9,10 +10,8 @@ export function describeActionError(error: unknown) {
|
||||
|
||||
export function parseApprovalPayloadJson(approval: ApprovalRecord): Record<string, unknown> | null {
|
||||
if (!approval.payloadJson) return null
|
||||
try {
|
||||
const parsed = JSON.parse(approval.payloadJson)
|
||||
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed as Record<string, unknown>
|
||||
} catch { return null }
|
||||
const parsed = safeJson<unknown>(approval.payloadJson, null)
|
||||
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed as Record<string, unknown>
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user