diff --git a/packages/remix-server-runtime/serialize.ts b/packages/remix-server-runtime/serialize.ts index 7e2f9c98f71..b9514f87073 100644 --- a/packages/remix-server-runtime/serialize.ts +++ b/packages/remix-server-runtime/serialize.ts @@ -3,6 +3,7 @@ import type { TypedDeferredData, TypedResponse } from "./responses"; // force Typescript to simplify the type type Pretty = { [K in keyof T]: T[K] } & {}; +type PrettyTransform = [T] extends [U] ? T : Pretty; type JsonPrimitive = | string @@ -21,7 +22,7 @@ type NonJsonPrimitive = undefined | Function | symbol; type IsAny = 0 extends 1 & T ? true : false; // prettier-ignore -type Serialize = Pretty< +type Serialize = IsAny extends true ? any : T extends TypedDeferredData ? SerializeDeferred : T extends JsonPrimitive ? T : @@ -30,9 +31,9 @@ type Serialize = Pretty< T extends [] ? [] : T extends [unknown, ...unknown[]] ? SerializeTuple : T extends ReadonlyArray ? (U extends NonJsonPrimitive ? null : Serialize)[] : - T extends object ? SerializeObject> : + T extends object ? PrettyTransform>> : never ->; +; /** JSON serialize [tuples](https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types) */ type SerializeTuple = {