Skip to content

Commit

Permalink
chore: small fixes and type improvement (#11110)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lightning00Blade committed Oct 10, 2023
1 parent 067a5b2 commit 2811119
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 13 deletions.
2 changes: 1 addition & 1 deletion packages/puppeteer-core/src/bidi/BidiOverCdp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class CdpConnectionAdapter {
getCdpClient(id: string) {
const session = this.#cdp.session(id);
if (!session) {
throw new Error('Unknown CDP session with id' + id);
throw new Error(`Unknown CDP session with id ${id}`);
}
if (!this.#adapters.has(session)) {
const adapter = new CDPClientAdapter(session, id, this.#browser);
Expand Down
4 changes: 2 additions & 2 deletions packages/puppeteer-core/src/bidi/Page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ export class BidiPage extends Page {
#frameTree = new FrameTree<BidiFrame>();
#networkManager: BidiNetworkManager;
#viewport: Viewport | null = null;
#closedDeferred = Deferred.create<TargetCloseError>();
#closedDeferred = Deferred.create<never, TargetCloseError>();
#subscribedEvents = new Map<Bidi.Event['method'], Handler<any>>([
['log.entryAdded', this.#onLogEntryAdded.bind(this)],
['browsingContext.load', this.#onFrameLoaded.bind(this)],
Expand Down Expand Up @@ -474,7 +474,7 @@ export class BidiPage extends Page {
return;
}

this.#closedDeferred.resolve(new TargetCloseError('Page closed!'));
this.#closedDeferred.reject(new TargetCloseError('Page closed!'));
this.#networkManager.dispose();

await this.#connection.send('browsingContext.close', {
Expand Down
4 changes: 2 additions & 2 deletions packages/puppeteer-core/src/cdp/Page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ export class CdpPage extends Page {
#viewport: Viewport | null;
#workers = new Map<string, WebWorker>();
#fileChooserDeferreds = new Set<Deferred<FileChooser>>();
#sessionCloseDeferred = Deferred.create<TargetCloseError>();
#sessionCloseDeferred = Deferred.create<never, TargetCloseError>();
#serviceWorkerBypassed = false;
#userDragInterceptionEnabled = false;

Expand Down Expand Up @@ -195,7 +195,7 @@ export class CdpPage extends Page {
[
CDPSessionEvent.Disconnected,
() => {
this.#sessionCloseDeferred.resolve(
this.#sessionCloseDeferred.reject(
new TargetCloseError('Target closed')
);
},
Expand Down
20 changes: 12 additions & 8 deletions packages/puppeteer-core/src/util/Deferred.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,28 @@ export interface DeferredOptions {
*
* @internal
*/
export class Deferred<T> {
export class Deferred<T, V extends Error = Error> {
#isResolved = false;
#isRejected = false;
#value: T | Error | undefined;
#value: T | V | TimeoutError | undefined;
#resolver: (value: void) => void = () => {};
#taskPromise = new Promise<void>(resolve => {
this.#resolver = resolve;
});
#timeoutId: ReturnType<typeof setTimeout> | undefined;
#timeoutError: TimeoutError;

constructor(opts?: DeferredOptions) {
this.#timeoutError = new TimeoutError(opts && opts.message);
this.#timeoutId =
opts && opts.timeout > 0
? setTimeout(() => {
this.reject(new TimeoutError(opts.message));
this.reject(this.#timeoutError);
}, opts.timeout)
: undefined;
}

#finish(value: T | Error) {
#finish(value: T | V | TimeoutError) {
clearTimeout(this.#timeoutId);
this.#value = value;
this.#resolver();
Expand All @@ -50,7 +52,7 @@ export class Deferred<T> {
this.#finish(value);
}

reject(error: Error): void {
reject(error: V | TimeoutError): void {
if (this.#isRejected || this.#isResolved) {
return;
}
Expand All @@ -66,7 +68,7 @@ export class Deferred<T> {
return this.#isResolved || this.#isRejected;
}

value(): T | Error | undefined {
value(): T | V | TimeoutError | undefined {
return this.#value;
}

Expand All @@ -78,8 +80,10 @@ export class Deferred<T> {
return this.#value as T;
}

static create<R>(opts?: DeferredOptions): Deferred<R> {
return new Deferred<R>(opts);
static create<R, X extends Error = Error>(
opts?: DeferredOptions
): Deferred<R> {
return new Deferred<R, X>(opts);
}

static async race<R>(
Expand Down

0 comments on commit 2811119

Please sign in to comment.