Skip to content

Commit 81c8620

Browse files
dgozmanmxschmitt
andauthored
chore: upgrade internal types to support TypeScript 4.9.3 (#19280)
Fixes microsoft/TypeScript#51619 Co-authored-by: Max Schmitt <[email protected]>
1 parent 48182a4 commit 81c8620

File tree

7 files changed

+54
-20
lines changed

7 files changed

+54
-20
lines changed

package-lock.json

Lines changed: 21 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"@babel/preset-react": "^7.18.6",
5959
"@types/codemirror": "^5.60.5",
6060
"@types/formidable": "^2.0.4",
61-
"@types/node": "=14.18.24",
61+
"@types/node": "=14.18.34",
6262
"@types/react": "^18.0.12",
6363
"@types/react-dom": "^18.0.5",
6464
"@types/resize-observer-browser": "^0.1.7",
@@ -94,7 +94,7 @@
9494
"rimraf": "^3.0.2",
9595
"socksv5": "0.0.6",
9696
"ssim.js": "^3.5.0",
97-
"typescript": "^4.7.3",
97+
"typescript": "^4.9.3",
9898
"vite": "^3.2.1",
9999
"ws": "^8.5.0",
100100
"xml2js": "^0.4.23",

packages/playwright-core/src/server/dom.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ export class FrameExecutionContext extends js.ExecutionContext {
120120
}
121121

122122
export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
123+
__elementhandle: T = true as any;
123124
declare readonly _context: FrameExecutionContext;
124125
readonly _page: Page;
125126
declare readonly _objectId: string;

packages/playwright-core/src/server/javascript.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,16 @@ export type RemoteObject = {
2727
value?: any
2828
};
2929

30-
type NoHandles<Arg> = Arg extends JSHandle ? never : (Arg extends object ? { [Key in keyof Arg]: NoHandles<Arg[Key]> } : Arg);
30+
interface TaggedAsJSHandle<T> {
31+
__jshandle: T;
32+
}
33+
interface TaggedAsElementHandle<T> {
34+
__elementhandle: T;
35+
}
36+
type NoHandles<Arg> = Arg extends TaggedAsJSHandle<any> ? never : (Arg extends object ? { [Key in keyof Arg]: NoHandles<Arg[Key]> } : Arg);
3137
type Unboxed<Arg> =
32-
Arg extends dom.ElementHandle<infer T> ? T :
33-
Arg extends JSHandle<infer T> ? T :
38+
Arg extends TaggedAsElementHandle<infer T> ? T :
39+
Arg extends TaggedAsJSHandle<infer T> ? T :
3440
Arg extends NoHandles<Arg> ? Arg :
3541
Arg extends [infer A0] ? [Unboxed<A0>] :
3642
Arg extends [infer A0, infer A1] ? [Unboxed<A0>, Unboxed<A1>] :
@@ -129,6 +135,7 @@ export class ExecutionContext extends SdkObject {
129135
}
130136

131137
export class JSHandle<T = any> extends SdkObject {
138+
__jshandle: T = true as any;
132139
readonly _context: ExecutionContext;
133140
_disposed = false;
134141
readonly _objectId: ObjectId | undefined;

tests/config/queryObjects.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export async function queryObjectCount(type: Function): Promise<number> {
2929
prototypeObjectId: constructorFunction.objectId
3030
}, (_, result) => f(result))) as any;
3131

32-
const { result: { value } } = await new Promise(f => session.post('Runtime.callFunctionOn', {
32+
const { result: { value } } = await new Promise<any>(f => session.post('Runtime.callFunctionOn', {
3333
functionDeclaration: 'function (arr) { return this.length; }',
3434
objectId: instanceArray.objectId,
3535
arguments: [{ objectId: instanceArray.objectId }],

tests/page/page-keyboard.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -657,8 +657,7 @@ async function captureLastKeydown(page) {
657657
lastEvent.key = e.key;
658658
lastEvent.code = e.code;
659659
lastEvent.metaKey = e.metaKey;
660-
// keyIdentifier only exists in WebKit, and isn't in TypeScript's lib.
661-
lastEvent.keyIdentifier = 'keyIdentifier' in e && e['keyIdentifier'];
660+
lastEvent.keyIdentifier = 'keyIdentifier' in e && typeof e['keyIdentifier'] === 'string' && e['keyIdentifier'];
662661
}, true);
663662
return lastEvent;
664663
});

utils/generate_types/test/test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,23 @@ playwright.chromium.launch().then(async browser => {
567567
const value = await handle.jsonValue();
568568
const assertion: AssertType<number, typeof value> = true;
569569
}
570+
{
571+
const handle = await page.evaluateHandle(() => document.body);
572+
const tuple = { s: '', n: 23, h: handle };
573+
const value = await page.evaluate(([{ s, n, h }]) => {
574+
return parseInt(s) + n + parseInt(h.nodeName);
575+
}, [tuple]);
576+
const assertion: AssertType<number, typeof value> = true;
577+
}
578+
{
579+
type T = ({ s: string } | playwright.ElementHandle)[];
580+
const handle = await page.evaluateHandle(() => document.body);
581+
const tuple: T = [{ s: '' }, handle];
582+
const value = await page.evaluate(([a, b]) => {
583+
return (a instanceof Node ? a.nodeName : a.s) + (b instanceof Node ? b.nodeName : b.s);
584+
}, tuple);
585+
const assertion: AssertType<string, typeof value> = true;
586+
}
570587

571588
{
572589
const handle = await page.evaluateHandle(() => document.createElement('body'));
@@ -861,3 +878,4 @@ import {
861878
Geolocation,
862879
HTTPCredentials,
863880
} from 'playwright';
881+

0 commit comments

Comments
 (0)