export async function retrieveLinksFromPage()

in packages/synthetics-sdk-broken-links/src/navigation_func.ts [47:91]


export async function retrieveLinksFromPage(
  page: Page,
  query_selector_all: string,
  get_attributes: string[]
): Promise<LinkIntermediate[]> {
  const origin_uri = await page.url();
  return await page.evaluate(
    (
      query_selector_all: string,
      get_attributes: string[],
      origin_uri: string
    ) => {
      const link_elements: HTMLElement[] = Array.from(
        document.querySelectorAll(query_selector_all)
      );
      return link_elements.flatMap((link_element: HTMLElement) => {
        const anchor_text = link_element?.textContent?.trim() ?? '';

        return get_attributes
          .map((attr) => (link_element.getAttribute(attr) || '').toString())
          .filter((value) => {
            const qualifed_url = new URL(value, origin_uri).href;
            return (
              value &&
              (qualifed_url.startsWith('http') ||
                qualifed_url.startsWith('file:'))
            );
          })
          .map((value) => {
            const qualifed_url = value.startsWith('file:')
              ? value
              : new URL(value, origin_uri).href;
            return {
              target_uri: qualifed_url,
              anchor_text: anchor_text,
              html_element: link_element.tagName.toLocaleLowerCase(),
            };
          });
      });
    },
    query_selector_all,
    get_attributes,
    origin_uri
  );
}