@metascraper/helpers
Version: 
Collection of helper functions used by metascraper
38 lines (29 loc) • 889 B
JavaScript
const { workerData, parentPort } = require('node:worker_threads')
const { JSDOM, VirtualConsole } = require('jsdom')
async function main ({ url, html, timeout }) {
  const dom = new JSDOM(html, {
    url,
    virtualConsole: new VirtualConsole(),
    runScripts: 'dangerously',
    resources: 'usable'
  })
  const iframe = dom.window.document.querySelector('iframe')
  if (!iframe) return
  let timeoutId
  const waitForIframe = new Promise(resolve => {
    iframe.addEventListener(
      'load',
      () => {
        clearTimeout(timeoutId)
        resolve(iframe.contentDocument.documentElement.outerHTML)
      },
      { once: true }
    )
  })
  const timeoutReached = new Promise(
    resolve => (timeoutId = setTimeout(resolve, timeout))
  )
  return Promise.race([waitForIframe, timeoutReached])
}
main(workerData).then(html => parentPort.postMessage(html))