From eef68921ee8fcc1aa1534fce54dc42c3d166652b Mon Sep 17 00:00:00 2001 From: Yusuke Wada Date: Thu, 25 Dec 2025 18:44:22 +0900 Subject: [PATCH] perf(types): check `JSONPrimitive` first in `JSONParsed` --- src/utils/types.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/utils/types.ts b/src/utils/types.ts index 8ca1c57f42..056fa5c7d2 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -50,18 +50,16 @@ export type JSONValue = JSONObject | JSONArray | JSONPrimitive * which defaults to `bigint | ReadonlyArray`. * You can set it to `never` to disable this check. */ -export type JSONParsed> = T extends { - toJSON(): infer J -} - ? (() => J) extends () => JSONPrimitive - ? J - : (() => J) extends () => { toJSON(): unknown } - ? {} - : JSONParsed - : T extends JSONPrimitive - ? T - : T extends InvalidJSONValue - ? never +export type JSONParsed> = T extends JSONPrimitive + ? T + : T extends InvalidJSONValue + ? never + : T extends { toJSON(): infer J } + ? (() => J) extends () => JSONPrimitive + ? J + : (() => J) extends () => { toJSON(): unknown } + ? {} + : JSONParsed : T extends ReadonlyArray ? { [K in keyof T]: JSONParsed, TError> } : T extends Set | Map | Record