Skip to content

Commit

Permalink
chore: for not use Node's events in client (#34791)
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelfeldman authored Feb 14, 2025
1 parent 6833b66 commit 4a9b336
Show file tree
Hide file tree
Showing 10 changed files with 22 additions and 15 deletions.
3 changes: 1 addition & 2 deletions packages/playwright-core/src/client/android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
* limitations under the License.
*/

import { EventEmitter } from 'events';

import { EventEmitter } from './eventEmitter';
import { BrowserContext, prepareBrowserContextParams } from './browserContext';
import { ChannelOwner } from './channelOwner';
import { TargetClosedError, isTargetClosedError } from './errors';
Expand Down
4 changes: 1 addition & 3 deletions packages/playwright-core/src/client/browserType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
* limitations under the License.
*/

import path from 'path';

import { Browser } from './browser';
import { BrowserContext, prepareBrowserContextParams } from './browserContext';
import { ChannelOwner } from './channelOwner';
Expand Down Expand Up @@ -101,7 +99,7 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel> imple
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
env: options.env ? envObjectToArray(options.env) : undefined,
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 () => {
const result = await this._channel.launchPersistentContext(persistentParams);
Expand Down
2 changes: 1 addition & 1 deletion packages/playwright-core/src/client/connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
* limitations under the License.
*/

import { EventEmitter } from 'events';

import { EventEmitter } from './eventEmitter';
import { Android, AndroidDevice, AndroidSocket } from './android';
import { Artifact } from './artifact';
import { Browser } from './browser';
Expand Down
10 changes: 7 additions & 3 deletions packages/playwright-core/src/client/eventEmitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

import { EventEmitter as OriginalEventEmitter } from 'events';

import { isUnderTest } from '../utils/isomorphic/debug';

import type { EventEmitter as EventEmitterType } from 'events';
Expand All @@ -32,6 +30,12 @@ type EventType = string | symbol;
type Listener = (...args: any[]) => any;
type EventMap = Record<EventType, Listener | Listener[]>;

let defaultMaxListenersProvider = () => 10;

export function setDefaultMaxListenersProvider(provider: () => number) {
defaultMaxListenersProvider = provider;
}

export class EventEmitter implements EventEmitterType {

private _events: EventMap | undefined = undefined;
Expand All @@ -58,7 +62,7 @@ export class EventEmitter implements EventEmitterType {
}

getMaxListeners(): number {
return this._maxListeners === undefined ? OriginalEventEmitter.defaultMaxListeners : this._maxListeners;
return this._maxListeners === undefined ? defaultMaxListenersProvider() : this._maxListeners;
}

emit(type: EventType, ...args: any[]): boolean {
Expand Down
3 changes: 1 addition & 2 deletions packages/playwright-core/src/client/frame.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
* limitations under the License.
*/

import { EventEmitter } from 'events';

import { EventEmitter } from './eventEmitter';
import { ChannelOwner } from './channelOwner';
import { addSourceUrlToScript } from './clientHelper';
import { ElementHandle, convertInputFiles, convertSelectOptionValues } from './elementHandle';
Expand Down
2 changes: 0 additions & 2 deletions packages/playwright-core/src/client/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
* limitations under the License.
*/

import { URLSearchParams } from 'url';

import { ChannelOwner } from './channelOwner';
import { isTargetClosedError } from './errors';
import { Events } from './events';
Expand Down
2 changes: 1 addition & 1 deletion packages/playwright-core/src/client/page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -799,7 +799,7 @@ export class Page extends ChannelOwner<channels.PageChannel> implements api.Page
}

async pause(_options?: { __testHookKeepTestTimeout: boolean }) {
if (require('inspector').url())
if (this._platform.isDebuggerAttached())
return;
const defaultNavigationTimeout = this._browserContext._timeoutSettings.defaultNavigationTimeout();
const defaultTimeout = this._browserContext._timeoutSettings.defaultTimeout();
Expand Down
4 changes: 4 additions & 0 deletions packages/playwright-core/src/common/platform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export type Platform = {
createGuid: () => string;
fs: () => typeof fs;
inspectCustom: symbol | undefined;
isDebuggerAttached(): boolean;
isLogEnabled(name: 'api' | 'channel'): boolean;
log(name: 'api' | 'channel', message: string | Error | object): void;
path: () => typeof path;
Expand Down Expand Up @@ -70,6 +71,7 @@ export const webPlatform: Platform = {

inspectCustom: undefined,

isDebuggerAttached: () => false,

isLogEnabled(name: 'api' | 'channel') {
return false;
Expand Down Expand Up @@ -105,6 +107,8 @@ export const emptyPlatform: Platform = {

inspectCustom: undefined,

isDebuggerAttached: () => false,

isLogEnabled(name: 'api' | 'channel') {
return false;
},
Expand Down
5 changes: 4 additions & 1 deletion packages/playwright-core/src/inProcessFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
* limitations under the License.
*/

import path from 'path';
import * as path from 'path';
import { EventEmitter } from 'events';

import { AndroidServerLauncherImpl } from './androidServerImpl';
import { BrowserServerLauncherImpl } from './browserServerImpl';
Expand All @@ -25,6 +26,7 @@ import { setDebugMode } from './utils/isomorphic/debug';
import { getFromENV } from './server/utils/env';
import { nodePlatform } from './server/utils/nodePlatform';
import { setPlatformForSelectors } from './client/selectors';
import { setDefaultMaxListenersProvider } from './client/eventEmitter';

import type { Playwright as PlaywrightAPI } from './client/playwright';
import type { Language } from './utils';
Expand All @@ -35,6 +37,7 @@ export function createInProcessPlaywright(platform: Platform): PlaywrightAPI {
const playwright = createPlaywright({ sdkLanguage: (process.env.PW_LANG_NAME as Language | undefined) || 'javascript' });
setDebugMode(getFromENV('PWDEBUG') || '');
setPlatformForSelectors(nodePlatform);
setDefaultMaxListenersProvider(() => EventEmitter.defaultMaxListeners);

setLibraryStackPrefix(path.join(__dirname, '..'));

Expand Down
2 changes: 2 additions & 0 deletions packages/playwright-core/src/server/utils/nodePlatform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ export const nodePlatform: Platform = {

inspectCustom: util.inspect.custom,

isDebuggerAttached: () => !!require('inspector').url(),

isLogEnabled(name: 'api' | 'channel') {
return debugLogger.isEnabled(name);
},
Expand Down

0 comments on commit 4a9b336

Please sign in to comment.