diff --git a/packages/puppeteer-core/src/common/bidi/Serializer.ts b/packages/puppeteer-core/src/common/bidi/Serializer.ts index dbee522f81c..4d717a7dca4 100644 --- a/packages/puppeteer-core/src/common/bidi/Serializer.ts +++ b/packages/puppeteer-core/src/common/bidi/Serializer.ts @@ -1,5 +1,5 @@ import * as Bidi from 'chromium-bidi/lib/cjs/protocol/protocol.js'; -import {debugError, isPlainObject} from '../util.js'; +import {debugError, isDate, isPlainObject, isRegExp} from '../util.js'; /** * @internal @@ -58,6 +58,19 @@ export class BidiSerializer { type: 'object', value: parsedObject, }; + } else if (isRegExp(arg)) { + return { + type: 'regexp', + value: { + pattern: arg.source, + flags: arg.flags, + }, + }; + } else if (isDate(arg)) { + return { + type: 'date', + value: arg.toISOString(), + }; } throw new UnserializableError( @@ -152,6 +165,11 @@ export class BidiSerializer { }, new Map()); case 'promise': return {}; + case 'regexp': + return new RegExp(result.value.pattern, result.value.flags); + case 'date': + return new Date(result.value); + case 'undefined': return undefined; case 'null': diff --git a/packages/puppeteer-core/src/common/util.ts b/packages/puppeteer-core/src/common/util.ts index 006f485a0dd..70bf91b7600 100644 --- a/packages/puppeteer-core/src/common/util.ts +++ b/packages/puppeteer-core/src/common/util.ts @@ -166,6 +166,20 @@ export const isPlainObject = (obj: unknown): obj is Record => { return typeof obj === 'object' && obj?.constructor === Object; }; +/** + * @internal + */ +export const isRegExp = (obj: unknown): obj is RegExp => { + return typeof obj === 'object' && obj?.constructor === RegExp; +}; + +/** + * @internal + */ +export const isDate = (obj: unknown): obj is Date => { + return typeof obj === 'object' && obj?.constructor === Date; +}; + /** * @internal */