import { ElementHandle } from 'puppeteer'; export const getRawProperty = async < T extends HTMLElement = HTMLElement, K extends keyof T = keyof T >( element: Promise> | ElementHandle, property: K ): Promise => (await ( await (await element)?.getProperty(property as string) )?.jsonValue()) as T[K]; export const getRawProperties = async < T extends HTMLElement = HTMLElement, K extends keyof T = keyof T >( element: Promise> | ElementHandle, ...properties: K[] ) => Promise.all(properties.map((property) => getRawProperty(element, property))); export const getRawPropertyFromMany = async < T extends HTMLElement = HTMLElement, K extends keyof T = keyof T >( elements: Promise[]> | ElementHandle[], property: K ): Promise => Promise.all( (await elements).map( async (element): Promise => (['innerText', 'innerHTML'] as K[]).includes(property) ? await element?.evaluate<[string]>( (element: T, property: string) => element[property], property as string ) : getRawProperty(element, property) ) );