From e86cf14120632597592348ceb8f909dfa51c78bd Mon Sep 17 00:00:00 2001
From: Dmitry Gozman <dgozman@gmail.com>
Date: Wed, 18 Mar 2020 15:00:42 -0700
Subject: [PATCH] feat(types): better types for nested handles

References #1348.
---
 src/types.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/types.ts b/src/types.ts
index 3cad1b4aebdb4..a9ad12b55bdce 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -18,7 +18,8 @@ import * as js from './javascript';
 import * as dom from './dom';
 import Injected from './injected/injected';
 
-type Boxed<Args extends any[]> = { [Index in keyof Args]: Args[Index] | js.JSHandle<Args[Index]> };
+type BoxedArg<Arg> = js.JSHandle<Arg> | (Arg extends object ? { [Key in keyof Arg]: BoxedArg<Arg[Key]> } : Arg);
+type Boxed<Args extends any[]> = { [Index in keyof Args]: BoxedArg<Args[Index]> };
 type PageFunction<Args extends any[], R = any> = string | ((...args: Args) => R | Promise<R>);
 type PageFunctionOn<On, Args extends any[], R = any> = string | ((on: On, ...args: Args) => R | Promise<R>);
 type PageFunctionWithInjected<On, Args extends any[], R = any> = string | ((injected: Injected, on: On, ...args: Args) => R | Promise<R>);