type Primitive = string | number | boolean | null | undefined; type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array; type StructuredCloneable = Date | ArrayBuffer | TypedArray; /** 직렬화 불가 타입 (명시적 제외용) */ type NonSerializable = Function | Promise | RegExp | symbol | WeakMap | WeakSet | WeakRef; /** 재귀적 직렬화 가능 타입 */ export type Serializable = Primitive | StructuredCloneable | SerializableArray | SerializableMap | SerializableSet | SerializableObject; interface SerializableArray extends Array { } interface SerializableMap extends Map { } interface SerializableSet extends Set { } interface SerializableObject { [key: string]: Serializable; } /** * 주어진 타입 T가 직렬화 가능한지 검증하는 조건부 타입 * 직렬화 불가한 값이 포함되어 있으면 never를 반환하여 타입 에러가 발생합니다 */ export type AssertSerializable = T extends NonSerializable ? never : T extends Primitive | StructuredCloneable ? T : T extends Map ? Map, AssertSerializable> : T extends Set ? Set> : T extends Array ? AssertSerializable[] : T extends object ? { [K in keyof T]: AssertSerializable; } : T; export interface SerializableCheckResult { valid: boolean; reason?: string; } /** * 값이 Vitest worker/process 간 전달 가능한지 검증합니다. * Serializable하다는 것은 결국 message port와 process.send를 통해 전달 가능한 것을 의미합니다. * * @param value - 검증할 값 * @param path - 현재 경로 (에러 메시지용, 내부 재귀에서 사용) * @param seen - 순환 참조 감지용 WeakSet (내부 재귀에서 사용) * @returns 검증 결과 { valid: boolean, reason?: string } * * @example * isSerializable({ a: 1, b: "hello" }) // { valid: true } * isSerializable({ fn: () => {} }) // { valid: false, reason: "Function at fn" } * isSerializable({ deep: { nested: Promise.resolve() } }) // { valid: false, reason: "Promise at deep.nested" } */ export declare function isSerializable(value: unknown, path?: string[], seen?: WeakSet): SerializableCheckResult; export {}; //# sourceMappingURL=object-utils.d.ts.map