{"version":3,"sources":["jsdelivr-header.js","/npm/node-finviz-screener@0.0.6/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,MAAQ,QAAQ,cAChB,QAAU,QAAQ,WAElB,iBACJ,mHACI,oBAAsB,uBACtB,mBAAqB,sBAErB,MAAQ,MAAO,GACZ,IAAI,SAAQ,CAAC,EAAS,KAC3B,YAAW,IAAM,KAAW,EAAG,IASnC,eAAe,gBAAgB,EAAmB,EAAY,MAE5D,IACE,kCAAkC,KAAK,GAAmB,EAC5D,CAAE,MAAO,GACP,MAAO,oFACT,CAEA,MAAM,QAAY,MAAM,GAClB,QAAa,EAAI,OACjB,EAAI,QAAQ,KAAK,GAEjB,EAAO,EAAE,kBACZ,KAAI,SAAU,EAAG,GAChB,GAAU,IAAN,EAAS,OAAO,EAAE,MAAM,MAC9B,IACC,MAEH,EAAY,EAAY,EAAU,OAAO,GAAQ,EAEjD,MACM,EADa,EAAE,qBAAqB,WAClB,QAAO,SAAU,EAAG,GAE1C,MAAgB,SADH,EAAE,MAAM,MAEvB,IAEA,OAAI,EAAK,OAAS,SAEV,MAAM,GACL,gBAAgB,mBAAqB,EAAK,KAAK,QAAS,IAExD,CAEX,CAEA,OAAO,QAAU,CACf","file":"/npm/node-finviz-screener@0.0.6/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/node-finviz-screener@0.0.6/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fetch = require(\"node-fetch\");\nconst cheerio = require(\"cheerio\");\n\nconst TICKERS_SELECTOR =\n  \"#screener-content#screener-content > table > tbody > tr:nth-child(4) > td > table > tbody > tr > td:nth-child(2)\";\nconst PAGINATION_SELECTOR = \".screener_pagination\";\nconst FINVIZ_URL_PREPEND = \"https://finviz.com/\";\n\nconst timer = async (ms) => {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => resolve(), ms);\n  });\n};\n\n/**\n * Get a list of tickers that pass a Finviz screen\n * @param {string} finvizScreenerUrl - the url of the Finviz screener to search for\n * @returns {string[]|string} array of tickers that pass the Finviz screen, or an error message\n */\nasync function getFinvizScreen(finvizScreenerUrl, __tickers = null) {\n  // typeguard\n  try {\n    /(\\/\\/finviz.com\\/screener.ashx)/.exec(finvizScreenerUrl)[0];\n  } catch (err) {\n    return \"ERROR: invalid finviz screener URL. Please pass a valid link to a finviz screener.\";\n  }\n\n  const res = await fetch(finvizScreenerUrl);\n  const text = await res.text();\n  const $ = cheerio.load(text);\n\n  const syms = $(TICKERS_SELECTOR)\n    .map(function (i, el) {\n      if (i !== 0) return $(this).text(); // first row is header row (\"Ticker\")\n    })\n    .get();\n\n  __tickers = __tickers ? __tickers.concat(syms) : syms;\n\n  const pagination = $(PAGINATION_SELECTOR).children(); // all the other pages to go through\n  const next = pagination.filter(function (i, el) {\n    const text = $(this).text();\n    return text === \"next\";\n  });\n\n  if (next.length > 0) {\n    // if there is a 'next' page, go to it\n    await timer(7); // too quick a pace on the requests causes the server to return a blank page with only \"too many requests\" on it\n    return getFinvizScreen(FINVIZ_URL_PREPEND + next.attr(\"href\"), __tickers);\n  } else {\n    return __tickers;\n  }\n}\n\nmodule.exports = {\n  getFinvizScreen,\n};\n"]}