chore: implement (Async)Disposable on handles (#10802)

This commit is contained in:
jrandolf 2023-08-29 21:44:59 +02:00 committed by GitHub
parent dca327f99f
commit 8c07631bd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 98 additions and 4 deletions

View File

@ -0,0 +1,17 @@
---
sidebar_label: ElementHandle.[Symbol.asyncDispose]
---
# ElementHandle.\[Symbol.asyncDispose\]() method
#### Signature:
```typescript
class ElementHandle {
[Symbol.asyncDispose](): Promise<void>;
}
```
**Returns:**
Promise&lt;void&gt;

View File

@ -0,0 +1,17 @@
---
sidebar_label: ElementHandle.[Symbol.dispose]
---
# ElementHandle.\[Symbol.dispose\]() method
#### Signature:
```typescript
class ElementHandle {
[Symbol.dispose](): void;
}
```
**Returns:**
void

View File

@ -49,6 +49,8 @@ The constructor for this class is marked as internal. Third-party code should no
| Method | Modifiers | Description | | Method | Modifiers | Description |
| -------------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -------------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [\[Symbol.asyncDispose\]()](./puppeteer.elementhandle._symbol.asyncdispose_.md) | | |
| [\[Symbol.dispose\]()](./puppeteer.elementhandle._symbol.dispose_.md) | | |
| [$(selector)](./puppeteer.elementhandle._.md) | | Queries the current element for an element matching the given selector. | | [$(selector)](./puppeteer.elementhandle._.md) | | Queries the current element for an element matching the given selector. |
| [$$(selector)](./puppeteer.elementhandle.__.md) | | Queries the current element for all elements matching the given selector. | | [$$(selector)](./puppeteer.elementhandle.__.md) | | Queries the current element for all elements matching the given selector. |
| [$$eval(selector, pageFunction, args)](./puppeteer.elementhandle.__eval.md) | | <p>Runs the given function on an array of elements matching the given selector in the current element.</p><p>If the given function returns a promise, then this method will wait till the promise resolves.</p> | | [$$eval(selector, pageFunction, args)](./puppeteer.elementhandle.__eval.md) | | <p>Runs the given function on an array of elements matching the given selector in the current element.</p><p>If the given function returns a promise, then this method will wait till the promise resolves.</p> |

View File

@ -0,0 +1,17 @@
---
sidebar_label: JSHandle.[Symbol.asyncDispose]
---
# JSHandle.\[Symbol.asyncDispose\]() method
#### Signature:
```typescript
class JSHandle {
[Symbol.asyncDispose](): Promise<void>;
}
```
**Returns:**
Promise&lt;void&gt;

View File

@ -0,0 +1,17 @@
---
sidebar_label: JSHandle.[Symbol.dispose]
---
# JSHandle.\[Symbol.dispose\]() method
#### Signature:
```typescript
class JSHandle {
[Symbol.dispose](): void;
}
```
**Returns:**
void

View File

@ -13,9 +13,11 @@ Handles can be used as arguments for any evaluation function such as [Page.$eval
#### Signature: #### Signature:
```typescript ```typescript
export declare abstract class JSHandle<T = unknown> export declare abstract class JSHandle<T = unknown> implements Disposable, AsyncDisposable
``` ```
**Implements:** Disposable, AsyncDisposable
## Remarks ## Remarks
The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `JSHandle` class. The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `JSHandle` class.
@ -36,6 +38,8 @@ const windowHandle = await page.evaluateHandle(() => window);
| Method | Modifiers | Description | | Method | Modifiers | Description |
| ---------------------------------------------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ---------------------------------------------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [\[Symbol.asyncDispose\]()](./puppeteer.jshandle._symbol.asyncdispose_.md) | | |
| [\[Symbol.dispose\]()](./puppeteer.jshandle._symbol.dispose_.md) | | |
| [asElement()](./puppeteer.jshandle.aselement.md) | | Either <code>null</code> or the handle itself if the handle is an instance of [ElementHandle](./puppeteer.elementhandle.md). | | [asElement()](./puppeteer.jshandle.aselement.md) | | Either <code>null</code> or the handle itself if the handle is an instance of [ElementHandle](./puppeteer.elementhandle.md). |
| [dispose()](./puppeteer.jshandle.dispose.md) | | Releases the object referenced by the handle for garbage collection. | | [dispose()](./puppeteer.jshandle.dispose.md) | | Releases the object referenced by the handle for garbage collection. |
| [evaluate(pageFunction, args)](./puppeteer.jshandle.evaluate.md) | | Evaluates the given function with the current handle as its first argument. | | [evaluate(pageFunction, args)](./puppeteer.jshandle.evaluate.md) | | Evaluates the given function with the current handle as its first argument. |

View File

@ -250,8 +250,8 @@ export abstract class ElementHandle<
/** /**
* @internal * @internal
*/ */
override async dispose(): Promise<void> { override dispose(): Promise<void> {
return await this.handle.dispose(); return this.handle.dispose();
} }
override asElement(): ElementHandle<ElementType> { override asElement(): ElementHandle<ElementType> {
@ -1323,6 +1323,14 @@ export abstract class ElementHandle<
* ``` * ```
*/ */
abstract autofill(data: AutofillData): Promise<void>; abstract autofill(data: AutofillData): Promise<void>;
override [Symbol.dispose](): void {
return void this.dispose().catch(debugError);
}
override [Symbol.asyncDispose](): Promise<void> {
return this.dispose();
}
} }
/** /**

View File

@ -16,7 +16,9 @@
import Protocol from 'devtools-protocol'; import Protocol from 'devtools-protocol';
import {Symbol} from '../../third_party/disposablestack/disposablestack.js';
import {EvaluateFuncWith, HandleFor, HandleOr} from '../common/types.js'; import {EvaluateFuncWith, HandleFor, HandleOr} from '../common/types.js';
import {debugError} from '../common/util.js';
import {ElementHandle} from './ElementHandle.js'; import {ElementHandle} from './ElementHandle.js';
@ -41,7 +43,9 @@ import {ElementHandle} from './ElementHandle.js';
* *
* @public * @public
*/ */
export abstract class JSHandle<T = unknown> { export abstract class JSHandle<T = unknown>
implements Disposable, AsyncDisposable
{
/** /**
* Used for nominally typing {@link JSHandle}. * Used for nominally typing {@link JSHandle}.
*/ */
@ -150,4 +154,12 @@ export abstract class JSHandle<T = unknown> {
* backing this handle. * backing this handle.
*/ */
abstract remoteObject(): Protocol.Runtime.RemoteObject; abstract remoteObject(): Protocol.Runtime.RemoteObject;
[Symbol.dispose](): void {
return void this.dispose().catch(debugError);
}
[Symbol.asyncDispose](): Promise<void> {
return this.dispose();
}
} }