chore: for not use Node's events in client (#34791)
This commit is contained in:
parent
6833b664e3
commit
4a9b336168
|
|
@ -14,8 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from './eventEmitter';
|
||||||
|
|
||||||
import { BrowserContext, prepareBrowserContextParams } from './browserContext';
|
import { BrowserContext, prepareBrowserContextParams } from './browserContext';
|
||||||
import { ChannelOwner } from './channelOwner';
|
import { ChannelOwner } from './channelOwner';
|
||||||
import { TargetClosedError, isTargetClosedError } from './errors';
|
import { TargetClosedError, isTargetClosedError } from './errors';
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import path from 'path';
|
|
||||||
|
|
||||||
import { Browser } from './browser';
|
import { Browser } from './browser';
|
||||||
import { BrowserContext, prepareBrowserContextParams } from './browserContext';
|
import { BrowserContext, prepareBrowserContextParams } from './browserContext';
|
||||||
import { ChannelOwner } from './channelOwner';
|
import { ChannelOwner } from './channelOwner';
|
||||||
|
|
@ -101,7 +99,7 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel> imple
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||||
env: options.env ? envObjectToArray(options.env) : undefined,
|
env: options.env ? envObjectToArray(options.env) : undefined,
|
||||||
channel: options.channel,
|
channel: options.channel,
|
||||||
userDataDir: (path.isAbsolute(userDataDir) || !userDataDir) ? userDataDir : path.resolve(userDataDir),
|
userDataDir: (this._platform.path().isAbsolute(userDataDir) || !userDataDir) ? userDataDir : this._platform.path().resolve(userDataDir),
|
||||||
};
|
};
|
||||||
return await this._wrapApiCall(async () => {
|
return await this._wrapApiCall(async () => {
|
||||||
const result = await this._channel.launchPersistentContext(persistentParams);
|
const result = await this._channel.launchPersistentContext(persistentParams);
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { EventEmitter } from 'events';
|
|
||||||
|
|
||||||
|
import { EventEmitter } from './eventEmitter';
|
||||||
import { Android, AndroidDevice, AndroidSocket } from './android';
|
import { Android, AndroidDevice, AndroidSocket } from './android';
|
||||||
import { Artifact } from './artifact';
|
import { Artifact } from './artifact';
|
||||||
import { Browser } from './browser';
|
import { Browser } from './browser';
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@
|
||||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { EventEmitter as OriginalEventEmitter } from 'events';
|
|
||||||
|
|
||||||
import { isUnderTest } from '../utils/isomorphic/debug';
|
import { isUnderTest } from '../utils/isomorphic/debug';
|
||||||
|
|
||||||
import type { EventEmitter as EventEmitterType } from 'events';
|
import type { EventEmitter as EventEmitterType } from 'events';
|
||||||
|
|
@ -32,6 +30,12 @@ type EventType = string | symbol;
|
||||||
type Listener = (...args: any[]) => any;
|
type Listener = (...args: any[]) => any;
|
||||||
type EventMap = Record<EventType, Listener | Listener[]>;
|
type EventMap = Record<EventType, Listener | Listener[]>;
|
||||||
|
|
||||||
|
let defaultMaxListenersProvider = () => 10;
|
||||||
|
|
||||||
|
export function setDefaultMaxListenersProvider(provider: () => number) {
|
||||||
|
defaultMaxListenersProvider = provider;
|
||||||
|
}
|
||||||
|
|
||||||
export class EventEmitter implements EventEmitterType {
|
export class EventEmitter implements EventEmitterType {
|
||||||
|
|
||||||
private _events: EventMap | undefined = undefined;
|
private _events: EventMap | undefined = undefined;
|
||||||
|
|
@ -58,7 +62,7 @@ export class EventEmitter implements EventEmitterType {
|
||||||
}
|
}
|
||||||
|
|
||||||
getMaxListeners(): number {
|
getMaxListeners(): number {
|
||||||
return this._maxListeners === undefined ? OriginalEventEmitter.defaultMaxListeners : this._maxListeners;
|
return this._maxListeners === undefined ? defaultMaxListenersProvider() : this._maxListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit(type: EventType, ...args: any[]): boolean {
|
emit(type: EventType, ...args: any[]): boolean {
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from './eventEmitter';
|
||||||
|
|
||||||
import { ChannelOwner } from './channelOwner';
|
import { ChannelOwner } from './channelOwner';
|
||||||
import { addSourceUrlToScript } from './clientHelper';
|
import { addSourceUrlToScript } from './clientHelper';
|
||||||
import { ElementHandle, convertInputFiles, convertSelectOptionValues } from './elementHandle';
|
import { ElementHandle, convertInputFiles, convertSelectOptionValues } from './elementHandle';
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { URLSearchParams } from 'url';
|
|
||||||
|
|
||||||
import { ChannelOwner } from './channelOwner';
|
import { ChannelOwner } from './channelOwner';
|
||||||
import { isTargetClosedError } from './errors';
|
import { isTargetClosedError } from './errors';
|
||||||
import { Events } from './events';
|
import { Events } from './events';
|
||||||
|
|
|
||||||
|
|
@ -799,7 +799,7 @@ export class Page extends ChannelOwner<channels.PageChannel> implements api.Page
|
||||||
}
|
}
|
||||||
|
|
||||||
async pause(_options?: { __testHookKeepTestTimeout: boolean }) {
|
async pause(_options?: { __testHookKeepTestTimeout: boolean }) {
|
||||||
if (require('inspector').url())
|
if (this._platform.isDebuggerAttached())
|
||||||
return;
|
return;
|
||||||
const defaultNavigationTimeout = this._browserContext._timeoutSettings.defaultNavigationTimeout();
|
const defaultNavigationTimeout = this._browserContext._timeoutSettings.defaultNavigationTimeout();
|
||||||
const defaultTimeout = this._browserContext._timeoutSettings.defaultTimeout();
|
const defaultTimeout = this._browserContext._timeoutSettings.defaultTimeout();
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ export type Platform = {
|
||||||
createGuid: () => string;
|
createGuid: () => string;
|
||||||
fs: () => typeof fs;
|
fs: () => typeof fs;
|
||||||
inspectCustom: symbol | undefined;
|
inspectCustom: symbol | undefined;
|
||||||
|
isDebuggerAttached(): boolean;
|
||||||
isLogEnabled(name: 'api' | 'channel'): boolean;
|
isLogEnabled(name: 'api' | 'channel'): boolean;
|
||||||
log(name: 'api' | 'channel', message: string | Error | object): void;
|
log(name: 'api' | 'channel', message: string | Error | object): void;
|
||||||
path: () => typeof path;
|
path: () => typeof path;
|
||||||
|
|
@ -70,6 +71,7 @@ export const webPlatform: Platform = {
|
||||||
|
|
||||||
inspectCustom: undefined,
|
inspectCustom: undefined,
|
||||||
|
|
||||||
|
isDebuggerAttached: () => false,
|
||||||
|
|
||||||
isLogEnabled(name: 'api' | 'channel') {
|
isLogEnabled(name: 'api' | 'channel') {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -105,6 +107,8 @@ export const emptyPlatform: Platform = {
|
||||||
|
|
||||||
inspectCustom: undefined,
|
inspectCustom: undefined,
|
||||||
|
|
||||||
|
isDebuggerAttached: () => false,
|
||||||
|
|
||||||
isLogEnabled(name: 'api' | 'channel') {
|
isLogEnabled(name: 'api' | 'channel') {
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import path from 'path';
|
import * as path from 'path';
|
||||||
|
import { EventEmitter } from 'events';
|
||||||
|
|
||||||
import { AndroidServerLauncherImpl } from './androidServerImpl';
|
import { AndroidServerLauncherImpl } from './androidServerImpl';
|
||||||
import { BrowserServerLauncherImpl } from './browserServerImpl';
|
import { BrowserServerLauncherImpl } from './browserServerImpl';
|
||||||
|
|
@ -25,6 +26,7 @@ import { setDebugMode } from './utils/isomorphic/debug';
|
||||||
import { getFromENV } from './server/utils/env';
|
import { getFromENV } from './server/utils/env';
|
||||||
import { nodePlatform } from './server/utils/nodePlatform';
|
import { nodePlatform } from './server/utils/nodePlatform';
|
||||||
import { setPlatformForSelectors } from './client/selectors';
|
import { setPlatformForSelectors } from './client/selectors';
|
||||||
|
import { setDefaultMaxListenersProvider } from './client/eventEmitter';
|
||||||
|
|
||||||
import type { Playwright as PlaywrightAPI } from './client/playwright';
|
import type { Playwright as PlaywrightAPI } from './client/playwright';
|
||||||
import type { Language } from './utils';
|
import type { Language } from './utils';
|
||||||
|
|
@ -35,6 +37,7 @@ export function createInProcessPlaywright(platform: Platform): PlaywrightAPI {
|
||||||
const playwright = createPlaywright({ sdkLanguage: (process.env.PW_LANG_NAME as Language | undefined) || 'javascript' });
|
const playwright = createPlaywright({ sdkLanguage: (process.env.PW_LANG_NAME as Language | undefined) || 'javascript' });
|
||||||
setDebugMode(getFromENV('PWDEBUG') || '');
|
setDebugMode(getFromENV('PWDEBUG') || '');
|
||||||
setPlatformForSelectors(nodePlatform);
|
setPlatformForSelectors(nodePlatform);
|
||||||
|
setDefaultMaxListenersProvider(() => EventEmitter.defaultMaxListeners);
|
||||||
|
|
||||||
setLibraryStackPrefix(path.join(__dirname, '..'));
|
setLibraryStackPrefix(path.join(__dirname, '..'));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,8 @@ export const nodePlatform: Platform = {
|
||||||
|
|
||||||
inspectCustom: util.inspect.custom,
|
inspectCustom: util.inspect.custom,
|
||||||
|
|
||||||
|
isDebuggerAttached: () => !!require('inspector').url(),
|
||||||
|
|
||||||
isLogEnabled(name: 'api' | 'channel') {
|
isLogEnabled(name: 'api' | 'channel') {
|
||||||
return debugLogger.isEnabled(name);
|
return debugLogger.isEnabled(name);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue