/** * @license * Copyright 2020 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ import type {ElementHandle} from '../api/ElementHandle.js'; import type {JSHandle} from '../api/JSHandle.js'; import type {LazyArg} from './LazyArg.js'; /** * @public */ export type AwaitablePredicate = (value: T) => Awaitable; /** * @public */ export interface Moveable { /** * Moves the resource when 'using'. */ move(): this; } /** * @internal */ export interface Disposed { get disposed(): boolean; } /** * @internal */ export interface BindingPayload { type: string; name: string; seq: number; args: unknown[]; /** * Determines whether the arguments of the payload are trivial. */ isTrivial: boolean; } /** * @internal */ export type AwaitableIterator = Iterator | AsyncIterator; /** * @public */ export type AwaitableIterable = Iterable | AsyncIterable; /** * @public */ export type Awaitable = T | PromiseLike; /** * @public */ export type HandleFor = T extends Node ? ElementHandle : JSHandle; /** * @public */ export type HandleOr = HandleFor | JSHandle | T; /** * @public */ export type FlattenHandle = T extends HandleOr ? U : never; /** * @internal */ export type FlattenLazyArg = T extends LazyArg ? U : T; /** * @internal */ export type InnerLazyParams = { [K in keyof T]: FlattenLazyArg; }; /** * @public */ export type InnerParams = { [K in keyof T]: FlattenHandle; }; /** * @public */ export type ElementFor< TagName extends keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap, > = TagName extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[TagName] : TagName extends keyof SVGElementTagNameMap ? SVGElementTagNameMap[TagName] : never; /** * @public */ export type EvaluateFunc = ( ...params: InnerParams ) => Awaitable; /** * @public */ export type EvaluateFuncWith = ( ...params: [V, ...InnerParams] ) => Awaitable; /** * @public */ export type NodeFor = TypeSelectorOfComplexSelector extends infer TypeSelector ? TypeSelector extends | keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap ? ElementFor : Element : never; type TypeSelectorOfComplexSelector = CompoundSelectorsOfComplexSelector extends infer CompoundSelectors ? CompoundSelectors extends NonEmptyReadonlyArray ? Last extends infer LastCompoundSelector ? LastCompoundSelector extends string ? TypeSelectorOfCompoundSelector : never : never : unknown : never; type TypeSelectorOfCompoundSelector = SplitWithDelemiters< CompoundSelector, BeginSubclassSelectorTokens > extends infer CompoundSelectorTokens ? CompoundSelectorTokens extends [infer TypeSelector, ...any[]] ? TypeSelector extends '' ? unknown : TypeSelector : never : never; type Last> = Arr extends [ infer Head, ...infer Tail, ] ? Tail extends NonEmptyReadonlyArray ? Last : Head : never; type NonEmptyReadonlyArray = [T, ...(readonly T[])]; type CompoundSelectorsOfComplexSelector = SplitWithDelemiters< ComplexSelector, CombinatorTokens > extends infer IntermediateTokens ? IntermediateTokens extends readonly string[] ? Drop : never : never; type SplitWithDelemiters< Input extends string, Delemiters extends readonly string[], > = Delemiters extends [infer FirstDelemiter, ...infer RestDelemiters] ? FirstDelemiter extends string ? RestDelemiters extends readonly string[] ? FlatmapSplitWithDelemiters, RestDelemiters> : never : never : [Input]; type BeginSubclassSelectorTokens = ['.', '#', '[', ':']; type CombinatorTokens = [' ', '>', '+', '~', '|', '|']; type Drop< Arr extends readonly unknown[], Remove, Acc extends unknown[] = [], > = Arr extends [infer Head, ...infer Tail] ? Head extends Remove ? Drop : Drop : Acc; type FlatmapSplitWithDelemiters< Inputs extends readonly string[], Delemiters extends readonly string[], Acc extends string[] = [], > = Inputs extends [infer FirstInput, ...infer RestInputs] ? FirstInput extends string ? RestInputs extends readonly string[] ? FlatmapSplitWithDelemiters< RestInputs, Delemiters, [...Acc, ...SplitWithDelemiters] > : Acc : Acc : Acc; type Split< Input extends string, Delimiter extends string, Acc extends string[] = [], > = Input extends `${infer Prefix}${Delimiter}${infer Suffix}` ? Split : [...Acc, Input];