Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
108 lines
2.8 KiB
Text
108 lines
2.8 KiB
Text
/**
|
|
* @license
|
|
* Copyright 2023 Google Inc.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import type {TimeoutSettings} from '../common/TimeoutSettings.js';
|
|
import type {
|
|
EvaluateFunc,
|
|
HandleFor,
|
|
InnerLazyParams,
|
|
} from '../common/types.js';
|
|
import {TaskManager, WaitTask} from '../common/WaitTask.js';
|
|
import {disposeSymbol} from '../util/disposable.js';
|
|
|
|
import type {ElementHandle} from './ElementHandle.js';
|
|
import type {Environment} from './Environment.js';
|
|
import type {JSHandle} from './JSHandle.js';
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
export abstract class Realm implements Disposable {
|
|
protected readonly timeoutSettings: TimeoutSettings;
|
|
readonly taskManager = new TaskManager();
|
|
|
|
constructor(timeoutSettings: TimeoutSettings) {
|
|
this.timeoutSettings = timeoutSettings;
|
|
}
|
|
|
|
abstract get environment(): Environment;
|
|
|
|
abstract adoptHandle<T extends JSHandle<Node>>(handle: T): Promise<T>;
|
|
abstract transferHandle<T extends JSHandle<Node>>(handle: T): Promise<T>;
|
|
abstract evaluateHandle<
|
|
Params extends unknown[],
|
|
Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
|
|
>(
|
|
pageFunction: Func | string,
|
|
...args: Params
|
|
): Promise<HandleFor<Awaited<ReturnType<Func>>>>;
|
|
abstract evaluate<
|
|
Params extends unknown[],
|
|
Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
|
|
>(
|
|
pageFunction: Func | string,
|
|
...args: Params
|
|
): Promise<Awaited<ReturnType<Func>>>;
|
|
|
|
async waitForFunction<
|
|
Params extends unknown[],
|
|
Func extends EvaluateFunc<InnerLazyParams<Params>> = EvaluateFunc<
|
|
InnerLazyParams<Params>
|
|
>,
|
|
>(
|
|
pageFunction: Func | string,
|
|
options: {
|
|
polling?: 'raf' | 'mutation' | number;
|
|
timeout?: number;
|
|
root?: ElementHandle<Node>;
|
|
signal?: AbortSignal;
|
|
} = {},
|
|
...args: Params
|
|
): Promise<HandleFor<Awaited<ReturnType<Func>>>> {
|
|
const {
|
|
polling = 'raf',
|
|
timeout = this.timeoutSettings.timeout(),
|
|
root,
|
|
signal,
|
|
} = options;
|
|
if (typeof polling === 'number' && polling < 0) {
|
|
throw new Error('Cannot poll with non-positive interval');
|
|
}
|
|
const waitTask = new WaitTask(
|
|
this,
|
|
{
|
|
polling,
|
|
root,
|
|
timeout,
|
|
signal,
|
|
},
|
|
pageFunction as unknown as
|
|
| ((...args: unknown[]) => Promise<Awaited<ReturnType<Func>>>)
|
|
| string,
|
|
...args,
|
|
);
|
|
return await waitTask.result;
|
|
}
|
|
|
|
abstract adoptBackendNode(backendNodeId?: number): Promise<JSHandle<Node>>;
|
|
|
|
get disposed(): boolean {
|
|
return this.#disposed;
|
|
}
|
|
|
|
#disposed = false;
|
|
/** @internal */
|
|
dispose(): void {
|
|
this.#disposed = true;
|
|
this.taskManager.terminateAll(
|
|
new Error('waitForFunction failed: frame got detached.'),
|
|
);
|
|
}
|
|
/** @internal */
|
|
[disposeSymbol](): void {
|
|
this.dispose();
|
|
}
|
|
}
|